- [JPA] 34. RestAPI에 기반한 회원가입 기능 만들기2024년 10월 23일
- Song hyun
- 작성자
- 2024.10.23.:28
728x90반응형[JPA] 34. RestAPI에 기반한 회원가입 기능 만들기
*작업 순서
- 응답 결과 확인하기
- 공통 DTO 사용해 데이터 내려주기 설계
- 서비스 레이어 코드 수정 (레포지토리 코드 확인)
- 컨트롤러 레이어 코드 수정
1. [User] 폴더에 UserResponse 클래스 만들기
package com.tenco.blog_v3.user; import lombok.Getter; import lombok.Setter; public class UserResponse { @Getter @Setter public static class DTO{ private int id; private String username; private String email; // ex: User 엔티티 반환 -> 서비스 계층에서 DTO 객체로 변환 처리 public DTO(User user){ this.id = user.getId(); this.username = user.getUsername(); this.email = user.getEmail(); } // 이메일 정보를 포함하고 싶지 않다면 public DTO(User user, Boolean includeEmail){ this.id = user.getId(); this.username = user.getUsername(); if(includeEmail == true){ this.email = user.getEmail(); } else { this.email = null; } } } }
*삼항연산자를 통해 코드를 줄일 수 있다!
// 이메일 정보를 포함하고 싶지 않다면 public DTO(User user, Boolean includeEmail){ this.id = user.getId(); this.username = user.getUsername(); this.email = includeEmail ? user.getEmail() : null; }
2. UserDTO - 이름 수정
*UserDTO을 UserRequest로 이름 수정(리팩터링)
3. UserController 리팩터링
(1) 회원가입 메서드
/** * 회원 가입 기능 요청 * @param reqDTO * @return */ @ResponseBody @PostMapping("/join") public ResponseEntity<ApiUtil<UserResponse.DTO>> join(@RequestBody UserRequest.JoinDTO reqDTO) { // 회원가입 서비스는 서비스 객체에게 위임한다. userService.signUp(reqDTO); return ResponseEntity.ok(new ApiUtil<>(null)); }
(2) 서비스 & 레포지토리 검토
- Service 메서드에서 에러 발생 시, Exception을 호출하게 된다.
4. UserResponse를 사용해 메서드 리팩터링
-Service -> signUp() 메서드
/** * 회원 가입 서비스 */ @Transactional public UserResponse.DTO signUp(UserRequest.JoinDTO reqDto ) { // 1. username <-- 유니크 확인 Optional<User> userOp = userJPARepository.findByUsername(reqDto.getUsername()); if(userOp.isPresent()) { throw new Exception400("중복된 유저네임입니다"); } // 회원 가입 User savedUser = userJPARepository.save(reqDto.toEntity()); // 컨트롤러 -> DTO 반환 처리 return new UserResponse.DTO(savedUser); }
-Controller -> join() 메서드
/** * 회원 가입 기능 요청 * @param reqDTO * @return */ @ResponseBody @PostMapping("/join") public ResponseEntity<ApiUtil<UserResponse.DTO>> join(@RequestBody UserRequest.JoinDTO reqDTO) { // 회원가입 서비스는 서비스 객체에게 위임한다. UserResponse.DTO resDTO = userService.signUp(reqDTO); return ResponseEntity.ok(new ApiUtil<>(resDTO)); }
5. Postman으로 요청 해보기
728x90반응형'JPA' 카테고리의 다른 글
[JPA] JWT를 사용한 로그인 인터셉터 만들기 (0) 2024.10.25 [JPA] JWT란? (0) 2024.10.25 [JPA] 32. 공통 응답 DTO 및 예외 처리 구조 만들기 (0) 2024.10.23 [JPA] 31. RestAPI 주소설계와 세팅 (0) 2024.10.23 [JPA] 30. RestAPI 주소 설계 규칙 (0) 2024.10.21 다음글이전글이전 글이 없습니다.댓글
스킨 업데이트 안내
현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)