Outsider's Dev Story

Stay Hungry. Stay Foolish. Don't Be Satisfied.
RetroTech 팟캐스트 44BITS 팟캐스트

[Book] 도메인 주도 설계란 무엇인가?

도메인 주도 설계란 무엇인가?

도메인 주도 설계란 무엇인가? - 6점
에이벨 아브람 & 플로이드 마리네스쿠 지음
최수경 옮김
인사이트

도메인 주도 설계(DDD)가 최근에 얘기도 종종 듣고 있고 좋은 설계를 위해서 알아두어야 할 필요가 있다고 생각해서 이 책을 보았습니다. DDD를 만든 에릭 에반스의 도메인 주도 설계도 번역서가 출간되었지만 에릭 에반스의 도메인 주도 설계는 600페이지나 되는 분량이었으므로 미리 개념을 잡는다는 느낌으로 150쪽 정도라서 가볍게 볼 수 있는 이 책을 먼저 보았습니다.

제가 DDD에 대해서 처음 들은 것은 2010년 KSUG 세미나에서 DDD 전문가이신 Eternity님의 Rich Domain Model 발표를 들으면서 였습니다. 당시 이 발표는 기억에 남는 좋은 발표 중 하나였는데 비슷한 기대를 가지고 이 책을 보았지만 제 기대와는 약간 달랐습니다. 다시 말하자면 DDD를 하려면 기존의 테이블을 그대로 매핑한 엔티티를 getter/setter만 가지고 만들고 그 위에 레파지토리나 DAO를 만들고 서비스를 만들어서 서비스계층이 뚱뚱해지는 방식과 비교되는 도메인 모델이 더 풍부해지는 설계방식에 대한 설명을 기대한 것입니다. 더불어 도메인이라는 단어가 영어이기도 하고 약간 범용적인 단어이기 때문에 저로써는 아직도 그 의미나 영역이 확 와닿지는 않기 때문에 도메인이라는 용어의 개념을 좀 더 정확히 잡고 싶다는 생각이 있었습니다.

결론부터 얘기하면 두 가지 다 해결되지 않았습니다. 결국 에릭 에반스의 도메인 주도 설계까지는 봐야 이해가 되려나 하는 생각을 가지게 되었습니다. 물론 저로써도 이게 책이 부족해서인지(150페이지가 DDD를 설명하기에는 충분치 않은 분량이긴 하지만) 제가 이쪽에 관련 지식이 부족해서인지는 정확치 않습니다. 이 책의 초반에도 저자는 이 책이 에릭 에반스의 책을 읽기 전에 기초를 잡기위한 정도로 쓰여졌음을 밝히고 있습니다.

이 책은 DDD에 대한 좀 추상적인 레벨에서 설명을 하고 있습니다. 앞에서 말한 것처럼 기존에 일반적으로 하는 설계방식과 DDD는 이렇게 다르다라는 식으로 설명하기 보다는 프로젝트에 투입되었을 때 어떻게 요구사항을 분석해야 하는가, 업무관련자한테 어떻게 도메인을 찾아내는가 부터 시작해서 모델을을 중심으로 설계를 해야 한다고 설명하고 있습니다. 이렇게 정의한 모델을 유비쿼터스 언어로 서로 공유하고 이를 코드로 구현하면서 개발자와 계속되는 피드백을 나눕니다. 그러면서 엔티티와 값 객체는 어떻게 다른지 도메인에 속한 기능은 도메인에서 구현하지만 어떤 도메인에도 속하지 않는 기능은 어떻게 구현해야 하는지를 설명합니다. 즉 서비스 레이어는 어떤 도메인에 속하지 않는 개념을 나타내고(도메인의 기능을 대신하는 것이 아니라) 상태를 속하지 않는 등의 특징을 갖습니다. 그리고 모듈화와 집합이 어떤 개념인지 레파지토리와 팩토리를 어떻게 다르게 사용하는 지를 설명합니다.

그 외 DDD와 관련된 여러가지 이야기를 하고 있는데 이렇게 얘기하면 앞에서 제가 얘기했던 DDD에 대한 개념을 잘 설명한 것처럼 느껴지기도 하지만 책을 읽을 때는 말은 이해가는데 짧게 설명해서인지 추상적인 개념레벨로 설명해서인지 머릿속에서 잘 정리가 되지 않았습니다. 이해는 하겠는데 한편으로는 약간 뻔한 얘기처럼 느껴져서 어떻게 사용해야 할지 좀 막막한 것도 같은 그런 느낌이었습니다.(이게 DDD는 특정 기술보다는 설계방식이므로 당연히 책한권 보고 개념을 확 잡기에는 무리가 있다는 점도 한 몫할 것입니다.) 저자의 의도처럼  이 책으로 DDD를 이해한다기 보다는 에릭 에반스의 책을 보기 전에 간단한 개념정도를 잡는다는 정도로 접근하면 괜찮을 것 같습니다.
2012/03/13 02:37 2012/03/13 02:37