spring 에서 사용되는 DTO, DAO, VO 용어에 대한 의미

 

DAO

DAO(Data Access Object)는 데이터베이스의 data에 접근하기 위한 객체입니다.
DataBase에 접근하기 위한 로직&비즈니스 로직을 분리하기 위해 사용합니다.

프로젝트의 서비스 모델과 실제 데이터베이스를 연결하는 역할을 하며, JPA에서는 DB에 데이터를 CRUD하는 Repository 객체들이 DAO라고 볼 수 있다.

 

DTO

DTO(Data Transfer Object)는 계층 간 데이터 교환을 하기 위해 사용하는 객체로 DTO는 로직을 가지지 않는 순수한 데이터 객체(getter / setter 만 가진 클래스)입니다.

 

<유저가 입력한 데이터를 DB에 넣는 과정 예>
- 유저가 자신의 브라우저에서 데이터를 입력하여 form에 있는 데이터를 DTO에 넣어서 전송합니다.
- 해당 DTO를 받은 서버가 DAO를 이용하여 데이터베이스로 데이터를 집어 넣습니다.

 

Entity와 DTO를 분리하는 이유

Entity의 값이 변하면 Repository 클래스의 Entity Manager의 flush가 호출될 때 DB에 값이 반영되고, 이는 다른 로직들에도 영향을 미친다. 때문에 View와 통신하면서 필연적으로 데이터의 변경이 많은 DTO 클래스를 분리해 주어야 한다.

또한, 도메인 설계가 잘 되었다 해도 getter만을 이용해서 원하는 데이터를 표시하기 어려운 경우가 발생할 수 있는데, 이 경우에 Entity와 DTO가 분리되어 있지 않다면 Entity 안에 Presentation을 위한 필드나 로직이 추가되게 되어 객체 설계를 망가뜨리게 된다. 때문에 이런 경우에는 분리한 DTO에 Presentation 로직 정도를 추가해서 사용하고, Entity에는 추가하지 않아서 도메인 모델링을 깨뜨리지 않도록 한다.

 

VO

VO(Value Object) 값 Object로서 값을 위해 쓰입니다.
read-Only 특징(사용하는 도중에 변경 불가능하며 오직 읽기만 가능)을 가집니다.
DTO와 유사하지만 DTO는 setter를 가지고 있어 값이 변할 수 있습니다.

 

DTO와 VO와의 차이

VO(Value Object)도 DTO와 동일한 개념인데 차이점이 있다면 DTO는 데이터를 계층간 교환(Transfer)하는데 의미가 있고, VO는 읽기만 가능한 read-only 속성을 가진 객체로서 데이터 그 자체에 의미를 두고 있다는 점이다.

 

 

+ Recent posts