Anything

DAO와 Repository의 차이

씬프 2021. 7. 9. 12:34
반응형

스프링 부트 프로젝트를 진행하면서,

Database와 같은 영구 저장소에 대해 참조할 때, DAO라는 표현과 Repository라는 표현이 혼용되거나 혹은 다른 개념으로 설명하는 경우가 있어 정리하고자 한다.

 

DAO

DAO는 Data Access Object로 실제 영구저장소에 접근하는 객체다.

문제점 3가지

1) 구현체와 로직이 너무 강한 결합 (MySQL -> Oracle DB 변경하려면....? 수정되는 로직..)

2) 서비스 레이어와 도메인, 인프라 레이어가 결합됨.

3) 개발자 러닝커브 증가

 

이를 해결하기 위해 DAO 패턴 사용 (어댑터 패턴), DTO를 사용.

 

도메인에 정의된 Table. DAO로 DB에 접근, 결과 값을 DTO에 담아 리턴한다?

 

Repository

Repository는 객체 상태를 관리하는 저장소로 볼 수 있다. Entity 그 자체를 저장하고 불러온다.

DDD (Domain Driven Design)에서 생긴 개념이다.

 

DAO vs Repository

어떤 글에는 DAO와 Repository가 이제는 같은 것으로 보는 경우도 있고,

DAO를 더 큰 개념으로 보는 경우도 있다.

 

DAO는 영속성 객체임을 보이면서, 인프라 레이어에 속한 것을 보인다.

그리고 도메인 레이어가 인프라 레이어에 의존한다.

Entity를 바로 컨트롤하는 것이 아니라 DTO(VO)를 사용해 데이터를 주고 받아야 한다.

 

Repository는 영속성 객체임을 숨겨 인프라 레이어에 속한 것은 숨긴다.

(도메인 레이어에 속한 것으로 보여짐)

그리고 의존성이 역전되어 있다. (Entity를 그대로 가져와 영속성 로직 수행 가능)