Whiteship's Note


DAO vs Repository

JEDI/DDD : 2007.12.04 23:21


http://aeternum.egloos.com/1160846 이 글을 참조하세요. 아래 내용은 권해드리지 않는 내용입니다.

나도 DDD 하고싶어 모델링 적용기
Repository Pattern vs. Transparent Persistence

위 두 개의 글의 공통점은 DAO와 Repository의 차이에 대한 고민입니다. 저도 잘 모릅니다. 저는 사실 찬욱군이 쓴 글에 있는 링크를 따라가보지도 않았으며, 얇은 DDD책(DDD Quickly)도 다 읽지 못 했고, 그나마 읽었던 부분들도 잊혀져가고 있습니다.(다시 읽으려고 마음먹었습니다.)

그래도.. 나름대로 생각해 봤습니다. 어차피 작명의 문제이고 누군가 어떤 의도를 가지고 작명을 했을테니 그 뜻은 분명 단어 속에 숨어있겠죠.

DAO는 Data Access Object의 약자로 데이터(베이스)에 접근하는 객체를 나타냅니다. DB 접근하는 일을 분리해 냈습니다. SRP 객체지향 원칙의 사례로 등장했었던 적이 있었는데 어떤 글인지는 모르겠습니다.

Repository는 저장소입니다. 어떤 객체들을 저장하는 장소를 뜻할 것이며, 아마도 DB 자체를 또는 Table 자체 또는 '영속성이 보장되는 저장소'를 객체화한 표현이 아닐까 생각해봅니다. 이것이 필요한 객체는 바로 도메인 객체겠죠.

이정도 정보를 가지고 이 둘의 차이를 살펴보기엔 정말 막연합니다. 그래서 Finder라는 녀석까지 같이 보겠습니다. Finder는 findByXXX 류의 메소드들을 가진 클레스로 이 녀석 역시 DB나 영속성을 보장하는 어떠한 저장소에 접근을 합니다.

기존의 DAO에는 Finder가 하는 일까지 같이 포함하고 있었습니다. 그리고 DDD를 구현한(건지.. 구현 하도록 돕는 건지.. Anyway) ROO 라는 프레임워크에서는 Repository와 Finder로 분리해 두었습니다. 조금 더 세밀하게 SRP를 적용했다고 볼 수 있습니다.

따라서 저는 이렇게 결론을 냈습니다.

사용자 삽입 이미지

그럼 DAO와 Finder를 동시에 두면 어떻게 되는걸까? 라는 생각을 해볼 수 있는데요. DAO는 위에서도 언급했다시피, 데이터에 접근하는 객체입니다. Finder는 무언가를 찾아주는 녀석이죠. 그럼 무언가를 찾아주는 녀석이 매번 데이터에 접근해서 찾아야 하는데 결국 Finder도 DAO라고 볼 수 있지 않을까요? 그럴 때는 가능하다면, 기존의 DAO 이름을 Repository로 변경하는 것이... 좋을 것 같다는 생각을 해봅니다.

'JEDI > DDD' 카테고리의 다른 글

[DDD] DDD 입문에 좋은 글  (4) 2009.06.11
파트 3: Refactoring Toward Deeper Insight  (0) 2008.10.24
Factories  (0) 2007.12.25
Aggregates  (0) 2007.12.18
Modules  (2) 2007.12.14
Services  (2) 2007.12.13
DAO vs Repository  (4) 2007.12.04
DTO(Data Transfer Object)  (2) 2007.11.21
DDD: putting the model to work  (4) 2007.11.20
Building Domain Knowledge  (0) 2007.01.03
What Is Domain-Driven Design  (2) 2007.01.02
top

  1. Favicon of http://toby.epril.com BlogIcon 토비 2007.12.05 05:36 PERM. MOD/DEL REPLY

    음.. 이건 아닌데..
    조만간 글 한번 쓸께.

    Favicon of http://whiteship.tistory.com BlogIcon 기선 2007.12.05 07:42 PERM MOD/DEL

    네. 다행이네요. (모르고 쓴거라 당연히 틀려야 했는데, 다행입니다.) 어쩐지 쓰고나서 불안하더라니..ㅋ;;

  2. Favicon of http://truthiness.pe.kr BlogIcon ongs 2007.12.05 11:37 PERM. MOD/DEL REPLY

    흠 그렇군요..ㅎ

    Favicon of http://whiteship.tistory.com BlogIcon 기선 2007.12.05 14:42 PERM MOD/DEL

    이건 착각에 가까운 개인적인 생각이구요.
    토비님께서 잘 설명해 주실듯~

Write a comment.


http://mvnrepository.com/

Build/Maven : 2007.12.02 11:20


이 사이트는 Maven으로 종속성을 관리할 때 필수 사이트 인 것 같습니다. 외울 수가 없어서 블로그에 게시해둡니다. 사용하는 방법은 박재성님의 블로그의 "Maven을 이용하여 Dependency 라이브러리 관리 방법"에 잘 설명되어 있습니다. 진작에 박재성님 블로그를 보면서 공부하면 좀 더 빨랐을 것을 한글로 된 문서가 없는 줄 알고 영어로 공부하느라 고생했네요. ㅜ.ㅜ

Anyway, Maven을 사용하다보면, 종속성을 추가해야하는데, Jar 파일 다운 받아서 추가하는 것보다는 훨씬 간단하고 하나의 Jar 파일을 여러 프로젝트에서 복사해서 가지고 있지 않아도 되기 때문에, workspace의 용량이 기하급수적으로 늘어나는 것을 방지할 수도 있습니다.

종속성을 추가하기 위해서는

        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.4</version>
        </dependency>

이런 식으로 Maven Repository에 등록되어 있는 프로젝트의 groupId, artifactId, version을 알아야 합니다. 그런데 위의 사이트에 바로 이러한 정보들을 알 수 있습니다. 매우 친절하게 <dependencies> 엘리먼트 안에 어떠한 엘리먼트 묶음(위에 보이는 것과 같은)을 붙여 넣으면 되는지 보여줍니다. 귿이죠.

Eclipse에 Maven 플러그인을 설치해서 add Dependecy 메뉴를 사용하면 검색이 되긴 하지만, 제 경우에 Spring 2.5는 검색이 되질 않았습니다. 따라서 위 사이트에서 찾아서 등록해주었습니다. 하지만 한 번 Local Repository에 다운 받은 다음에 Maven 플러그인의 add Dependecy 메뉴를 사용해보니, Spring 2.5가 검색 되었습니다. 아마도.. Local Repository에서만 검색해주는 기능인가 봅니다.

'Build > Maven' 카테고리의 다른 글

Maven을 쓴다고 해서 종속성을 안중에서 Out 시킬 수 있느냐?  (2) 2008.03.03
Archetype 만들기  (4) 2007.12.21
Assemblies  (0) 2007.12.04
Maven 괜찮은데~  (0) 2007.12.04
Site Generation  (0) 2007.12.03
http://mvnrepository.com/  (0) 2007.12.02
Profile  (0) 2007.11.30
Archetype  (0) 2007.11.29
Plugin  (4) 2007.11.28
Build Lifecycle(site)  (0) 2007.11.27
Build Lifecycle(default 자세히)  (0) 2007.11.27
top

Write a comment.