스프링

[Spring] Entity, DTO, VO 비교하기

여니여니_ 2021. 12. 1. 00:33

스프링을 처음 접할 때 Entity, DTO, VO, Dao, Repository 등등의 용어가 굉장히 헷갈렸다. 

 

그 중에서도 데이터와 가까이(?) 있는 Entity, DTO, VO 세 가지를 비교해보려고 한다. 

 

일단 가장 구분이 쉬운 것은 Entity이다. 

Entity는 DB와 가장 가깝다.

테이블과 매핑되는 객체이다. 

각 id를 통해 entity를 구분한다. 

entity에는 @Getter와 @Setter가 없다. 

대신 메소드를 활용해 변경할 수 있다. 

 

다음으로 VO는 객체의 불변성을 보장하는 객체이다. 

서로 다른 이름을 가지고 있는 객체더라도 모든 속성 값이 같다면 두 인스턴스는 같다고 할 수 있다.

따라서  VO는 Object 클래스의 equals()와 hashCode()를 오버라이딩 해야한다. (IDE의 기능 활용)

 

마지막으로 DTO는 계층간의 데이터 교환을 위한 객체이다.

Entity, VO와는 다르게 로직을 가질 수 없고, @Getter와 @Setter는 가질 수 있다.

DTO가 필요한 이유는 한 객체의 모든 정보를 클라이언트에 노출할 필요가 없기 때문이다.

예를 들어, 상품 데이터에 id, name, price, cost_price, regi_date, modi_date와 같은 컬럼들이 있다고 하자.

그러면 원가 정보인 cost_price, regi_date, modi_date 와 같은 정보들은 노출시키고 싶지 않을 때 id, name, price 만을 태우는 DTO 객체를 만들 수 있다.