티스토리 뷰

728x90
반응형

DTO란 이름 그대로 프로세스 사이에서 데이터를 전송하는 객체이다.

 

클라이언트 - 서버 간의 반복된 요청/응답에 따른 지연시간을 줄이기 위해

 

여러 요청에 대한 데이터를 한 번에 담는 객체로서 도입되었다.

 

조금 더 구체적으로는 클라이언트 - 서버 간의 요청/응답에 따르는 반복되는 직렬화를 맡아하는 객체라 할 수 있으며,

 

DTO를 구성하는 원칙은 다음과 같다.

 

  • DTO는 가능하면 POJO(Plain Old Java Objects)로 생성한다.
  • 순수하게 데이터를 저장하는 역할과, 데이터에 대한 getter(), setter() 메서드만을 가진다.
  • 저장, 검색, 직렬화, 역직렬화 로직을 제외한 어떠한 비즈니스 로직도 갖지 않는다.

    • 직렬화 - 서버가 DTO 같은 Java 객체를 JSON 형식으로 변환하는 것
    • 역직렬화 - 서버가 전달 받은 JSON 형식의 데이터를 DTO 같은 Java의 객체로 변환하는 것

또한 DTO를 도입함으로써 기대하는 장점은 크게 다음과 같다.

 

  • 매개변수의 정리 및 코드의 간결성 확보 - postMember() 메서드에 파라미터로 @RequestParam이 계속 추가되는 것을 방지
  • Request Body(요청 데이터) 유효성(Validation) 검증의 단순화

    • 유효성 검증 - 서버 측에서 이메일 주소 규격(gni@gmail.com)과 같은 데이터의 유효성을 검증하는 것
    • ex)@Email을 추가하면 요청 데이터에 유효한 이메일 주소가 포함되어 있지 않을 경우 유효성 검증 실패
    • 유효성 검증 로직을 DTO 클래스로 빼내어 핸들러 메서드의 간결성 유지
  • 비용이 많이 드는 작업인 HTTP 요청 수 최소화 - 요청에 대한 모든 데이터를 저장할 수 있는 DTO를 사용

마지막으로 DTO를 사용하는 올바른 경계에 대해서는 논란이 있으며,

 

이에 대해 Repository 레이어에서 사용하지 말자는 점에 대해서는 대체로 합의하는 편이지만

 

컨트롤러와 서비스 레이어 중 어느 쪽이 올바른 위치인지는 서비스의 크기, 상황, 복잡도에 따라 다르다고 한다.

반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함