티스토리 뷰
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 레이어에서 사용하지 말자는 점에 대해서는 대체로 합의하는 편이지만
컨트롤러와 서비스 레이어 중 어느 쪽이 올바른 위치인지는 서비스의 크기, 상황, 복잡도에 따라 다르다고 한다.
반응형
'Development > Technical Interview' 카테고리의 다른 글
[면접 준비 - Spring]JUnit, Hamcrest, Assertion (0) | 2022.12.13 |
---|---|
[면접 준비 - Spring]트랜잭션(Transaction)에 대하여 (0) | 2022.12.13 |
[면접 준비 - Spring]Spring JDBC, Spring Data JDBC, Spring Data JPA (0) | 2022.12.13 |
[면접 준비 - Spring]ResponseEntity에 대하여 (0) | 2022.12.13 |
[면접 준비 - Spring]Spring MVC의 REST API 엔드포인트 (1) | 2022.12.13 |
[면접 준비 - Spring]DI(의존관계 주입)의 특징과 장점 (0) | 2022.12.13 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 중남미
- RX100M5
- 세모
- 칼이사
- 유럽
- 스트림
- 여행
- a6000
- 세계일주
- 동적계획법
- 백준
- 세계여행
- 파이썬
- 맛집
- Python
- 기술면접
- 지지
- 야경
- 리스트
- 알고리즘
- 자바
- BOJ
- java
- spring
- Backjoon
- 면접 준비
- 스프링
- Algorithm
- 유럽여행
- 남미
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함