[DTO(Data Transfer Object)]
: 마틴 파울러가 'Patterns of Enterprise Application Architecture'라는 책에서 처음 소개한 엔터프라이즈 애플리케이션 아키텍처 패턴 중 하나
: 데이터를 전송하기 위한 용도의 객체(클라이언트에서 서버 쪽으로 전송하는 요청 데이터를 전달 받을 때, 서버에서 클라이언트 쪽으로 전송하는 응답 데이터를 전송하기 위한 용도로 사용)
[DTO 필요 이유]
1) DTO 클래스를 이용한 코드의 간결성
: 요청 데이터를 하나의 객체로 전달 받는 역할
>> 요청 데이터가 많을 경우 추가되는 파라미터가 굉장히 많을 수 있기에 하나로 전달받으면 코드가 간결해질 수 있음
2) 데이터 유형성 검증의 단순화
* 유효성 검증 : 서버 쪽에서 유효한 데이터를 전달 받기 위해 데이터를 검증하는 것
: 핸들러 메서드 내부에 존재하는 유효성 검사 로직을 DTO 클래스로 빼내어 핸들러 메서드의 간결함 유지가 가능함
3) HTTP 요청의 수를 줄이기 위함
[코드 리팩토링 절차]
1. 정보를 전달받을 DTO 클래스를 생성
>> Controller에서 정보로 전달받는 각 데이터 항목들을 DTO 클래스의 멤버 변수로 추가
2. 클라이언트 측에서 전달하는 요청 데이터를 @RequestParm 애너테이션으로 전달받는 핸들러 메서드를 찾음
>>Request Body가 필요한 핸들러는 HTTP POST, PATCH, PUT과 같은 리소스의 추가나 변경이 발생할 때 필요
3. @RequestParm 쪽 코드를 DTO 클래스의 객체로 수정
4. Map 객체로 작성되어 있는 Response Body를 DTO 클래스의 객체로 변경
* DTO 클래스 생성 시 주의점
: 멤버 변수 이외에 각 멤버 변수에 해당하는 getter 메서드가 존재해야 Response Body에 해당 멤버 변수 값이 포함되지 않는 문제가 발생하는 것을 방지함
: setter 메서드는 선택사항
* DTO 클래스 단점
: Controller 클래스가 늘어남에 따라 DTO 클래스가 배로 늘어남
참고) JSON 직렬화/역직렬화
https://kcode-recording.tistory.com/74
[JSON] JSON 직렬화/역직렬화
JSON 역직렬화(Deserialization) : 클라이언트 쪽에서 JSON 형식의 데이터를 서버 쪽으로 전송하면 서버 쪽의 웹 애플리케이션은 전달 받은 JSON 형식의 데이터를 DTO 같은 Java 객체로 변환하는 것을 의미
kcode-recording.tistory.com
'공부 자료 > Spring' 카테고리의 다른 글
[Spring MVC] DTO 클래스와 Entity 클래스 역할 분리 필요 이유 (0) | 2022.10.24 |
---|---|
[Spring Boot] Spring Boot 프로젝트 생성하기 (feat.스타터 사이트) (0) | 2022.10.22 |
[Spring MVC] Spring MVC 동작 방식 & 구성 요소 (0) | 2022.10.20 |
[Spring MVC] Spring MVC란? (0) | 2022.10.20 |
[Spring Core] AOP - 애너테이션(Annotation) 이용 (0) | 2022.10.17 |