계층간 데이터 교환을 위해 사용하는 객체
DTO
를 사용하면 중요한 정보를 노출시키지 않고 두 시스템(API와 서버 등) 간 통신을 원활하게 촉진 가능
MVC패턴
에서 주로 Client
와 Controller
사이에서 DTO
사용
password
와 같은 노출되면 안되는 값들을 위해 중간에서 DTO
를 사용해줌!
출처 : https://blog.scottlogic.com/2020/01/03/rethinking-the-java-dto.html
순수하게 데이터를 저장하고, 데이터에 대한 getter
, setter
만을 가져야 함
Spring
에 의해 자동으로 직렬화
, 병렬화
됨
Entity
클래스와 거의 유사한 형태임에도 DTO
클래스를 추가로 생성하는 이유 : Entity
클래스가 데이터베이스
와 맞닿은 핵심 클래스이기 때문Entity
클래스를 기준으로 테이블이 생성되고 스키마가 변경되는데, 화면 변경
과 같은 사소한 기능
변경을 위해 테이블과 연결된 Entity
클래스를 변경하는 것은 너무 큰 변경DTO
를 보면 어떤 값들이 매핑되는지 쉽게 파악할 수 있고, API 설계 상황에서 필드에 다른 이름을 부여하거나 하는 상황에서도 유연하게 대처 가능Controller
와 Service
사이에서 강한 의존
을 방지하기 위해Service
가 받고 싶은 파라미터가 Controller
에게 종속적이면 의존하게 됨 → 방지하기 위해 Service
가 원하는 포맷에 맞춰 Controller
단에서 DTO
를 통해 포맷을 맞춰줌View Layer
와 DB Layer
의 역할 분리느낌은 알겠는데 더 자세히 알기 위해서는 Spring
의 동작원리에 대해서 잘 알아야 할 것 같다.