[v2] Spring 게시판 조금 알고 따라하기-4

requerst DTO, response DTO 생성을 통한 리팩토링
HootJem's avatar
Aug 21, 2024
[v2] Spring 게시판 조금 알고 따라하기-4
리팩토링: RequestDTO, ResponseDTO 생성 및 사용

1. RequestDTO 생성

notion image
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 클래스 내에 추가합니다. 이를 통해 코드를 더 간결하게 작성할 수 있게 됩니다.
notion image
코드
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

[HootJem] 개발 기록 블로그