[cs]DTO(Data Transfer Object)
🔎 DTO
- 계층(Layer)간 데이터 교환이 이루어질 수 있도록 하는 객체
- 주로 Controller 같은 크라이언트단과 직접 마주하는 계층에서Entity 대신 DTO를 사용해서 데이터를 교환
- 계층간 데이터 교환이 이루어질 수 있도록 하는 객체로 Getter/Setter 이외의 로직은 포함하지 않는 순수한 데이터 객체
DTO 사용 이유
- (안정성 및 보안)Entity는 getter/setter를 가질 수 있고 도메인 핵심 로직과 속성을 가지고, DB테이블과 매칭되는 클래스이다
- Entity가 Getter/Setter를 가지고 데이터 전달을 할 경우, 자원의 속성이 실수로 변경될 수 있다
- Entity를 UI 계층에 노출하는것은 테이블 설계를 화면에 공개하는것과 다름없으므로 보안상으로 바람직하지 못하다
- Entity 내부 구현을 캡슐화 하고 UI계층에 노출시키지 않아야 하는것이 데이터 전달 역할로 DTO를 사용하는 이유
- (효율성) 서비스가 확장하면 Entity의 크기는 점점 복잡해진다
- 요청과 응답으로 Entity를 사용하게 될 경우 요청하는 화면에 필요하지 않은 속성도 함께 보내게 된다(오버헤드 발생)
- 특정 API에 필요한 데이터를 포함한 DTO를 별도로 만들면, 화면에서 요구하는 필요한 데이터들만 선별하여 요청과 응답을 할 수 있는 장점이 있다