리팩토링: RequestDTO, ResponseDTO 생성 및 사용
1. RequestDTO 생성

RequestDTO 를 패키지 별로 관리하지 않고 클래스내부에서 관리하겠습니다.
// 기존
@PostMapping("/join")
public String join(@RequestParam("username") String username, @RequestParam("password") String password, @RequestParam("email") String email) {
userRepository.save(username, password, email);
return "user/join-form";
}
// 변경 후
@PostMapping("/join")
public String join(UserRequest.JoinDTO joinDTO) {
userRepository.save(joinDTO);
return "user/join-form";
}
기존에 컨트롤러에서 직접
@RequestParam
을 사용하여 여러 매개변수를 받아오는 방식 대신, RequestDTO를 사용하여 더 간단하고 명확하게 매개변수를 관리할 수 있습니다.
2. DTO 클래스에 엔티티 변환 메서드 추가
DTO를 엔티티로 변환하는 패턴을 DTO 클래스 내에 추가합니다. 이를 통해 코드를 더 간결하게 작성할 수 있게 됩니다.

코드
public User toEntity() {
return User.builder().username(username).password(password).email(email).build();
}
3. 레포지토리에서 엔티티 직접 사용
리팩토링 전에는 레포지토리 메서드가 개별 필드를 받아서 처리했습니다.
DTO를 사용하여 더 간단하게 만들었습니다.
@PostMapping("/join")
public String join(UserRequest.JoinDTO joinDTO) {
userRepository.save(joinDTO.toEntity());
return "user/join-form";
}
//수정 전
@Transactional
public void save(String username, String password, String email) {
User user = new User();
user.setUsername(username);
user.setPassword(password);
user.setEmail(email);
em.persist(user);
}
// 수정 후
@Transactional
public void save(User user) {
em.persist(user);
}
스프링부트 게시판 시리즈 v2 -1. https://inblog.ai/hj/27190 (User 테이블 생성 및 쿼리 수정) -2. https://inblog.ai/hj/27193 (User, Board 테이블 조인 과 JPQL) -3. https://inblog.ai/hj/27224 (회원 가입) -4. https://inblog.ai/hj/27225 DTO 를 통한 리팩토링 -5. https://inblog.ai/hj/27310 로그인, 로그아웃 -6. https://inblog.ai/hj/27316 서비스 레이어 추가 및 DTO 활용 -7. https://inblog.ai/hj/27430 예외처리 핸들러 설정과 User 서비스 리팩토링 -8. https://inblog.ai/hj/27431 Board 기능 리팩토링 -9. https://inblog.ai/hj/27560 게시글 수정, 더티체킹(flush) -10. https://inblog.ai/hj/27561 인터셉터, AOP 사용 / 마무리
Share article