쏭의 개발 블로그

DAO, DTO, VO, Domain 차이 본문

Back-end/Spring

DAO, DTO, VO, Domain 차이

songu1 2023. 10. 7. 17:11

1. DAO : Data Access Object (= Repository)

DB의 데이터에 접근하기 위한 객체로 DB에 접근하기 위한 로직과 비즈니스 로직을 분리

  • repository 패키지
  • 실제로 DB에 접근하여 데이터를 CRUD하는 객체로 Service와 DB를 연결해주는 역할
  • 인터페이스와 구현체를 만들어 CRUD 관련 기능을 구현하고 DI 해줌
  • SQL을 사용하여 DB에 접근한 후 적절한 CRUD API를 제공
  • MyBatis 등을 사용할 경우 커넥션 풀까지 제공되므로 별도로 만드는 경우는 적음

 

2. DTO : Data Transfer Object

계층 간 데이터 교환을 하기 위해 사용하는 객체로 로직을 가지지 않는 순수한 데이터 객체

  • DTO 패키지
  • getter, setter만 가짐
  • DB에서 데이터를 받고 Service나 Controller로 넘겨줌
    • DB의 데이터가 Presentation Logic Tier로 넘어올 때 DTO의 모습으로 바뀌어서 오고
  • view와 통신하기 위한 클래스
    • 자주 변경이 필요한 클래스로 Presentation Model
    • Controller 계층에서 Response DTO형태로 Client에 전달
  • 브라우저에서 입력한 데이터 Form → DTO → DAO → DB

 

3. VO : Value Object

값을 위해 쓰이며 read-only로 값 타입을 표현하기 위한 불변 클래스

  • DTO와 비슷하지만 getter만을 사용(setter는 사용X)

 

4. Domain (= Entity)

실제 DB의 테이블과 매칭시키는 클래스

  • Domain 패키지
  • @Entity, @Column, @Id 등의 annotation 사용
  • 최대한 외부에서 Entity 클래스의 getter method를 사용하지 않도록 해당 클래스 안에서 필요한 로직 메소드를 구현
    • Domain Logic만 가지고 있어야하며 Presentation Logic을 가지고 있어서는 안됨
    • Service 계층에서 사용됨

 

 

💜 Domain와 DTO를 분리하는 이유

(1) Domain은 DB계층, DTO는 View 계층을 위한 것

➡️ 역할을 철저히 분리하기 위해

 

(2) Domain은 테이블 매핑 클래스로 변경사항이 생기면 다른 클래스에 영향을 주므로 신중히 설계하지만 변경사항이 상대적으로 적은 클래스

 

(3) DTO는 request/response에 대한 부분 혹은 view 관련 Presentation 로직을 가지는 자주 변경되는 클래스

➡️ Domain과 DTO를 분리할 필요가 있음

 

 


https://woogienote.tistory.com/88

https://melonicedlatte.com/2021/07/24/231500.html

https://velog.io/@linger0310/DDD

https://jihoon2723.tistory.com/entry/VO-DAODTO-Entity-Domain-클래스-비교하기

'Back-end > Spring' 카테고리의 다른 글

WebFlux에 대해서  (0) 2023.11.07
@Controller와 @RestController 차이  (0) 2023.10.07
Spring AOP  (0) 2023.10.07
[Spring] Spring이란?  (0) 2023.02.07