리팩토링: RequestDTO, ResponseDTO 생성 및 사용
1. 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
