본문 바로가기

Spring

스프링(부트) - DTO와 Entity의 분리

MVC에서 Model의 역할  - Entity

MVC는 Model-View-Controller의 약자로 프로젝트를 구성할 때, 구성요소를 세 가지 역할로 나눈 것이다.

스프링 JPA를 사용할 때, Entity가 이러한 Model의 역할을 담당한다.

이렇게 Model의 역할을 담당해야할 Entity객체를 우리는 View와 Controller가 통신할 때, 넘겨주고싶은 욕구가 마구 생긴다.

결국, Entity하나로 귀결될 요청과 응답일 것이고, 대부분의 경우를 하나의 객체로 해결할 수 있다는 간단함 때문이다.

 

하지만 우리는 Entity가 아닌 Dto라는 개념을 가지고 사용을 한다.

 

Dto란 Data Transfer Object로 계층간 데이터 전달을 위한 객체이다.

 

왜 Entity로 데이터를 주고 받으면 편할 것 같은데 그렇게 하지 않을까?

1. 먼저 View와 Model을 명확하게 분리하기 위해서이다.

- Entity로 View와 데이터를 주고 받는다면, View의 필요에 의해 Model을 변경하는 경우가 생기기 때문

2. Entity는 변경의 영향도가 크고, DTO는 자주 바뀌기 때문에 하나로 사용하기 어렵다.

- DTO와 Entity를 분리하면, DTO의 변경이 Entity에 영향을 주지 않을 수 있다.

3. Entity로 모든 View의 표현들을 표현하지 못하는 경우가 있다.

- 예를 들어 데이터 저장을 위해 이전email과 변경email을 동시에 가져와야한다면? -> Entity로는 표현할 수 없다.

 

 

 

왜 Entity로 데이터를 주고 받으면 편할 것 같은데 그렇게 하지 않을까?