DTO, DAO, VO에 대해서

myeonji·2022년 6월 16일
0

Spring

목록 보기
22/22

> DTO (Data Transfer Object)

  • 계층 간 데이터 교환을 하기 위해 사용하는 객체
  • Entity를 Controller 같이 클라이언트단과 직접 마주하는 계층에 직접 전달하는 대신, DTO를 사용해 데이터를 교환
  • 순수한 데이터 객체

ex) 유저가 입력한 데이터를 DB에 넣는 과정
1. 유저가 자신의 브라우저에서 데이터를 입력하여 form에 있는 데이터를 DTO에 넣어서 전송
2. 해당 DTO를 받은 서버가 DAO를 이용하여 데이터베이스로 데이터를 집어넣음

> DAO (Data Access Object)

  • 실제로 데이터베이스의 data에 접근하기 위한 객체
  • 프로젝트의 서비스 모델과 실제 데이터베이스를 연결하는 역할
  • JPA에서는 DB에 데이터를 CRUD하는 Repository 객체들이 DAO라고 볼 수 있음

> VO (Value Object)

  • DTO와 비슷하지만, read-Only 특징 (사용하는 도중 변경 불가능, 읽기만 가능)

Entity와 DTO를 분리하는 이유

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

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

출처

0개의 댓글