DTO (Data Transfer Object)
•
계층(Controller, View, Business) 간 데이터 교환을 위한 Java Beans
◦
Java Beans란?
JSP에서 객체를 가져오기 위한 기법으로 데이터 전달 오브젝트 파일 DTO(Data Transfer Object)와 동일시
자바로 작성된 컴포넌트들 즉, 클래스(Class)를 일반적으로 말함
•
비즈니스 로직을 가지지 않는 순수한 데이터 객체이며, getter/setter와 같은 메서드만 가진 클래스
•
DB에서 데이터를 얻어 Service, Controller Layer로 보낼 때 사용하는 객체
DAO (Data Access Object)
•
실제 DB에 접근하는 객체
•
비즈니스 로직과 DB에 접근하기 위한 로직을 분리하기 위해 사용
◦
웹 애플리케이션이 요청을 받게 되면 스레드를 생성한다.
이 때, 비즈니스 로직이 분리되어 있지 않으면 DB로부터 데이터를 얻어오기 위해 엄청 많은 커넥션이 일어나므로 DAO를 하나 만들어 DB 전용 객체로만 쓰기 위함
•
Service와 DB를 연결하는 역할
•
직접 DB에 접근하여 데이터를 삽입/삭제/조회 등의 기능을 수행
•
MVC패턴의 Model이 DAO의 역할을 수행
•
DAO는 CRUD 작업만 이루어지고 이를 받아 작업을 하는 Layer가 Service 클래스이다.
VO(Value Object)
•
값을 위해서 쓰인다.
•
Read-Only 특징 → 읽기만 가능
VO는 getter만 존재한다.
DTO는 setter도 있기 때문에 값이 변할 수 있다.
그 이유는 VO는 값들에 대해 Read-Only만 보장해야 신뢰성이 확보되지만 DTO는 단지 계층 간 데이터 교환을 위한 목적이므로 보장해야할 것이 없다.
즉, 값 자체에 의미가 있는 리터럴 개념의 VO와 계층 간 데이터를 제대로 전달해야 하는 인스턴스 개념의 DTO라고 생각하면 된다.
Entity
•
실제 DB 테이블과 매칭되는 클래스
•
최대한 외부에서 엔티티의 getter를 사용하지 않도록 해당 엔티티 안에서 필요한 로직을 구현
◦
그리고 여기서 구현한 메서드는 주로 Service Layer에서 사용
•
View Layer와 DB Layer의 역할을 철저하게 분리하기 위함
•
실제 DB 테이블과 매핑되는 Entity가 변경되면 여러 클래스에 영향을 끼친다. 반면에, View와 통신하는 DTO 클래스(Request / Response 클래스)는 자주 변경되므로 분리하는 것이 바람직
•
View 내에서 getter만을 이용해서 원하는 정보를 표시하기가 어려운 경우 발생 → 이런 경우Entity 클래스 내에 표현을 위한 필드나 로직을 추가하면 Entity 클래스의 순수성을 깨뜨림