[RestAPI 개발기] 1. DTO 전환하기

편준민's avatar
May 05, 2025
[RestAPI 개발기] 1. DTO 전환하기
💡
DTO전환시 규칙
  • 모든 insert 요청 시에는 그 insert된 row를 DTO에 담아서 return
  • DTO에 민감정보 빼기, 날짜는 String으로 (날짜 공부하기 전까지)
  • update된 데이터도 DTO에 담아서 return
  • 화면에 보이는 데이터 + PK 포함(필수)
  • delete는 응답할 데이터가 없다.

update, insert 같은 DTO 사용해도 괜찮음
  • 화면에 출력하는게 아니기 때문에 같은 DTO를 사용해도 괜찮음
하지만 select를 하여 화면에 그림을 그릴 때 에는 화면이 똑같이 생겨도 같은 DTO 사용 금지
  • A, B와 화면이 같아서 같은 DTO를 사용하다가 B에 추가를 해야할 것이 있어서 추가하다보면 A의 화면이 꼬임
  • 화면도 꼬이고 프론트에게 B에 필요한거 하나 추가 했으니 A에서는 쓰면 안되라고 말하면 안됨
delete는 돌려줄 row없으니 돌려줄 DTO도 없음
💡

DTO 생성

  • 테이블 column을 그대로 옮기고 어노테이션 삭제 후 생성자 생성
  • 생성자는 객체를 받기
package shop.mtcoding.blog.user; import lombok.Data; public class UserResponse { @Data public static class DTO { // 규칙 2 : DTO에 민감정보 빼기, 날짜는 String으로 (날짜 공부하기 전까지) private Integer id; private String username; // private String password; // 보안에 민감한 데이터는 주면 안됨 private String email; private String createdAt; // 날짜는 Timestamp 말고 String으로 받기 public DTO(User user) { // 객체를 받아서 뿌리기 this.id = user.getId(); this.username = user.getUsername(); this.email = user.getEmail(); this.createdAt = user.getCreatedAt().toString(); // . toString하면 문자열로 바뀜 } } }
notion image

Service에서 DTO넘기기

  • 영속화된 객체를 DTO에 담아서 Controller로 넘겨주었다.
// RestAPI 규칙1 : insert 요청 시에 그 행을 DTO에 담아서 리턴한다. @Transactional public UserResponse.DTO 회원가입(UserRequest.JoinDTO reqDTO) { try { User userPS = userRepository.save(reqDTO.toEntity()); return new UserResponse.DTO(userPS); } catch (Exception e) { throw new Exception400("잘못된 요청입니다"); } }

Controller

  • DTO를 받아서 추후 return값을 DTO로 변경
@PostMapping("/join") public String join(@Valid UserRequest.JoinDTO reqDTO, Errors errors) { // DTO로 변경 완료 UserResponse.DTO respDTO = userService.회원가입(reqDTO); return "redirect:/login-form"; }

5. 모든 코드 전환 완료 후 테스트 하기

  • 테스트 전에 이제부터는 view를 만들지 않기때문에 필요하지 않은 mustache를 삭제
notion image
notion image
notion image
Share article

YunSeolAn