DAO(Data Access Object) 란?
- repository := DAO (거의 비슷함)
- 김영한님 설명
- 이 둘은 거의 같다고 생각하셔도 무방합니다. 좀 더 깊이있게 차이를 설명하자면, repository는 엔티티 객체를 보관하고 관리하는 저장소이고, DAO는 데이터에 접근하도록 DB접근 관련 로직을 모아둔 객체 입니다. 둘 다 개념 차이일뿐 실제로 개발할 때는 비슷하게 사용합니다.
- 실제로 DB에 접근하는 객체이다.
- Persistence Layer(DB에 data를 CRUD하는 계층)이다.
- Service와 DB를 연결하는 고리의 역할을 한다.
- SQL를 사용(개발자가 직접 코딩)하여 DB에 접근한 후 적절한 CRUD API를 제공한다.
- JPA 대부분의 기본적인 CRUD method를 제공하고 있다.
- extends JpaRepository<User, Long>
- 예시(JPA 사용 시)
public interface QuestionRepository extends CrudRepository<Question, Long> { }
DTO(Data Transfer Object) 란?
- 계층간 데이터 교환을 위한 객체(Java Beans)이다.
- DB에서 데이터를 얻어 Service나 Controller 등으로 보낼 때 사용하는 객체를 말함.
- 즉, DB의 데이터가 Presentation Logic Tier로 넘어오게 될 때는 DTO의 모습으로 바뀌어서 오고가는 것.
- DTO는 목적 자체가 로직을 갖고 있지 않고 단순히 데이터를 전달하는 것이기 때문에 순수한 데이터 객체이며, getter/setter 메서드만을 갖는다.
@Getter @Setter class TestDTO { private String id; private String name; private String nickname; }
VO(Value Object) 란?
- Read-Only 특징을 가진다.
- VO의 핵심 역할은 equals()와 hashcode()를 오버라이딩 하는 것이다.
- equals, hashCode Method를 구현하여 특정 중요한 Data를 전달할 때는 VO를 생성하여 이를 동일한 객체 비교까지 필요한 Logic내에서 주로 사용
Entity class 란?
- domain package
- 실제 DB의 테이블과 매칭될 클래스
- 즉, 테이블과 링크될 클래스임을 나타낸다.
- Entity 클래스 또는 가장 Core한 클래스라고 부른다.
- @Entity, @Column, @Id 등을 이용
- Entity는 비즈니스 로직이 있고, 실제 데이터도 변경되기 때문에, Setter를 최대한 사용하지 않는 편이 좋다.
- 최대한 외부에서 Entity 클래스의 getter method를 사용하지 않도록 해당 클래스 안에서 필요한 로직 method을 구현한다.
'Engineering WIKI > Docs' 카테고리의 다른 글
로그스태시 개념 뿌수기 (153) | 2023.10.19 |
---|---|
Reverse Proxy, Forward Proxy 개념 뿌수기! (1) | 2023.08.19 |
CIDR / 사이더 개념 뿌수기! (2) | 2023.08.18 |
@Retention 어노테이션 개념 뿌수기 (RetentionPolicy SOURCE vs CLASS vs RUNTIME) (0) | 2023.08.17 |
Gradle 개념 (0) | 2023.05.29 |
SOLID 5가지 설계 원칙 (0) | 2023.05.27 |
퍼사드 패턴 (Facade Pattern) 개념 및 코드 예제 (0) | 2022.12.30 |
Redis 뿌수기! (0) | 2022.12.30 |