Entity
실제 DB 테이블과 매핑되는 핵심 클래스로 데이터베이스 테이블에 존재하는 컬럼을 필드로 가지는 객체
데이터베이스 영속성(persistent)의 목적으로 사용되는 객체
영속성 컨텍스트란
- 영속성 : 데이터를 생성한 프로그램이 종료되어도 사라지지 않는 데이터의 특징
- 영속성 컨텍스트(persistence context) 는 엔티티를 영구 저장하는 환경
- 트랜잭션을 커밋하는 순간 영속성 컨텍스트에 새로 저장된 엔티티 DB에 반영 ( flush() )
Dto
계층간 데이터 교환이 이루어질 수 있도록 해주는 객체controller같은 클라이언트 단과 직접 마주하는 계층에서는 Entity 대신 DTO사용하여 데이터 교환Getter, Setter 메서드를 포함하며, 이 외의 비지니스 로직은 포함하지 않음
VO
동일성이 정체성을 기반으로 하지 않는 돈이나 날짜 등과 같은 작고 간단한 개체
- 값이 불변한다( 설정한 뒤에는 수정할 수 없다)
- 값이 같다면 동일성이 보장된다
DTO와 VO의 차이점
DTO | VO |
내부의 값이 모두 같은 객체가 존재해도 동일하지 않음 | 값이 모두 같은 객체가 존재하면 동일 |
값 수정 가능 | 값 수정 불가능 |
Controller같은 클라이언트 단과 직접 마주하는 계층에서 Entity대신 DTO를 사용하는 이유
많은 서비스 클래스와 비지니스 로직들이 Entity클래스를 기준으로 동작하기 때문에 Entity클래스가 변경되면 여러 클래스에 영향을 줄 수 있다.
비슷한 이유로 Entity에서는 setter사용을 지양한다.
setter를 사용하면 변경되지 않는 인스턴스에서도 접근이 가능해지기 때문에 객체의 일관성과 안전성을 보장하기 힘들어진다.
때문에 Entity에서는 Constructor ( 생성자) 나 Builder(빌더) 를 사용한다.
또한 DTO를 사용하면 각 레이어 간 역할을 분리할 수 있기 때문에 Entity대신 DTO를 사용한다
참고 자료
https://kafcamus.tistory.com/13
https://wildeveloperetrain.tistory.com/101
https://velog.io/@devtel/JPA-%EC%98%81%EC%86%8D%EC%84%B1persistence%EC%9D%B4%EB%9E%80
'Spring' 카테고리의 다른 글
Spring) HttpServletRequest, HttpServletResponse (0) | 2022.12.04 |
---|---|
Spring) 의존성이란? (1) | 2022.12.02 |
Spring) MVC 패턴 (Controller,Repository,Service) (0) | 2022.12.01 |
Spring) Annotation의 개념과 종류 (1) | 2022.12.01 |
Spring) Request - @Requestparam, @pathVariable ,@Requestbody (0) | 2022.11.30 |