공부를 하면서 의문점이 생겼다.
보통 강의를 볼 때, Entity를 그냥 Service의 입력으로 받아서 사용했다.
그러다보니, DTO라는 개념을 알고는 있는데 도대체 어디서 사용하는거지? 라는 의문이 들었다.
계층 사이의 데이터 교환이 주 목적인 객체가 DTO라고 알고 있는데, DTO는 도대체 어디서 쓰는거야... 라는 생각도 들었다.
구글링을 해보니 좋은 글이 있었다.
DTO의 사용범위는 어디까지? 또, DTO 변환은 어디서?
전에 Controller와 Service 계층 간 데이터 전달을 어떻게 해야 좋을지에 대한 포스팅을 작성했었다. 뭔가 숲보다 나무를 먼저 본? 느낌이긴한데... 하하; 그때 배우던 예제에선 Service가 Entity를 반환했
stella-ul.tistory.com
결국 JPA라는 데이터 접근 기술을 사용하고, DTO라는 데이터 전송 객체도 같이 사용한다면, 어디선가에서는 DTO <-> Entity간의 변환을 해줘야할 곳이 있어야 하는 것이다!
실제 프로젝트를 진행할 때는 Entity 객체를 영속성 계층 밖에서 사용하기보다는 DTO를 이용해서 계층간에 데이터를 주고 받는 방식을 권장한다고 한다.
DTO는 읽고, 쓰는 것이 모두 허용되고, 일회성 목적이 강하다.
그러나 Entity는 DTO 처럼 단순히 데이터를 담는 객체가 아니라 실제 데이터베이스와 매핑되어서 테이블을 형성하는 객체이고, 내부적으로 EntityManger가 관리한다.
DTO와 Entity는 생명주기도 다르므로 분리해서 처리하는 것을 권장한다.
DTO 사용의 장점
1. Entity 객체 범위의 한정 -> 안전한 코드 작성 가능
2. 화면과 데이터를 분리하는 취지에 적합
DTO 사용의 단점
DTO <-> Entity 변환 과정이 필요