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)
참고한 글