프로젝트를 개발하면서 나는 DB Table CRUD처리를 주로 DAO보다 Repository를 선호하는데. 막상 두가지의 차이점을 말하라고하면 바로 고장날것이다.
예전에는 DAO와 Repository는 데이터를 저장하는 점에서보면 같고 명칭만 다를 뿐이라고 생각했다.
단순히 DB에 데이터를 저장한다는 관점에서 보면 맞는 말이지만 찾아보니까 또 그렇지도 않았다, 이번에는 DAO와 Repository의 특징을 보고 두 개의 방식의 차이점을 비교해볼 생각이다.
일단 DAO와 Repository는 하나의 기능으로보기 보다는 패턴으로 보는 것이 바람직할 것이다.
두 패턴이 등장한 것은 간단히 말하면 영구 저장소 API 즉 DB의 문제에서 시작한다. 현재는 보편적으로 myBatis 혹은 JPA를 사용해 DB에 접근하지만 예전에는 DB에서 제공하는 API를 사용해서 DB에 접근을 했다. 하지만 이과정에서 문제가 생겼다.
구현체와 로직의 강한 결합의 문제
계층간섭 문제
개발자의 학습 영역 증가
- 각 저장소 별로 구현방식이 모두 다르기 때문에 개발자의 학습영역이 증가한다.
이제 DAO와 Repository를 설명해야하는데 설명하기 앞서 DDD(Domain-Driven Design) 계층에 대해 설명하는 것이 좋을거 같다.
DDD 패턴은
복잡한 소프트웨어 시스템을 구축할 때 도메인에 초점을 맞춰 설계하는 방법론
이라고 명시되어 있지만 자세한 내용은 나중에 별도로 설명하겠다.
간단하게 계층별로 기능을 소개하자면 이렇다.
계층 | 설명 |
---|---|
Presentation (표현 계층) (Controller) | 사용자 요청에 대해 해석하고 응답하는 일을 책임지는 계층이다. |
Application (응용 계층) (Serice) | 비즈니스 로직을 정의하고 정상적으로 수행될 수 있도록 도메인 계층과 인프라스트럭쳐 계층을 연결해주는 역할을 하는 계층이다. |
Domain (도메인 계층) (Model) | 비즈니스 규칙, 정보에 대한 실질적인 도메인에 대한 정보를 가지고 있으며 이 모든 것을 책임지는 계층이다. |
Infra (인프라 계층) (Repository) | 외부와의 통신(DB, 메시징 시스템 등)을 담당하는 계층이다. |
이렇게 DAO와 Repository의 특징을 작성해봤지만 차이점은 아직 모르겠다 그도 그럴게 이 문제는 아직도 의견이 분분한 만큼 많은 의견이 있다, 그래도 앞으로 프로젝트를 구성할 때 조금이나마 도움이 될 거 같다.
https://velog.io/@maketheworldwise/DAO%EC%99%80-Repository%EC%9D%98-%EC%B0%A8%EC%9D%B4
https://velog.io/@mercurios0603/DAO%EC%99%80-Repository%EC%9D%98-%EC%B0%A8%EC%9D%B4