DTO 클래스와 엔티티(Entity) 클래스를 매핑해서 변환하는 이유가 무엇일까?
✔ 계층별 관심사의 분리
우선 서로 사용되는 계층이 다르다. 따라서 기능에 대한 관심사가 다름.
DTO 클래스는 API 계층에서 요청 데이터를 전달 받고, 응답 데이터를 전송하는것이 주 목적인 반면에 Entity 클래스는 서비스 계층에서 데이터 액세스 계층과 연동하여 비즈니스 로직의 결과로 생성된 데이터를 다루는 것이 주 목적
하나의 클래스나 메서드 내에서 여러 개의 기능들을 구현하고 있는 것은 리팩토링 대상이 될수 있다.
✔ 코드 구성의 단순화
DTO 클래스에서 사용하는 유효성 검사 애너테이션이 Entity 클래스에서 사용이 된다면 JPA에서 사용하는 애너테이션과 뒤섞인 상태가 되어 유지보수하기 상당히 어려운 코드가 된다.
✔ REST API 스펙의 독립성 확보
데이터 액세스 계층에서 전달 받은 데이터로 채워진 Entity 클래스를 클라이언트의 응답으로 그대로 전달하게되면 원치 않는 데이터까지 클라이언트에게 전송될 수 있다.
대표적인 예가 바로 회원의 로그인 패스워드
DTO 클래스를 사용하면 회원의 로그인 패스워드 같은 정보를 클라이언트에게 노출하지 않고, 원하는 정보만 제공할 수 있다.