: DTO란, 비즈니스에 종속되어있고, Layer간 데이터 전송이 목적인 일종의 자료구조 역할을 수행하는 객체
DTO가 필요한 이유
- 일단 필요 정도는 프로젝트 규모에 따라 다를 것 같다. 큰 프로젝트일수록 DTO가 잘 분리되어 있다면 복잡도를 줄일 수 있고 변화에 용이할 것 같다.
- DTO와 엔티티를 분리하는 이유: 비즈니스의 변경에 따라 Entity와 독립적으로 변경될 가능성이 항상 있기 때문이다.
DTO 사용과 위치
: 일단 표준은 없어서 명확히 DTO 위치에 정해진 것도 없고 상황에 따라 다양하게 사용될 수 있다.
사용되는 경우
- 컨트롤러와 서비스가 DTO를 주고받고 서비스에서 Entity화 (repository는 DTO가 아닌 Entity에 의존적이기 때문)
- e.g)
fooEntity = FooDto.toEntity();
- e.g)
- 서비스가 Entity를 DTO로 변환시켜 컨트롤러로 반환하기
- e.g)
return FooDto.of(fooEntity);
- e.g)
DTO는 일반적으로 원시 타입을 사용한다.
- 어차피 JSON형태로 앞단에 전달하니까 원시 타입을 사용한다. Entity에는 nullable을 표현 할 수 있는 래퍼타입을 권장한다.
Reference)
https://xlffm3.github.io/spring%20&%20spring%20boot/DTOLayer/
https://dbbymoon.tistory.com/4
https://github.com/HomoEfficio/dev-tips/blob/master/DTO-DomainObject-Converter.md