본문 바로가기

공부 자료/Spring

[Spring MVC] DTO(Data Transfer Object)/클래스 생성

[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