JPA
[JPA] 34. RestAPI에 기반한 회원가입 기능 만들기
Song hyun
2024. 10. 23. 10: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
반응형