💡 DAO(Data Access Object)
- 실제로 DB에 접근하는 객체
- Service와 DB를 연결하는 고리 역할
- JPA에서는 따로 DAO를 만들지 않아도 트랜잭션 설정에 크게 문제는 없다.
- Repository는 DAO의 역할을 대신한다. 비슷하지만 차이는 분명있다.
💡 DTO(Data Transfer Object)
- 각 계층 간 데이터 교환을 위한 객체
- DB에서 데이터를 얻어 service나 controller 등으로 보낼 때 사용(즉 DB의 데이터가 DTO의 모습으로 바뀌어서 오고 간다.)
💡 VO(Value Object)
- DTO와 동일한 역할을 하나 읽기만 가능(수정 불가)
💡 Entity Class
- 실제 DB의 테이블과 매칭될 클래스
- 테이블과 매핑되는 Entity Class가 변경되면 여러 클래스에 영향을 끼치게 되나 DTO클래스는 자주 변경되므로 분리해야한다.
Entity와 DTO를 분리하는 이유
DB의 테이블과 매핑되는 Entity의 값이 변하면 DB의 값에도 변화가 반영되고, 이는 다른 로직들에도 영향을 미친다. 때문에 View와 통신하면서 필연적으로 데이터의 변경이 많은 DTO 클래스를 분리해주어야 한다.
참고 | DAO, DTO, Entity Class의 차이
참고 | Entity, DAO, DTO가 무엇이며 왜 사용할까?