1. 엔티티 내부 구현을 캡슐화할 수 있다.
엔티티는 실제 DB의 테이블과 매칭되는 클래스로서 도메인의 핵심 로직과 속성을 가지고 있다. 만약 DTO 대신 엔티티를 UI 계층에 노출하게 되면 테이블 설계가 공개되어 보안상으로 문제가 될 수 있다. 따라서 엔티티의 내부 구현을 캡슐화하고 UI계층에 노출시키지 않기 위해서 DTO를 사용해야 한다.
2. 화면에 필요한 데이터를 선별할 수 있다.
3. validation 코드와 모델링 코드를 분리할 수 있다.
엔티티 클래스는 DB의 테이블과 매칭되는 필드가 속성으로 선언되어 있고, 복잡한 비즈니스 로직이 작성되어있는 곳이다. @NotNull
, @NotEmpty
, @NotBlank
등과 같은 요청에 대한 값의 validation코드가 들어간다면 엔티티 클래스는 더 복잡해지고 그만큼 가독성이 저하된다.
4. DTO를 사용하지 않을 경우 엔티티의 변경에 의해 API 스펙이 변경될 수 있다.