Web/Spring

DAO, DTO, VO, Repository, 뭐가 다른걸까?

UL :) 2022. 6. 7. 04:44

Entity

  • doamin 패키지
  • DB 테이블과 1:1로 매핑되는 객체
  • 데이터베이스 테이블내에 존재하는 컬럼만을 속성으로 가진다
  • 도메인 로직(속성 변경)만을 가지고 있어야 하고 서비스 로직은 가지고 있으면 안된다.

 

DAO(Data Access Object)

  • repository 패키지
  • DB의 데이터에 접근하기 위한 객체. 삽입, 삭제, 조회 등의 기능 수행
  • JPA에서의 Repository의 기능과 동일한 역할

 

DTO(Data Transfer Object)

  • dto 패키지
  • 각 계층간(Controller, View, Business Layer(Model)) 데이터 교환을 위한 객체
  • 로직을 가지지 않는 데이터 객체.
  • Getter와 Setter 메서드만 가진 클래스
  • 유효성 체크 애노테이션 사용하면 편리
implementation 'org.springframework.boot:spring-boot-starter-validation'

 

VO(Value Object)

  • dto 패키지
  • 불변, Read-Only 클래스
    • equals()와 hashcode()를 오버라이딩하는 것은 필수
  • Setter 성격을 가지고 있는 메서드는 가져서는 안되며 오로지 생성자로만 값을 초기화해야하고 Getter 성격의 메서드만 사용

 

Repository

  • 영구 저장소가 아닌, 객체의 상태를 관리하는 저장소
  • 인터페이스로 구현체를 따로 작성하면 도메인 계층, 아니면 서비스 계층이라고 할 수 있겠다. (?)

 

적시적소! 어디에 무얼 써야하나

 

  • DTO: 계층 간 데이터 전달용
  • VO: 값을 갖는 도메인
  • Entity: DB와 매핑되는 용
  • Repository: = DAO, DB 접근용(CRUD)

 

참고한 글

https://velog.io/@maketheworldwise/DAO-DTO-VO-ENTITY