일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |
- 스택
- 모던자바스크립트
- BAEKJOON
- 자료구조
- SSAFY
- 프로그래머스
- 파이썬
- pyhton
- Python
- 큐
- 신한투자증권
- JavaScript
- 일임형
- 혁신금융서비스
- 자문형
- frontend
- Algorithm
- dfs
- JS
- algorithms
- 알고리즘
- BFS
- 자바스크립트
- RPA
- programmers
- 로보어드바이저
- 백준
- algoritms
- React #Web #프런트엔드
- Ai
- Today
- Total
Step by Step
240503(DAO, DTO) 본문
DAO ( Data Access Object )
- 데이터 액세스 객체
- DB에서 데이터를 가져오거나 DB에 데이터를 저장하는 등의 작업을 수행하는 객체
- 비즈니스 계층과 DB 간의 인터페이스 역할
DTO ( Data Transfer Object )
- 데이터 전송 객체
- 데이터를 효율적으로 전송하기 위한 객체
- 일반적으로 DB에서 가져온 데이터를 다른 계층에서 사용하기 적합한 형식으로 변환하여 전송하는데 사용
- DTO 속성은 getter / setter 메서드로 구성
- 데이터 전송에만 사용
Repository
- 데이터베이스에 접근하기 위한 객체
- Spring Data JPA를 기준으로 예시를 작성
VO ( Value Object )
- 값 객체
- 데이터의 불변성을 보장하고 상태를 가지지 않음
- 보통 DB의 한 행 또는 여러 행을 나타내는데 사용
- DTO와 유사하지만 DTO는 데이터 전송을 위해 사용, VO는 데이터의 불변성을 유지하기 위해 사용
- VO는 불변으로 getter 메서드만 포함 (Read-Only)
요약해보자면 DB 에 접근할 때는 DAO를 사용하고, 데이터를 전송할 땐 DTO를 사용하고, VO는 데이터의 불변성을 보장해야할 때 사용하면 된다.
DAO 과 Repository의 차이(?)
처음에는 DAO와 Repository가 같은 역할을 하는 것처럼 보였다.
하지만 DAO와 Repository는 명백한 차이점이 있는 다른 요소이다.
DAO와 Repository가 DAL(Data Access Layer, DB 관련 정보를 처리하는)의 구현체인 것은 같지만
제공/관리(매핑)하는 주체의 차이에 따라서 달라진다.
자세하게 설명하자면,
위 예제에서 볼 수 있듯이 Repository는 자바 객체를 테이블에 매핑 할 수 있고 이는 매핑 레벨이 객체 수준임을 알 수 있다. 하지만 DAO는 SQL에 대한 매핑이기 때문에 매핑 레벨이 SQL 수준이다.
이런 차이는 두 개념이 추상화하는 대상이 다름을 의미한다.
DAO는 SQL 수준의 매핑을 지원하기 때문에 퍼시스턴스 레이어(영속성, 일반 데이터와 다르게 계속 유지되는 데이터)에 속하여 퍼시스턴스 레이어에 대한 추상화이지만 Repository는 도메인 레이어에 객체 컬렉션의 추상화이다.
결과적으로 보면 DAO와 Repository 모두 퍼시스턴스(데이터 처리) 로직을 위해 동작하지만, 따로 놓고보면 명백한 차이점이 있다.
추가) DAO가 SQL 수준의 매핑을 지원하기 때문에 객체 수준으로 매핑하는 Repository에서는 이 DAO를 여러개 선언해서 사용한다.
(예. 값을 select 해오는 여러 DAO의 데이터를 합쳐 리스트를 조회하는 것을 Repository에서 구현하는 것)
'Spring' 카테고리의 다른 글
240516 (0) | 2024.05.17 |
---|---|
240513(@JsonNaming, @JsonProperty) (0) | 2024.05.13 |
Log의 종류 & 리팩토링(?) (0) | 2024.05.09 |
의존성 주입 및 Rest API (0) | 2024.05.02 |
Aunotation 키워드 (0) | 2024.04.30 |