Entity란?
- Entity 클래스는 DB의 테이블에 존재하는 Column들을 필드로 가지는 객체
- DB 테이블과 1ㄷ1 대응 그래서 테이블이 가지지 않는 컬럼을 필드로 가져서는 안된다
- 또한 Entity 클래스는 다른 클래스를 상속받거나 인터페이스의 구현체여서는 안된다
- JPA를 사용할 때 Entity 클래스에는 @Entity 어노테이션을 붙여서 Entity임을 명시해 줘야함
- 내부의 필드에는 @Column, @Id 어노테이션 등을 사용
- Entity는 외부에서 최대한 Entity의 Getter를 사용하지 않도록 내부에 로직을 구현하는데, 이 때 Domain 로직만 구현하고 Presentation 로직은 구현하지 않는다.
- Setter를 무분별하게 사용하게 되면, Entity의 인스턴스 값들이 언제 어디서 변하는지 명확히 알 수 없다
DAO란 ??
- DB에 직접 접근하는 객체
- 프로젝트의 서비스 모델과 실제 DB를 연결하는 역할
- JPA에서는 DB에 데이터를 CRUD하는 Repository 객체들이 DAO라 볼 수 있음
- DB의 데이터를 삽입, 삭제, 조회 등을 조작하는 기능 수행
- DB 접근 로직과 비즈니스 분리 위해 사용
DTO란 ??
- DTO 에는 비즈니스 로직이 없어야함
- 계층간(Controller, View, Business Layer)데이터 교환을 위한 객체(자바 빈즈)
- 특별한 로직을 가지지 않는 순수한 데이터 객체여야함
- DB에서 꺼낸 데이터를 저장하는 Entity를 가지고 만드는 일종의 Wrapper
- Entity를 Controller 같은 클라이언트단과 직접 마주하는 계층에 직접 전달하는 대신 DTO를 사용해 데이터를 교환
- DB에서 꺼낸 값을 DTO에서 임의로 조작할 필요가 없기 때문에 DTO에는 Setter를 만들 필요가 없고 생성자에서 값을 할당
Entity 와 DTO를 분리하는 이유
- Entity의 값이 변하면 Repository 클래스의 Entity Manager의 flush가 호출될 때 DB에 값이 반영