DAO(Data Access Object)란?
1) DAO(Data Access Object) 란?
- 실제로 DB에 접근하는 객체.
- Presistence Layer(DB에 data를 CRUD하는 계층)
- Service와 DB를 연결하는 고리의 역할.
- SQL를 사용하여 DB에 접근한 후 적절한 CRUD API를 제공.
- JPA는 대부분의 기본적인 CRUD method를 제공하고 있습니다.(JPA 레퍼런스 참고사이트 - https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#jpa.query-methods)
- JPA 사용 예제
public interface BoardRepository extends JpaRepository<Board, Integer> {
List<Board> findAllByOrderByCreateAtDesc();
List<Board> findAllByOrderByModifiedAtDesc();
}
DTO(Data Transfer Object)란? VO란?
1) DTO(Data Transfer Object)란?
- Data Transfer Object = 데이터를 전달하기 위해 사용하는 객체 = 데이터를 담아서 전달하는 바구니
- DB에서 데이터를 얻어 Service나 Controller 등으로 보낼 때 사용하는 객체.
- 즉, DB의 데이터가 Presentation Logic Tier로 넘어오게 되면 DTO의 모습으로 바껴서 오고간다.
- 오직 getter/settr 메서드 만을 가지고. 다른 로직을 갖지않는 순수한 데이터 객체!!!
- DB에서 꺼낸 값을 임으로 변경할 필요가 없기 때문에 DTO 클래스에는 setter가 없다.(대신 생성자에서 값을 할당한다.)
- Request와 Response용 DTO는 View를 위한 클래스
- 자주 변경이 필요한 클래스
- Presentation Model
- toEntity() 메서드를 통해서 DTO에서 필요한 부분을 이용하여 Entity로 만든다.
- 또한 Controller Layer에서 Response DTO 형태로 Client에 전달한다.
2) VO(Value ObjecT)란?
- Value Object(=값 그 자체를 표현하는 객체)
- 말 그대로 값을 표현하는 객체다. (돈, 이름 등) 현실세계에도 VO 개념이 존재.
- 지폐의 일련번호는 모두 다르지만, 우리는 이것들을 모두 “10,000원권” 이라고 부른다. 이 “10,000원권” 개념이 VO.
3) DTO vs VO 총정리.
Entity란?
1) Entity란?
- 실제 DB의 테이블과 매칭될 클래스
- 즉, 테이블과 링크될 클래스임을 나타냄.
- Entity 클래스 또는 가장 Core한 클래스라고 부름.
- @Entity, @Column, @Id 등을 이용
- 참고 Entity 클래스와 DTO 클래스를 분리하는 이유
- View Layer와 DB Layer의 역할을 철저하게 분리하기 위해
- 테이블과 매핑되는 Entity 클래스가 변경되면 여러 클래스에 영향을 끼치게 되는 반면 View와 통신하는 DTO 클래스(Request / Response 클래스)는 자주 변경되므로 분리해야 한다.
- Domain Model을 아무리 잘 설계했다고 해도 각 View 내에서 Domain Model의 getter만을 이용해서 원하는 정보를 표시하기가 어려운 경우가 종종 있다. 이런 경우 Domain Model 내에 Presentation을 위한 필드나 로직을 추가하게 되는데, 이러한 방식이 모델링의 순수성을 깨고 Domain Model 객체를 망가뜨리게 된다.
- 또한 Domain Model을 복잡하게 조합한 형태의 Presentation 요구사항들이 있기 때문에 Domain Model을 직접 사용하는 것은 어렵다.
- 즉 DTO는 Domain Model을 복사한 형태로, 다양한 Presentation Logic을 추가한 정도로 사용하며 Domain Model 객체는 Persistent만을 위해서 사용
참고 : https://velog.io/@gillog/Entity-DTO-VO-%EB%B0%94%EB%A1%9C-%EC%95%8C%EA%B8%B0
참고 : https://gmlwjd9405.github.io/2018/12/25/difference-dao-dto-entity.html
참고 : https://www.youtube.com/watch?v=z5fUkck_RZM
'웹 기술 쌈싸먹기 > Spring' 카테고리의 다른 글
[Spring] SpringBoot에 Thymeleaf 적용 (0) | 2022.01.25 |
---|---|
[Spring] Controller에서 파라미터를 받는방법 (0) | 2022.01.24 |
[JPA] 엔티티 매핑 @어노테이션 정리/예제 (0) | 2022.01.23 |
[Spring] JPA를 사용하는 이유, JPA공식 Reference 홈페이지 (0) | 2022.01.23 |
[Spring] DI(의존성 주입) 란? (0) | 2022.01.22 |