도메인 주도 설계에 입문하는 가장 친절한 방법

도메인 주도 설계를 들어는 봤는데 정확히 뭔지 모르겠거나, 대충 개념은 훑었는데 이걸 왜 쓰는지 모르겠는가? 그렇다면 도메인 주도 설계에 입문하기 아주 적절한 책이 있다.

 

이 책은 매우 친절하다. 다소 모호할 수 있는 도메인 주도 설계의 개념을 저자의 경험과 비결을 담아 명확하게 설명한다. 충분한 사례와 코드 예제를 수록해 이해에 부족함이 없도록 했다. 또한 이론만 담는 것이 아니라 어떻게 실무에 적용할 수 있는지에 대한 저자의 조언은 이 책의 가장 큰 장점이다.

 

그러면서도 이 책은 충분하다. 첫걸음이라는 제목이 붙었지만, 책에서 다루는 내용이 절대 가볍지 않다. 도메인 주도 설계의 입문을 넘어 정복하기에 필요한 모든 개념과 충분한 깊이를 다루는 책이다.

 

“도메인 주도 설계란 무엇인가?”는 이 책의 원제목이다. 이 질문에 대한 저자의 깊은 고민을 책 곳곳에서 느낄 수 있다. 도메인 주도 설계를 처음 입문하거나, 실무에 도메인 주도 설계를 곧바로 적용해야 하는 사람들에게 매우 적절한 책이다.

 

 

도메인 주도 설계 첫걸음 표지
도메인 주도 설계 첫걸음 : 블라드 코노노프, 김민석 외 1명 - 위키북스

 

 

그래서 도메인 주도 설계란 무엇인가?

도메인 주도 설계는 비즈니스 도메인이 소프트웨어 설계 의사결정을 주도하는 것이다. 도메인 주도 설계는 단순히 이전에 있었던 기술적 패러다임이 아니다. 관점의 패러다임이다. 도메인 주도 설계는 우리가 시스템을 바라보는 기술적 관점에 사용자가 시스템을 바라보는 비즈니스 관점을 시스템에 도입한다. 도메인 주도 설계는 도메인 지식을 코드 베이스에 반영하고 비즈니스 관점으로 시스템의 경계를 나누는 것이다.

 

도메인 주도 설계가 필요한 이유는 기술적 관점만 가지고 있을 때 발생하는 ‘왜곡’ 때문이다. 기존에는 비즈니스 도메인 지식을 기술자들이 기술적인 관점으로 ‘번역’하여 시스템에 반영한다. 이 과정에서 많은 ‘왜곡’이 발생한다. 이러한 왜곡은 우리 업계의 고질적인 문제 2가지를 야기한다.

 

첫 문제는 기껏 개발한 시스템이 사용자의 어떠한 문제도 해결하지 못하는 것이다. 사용자가 가지고 있는 ‘진짜’ 문제가 아니라 왜곡된 문제를 풀었기 때문에 발생하는 것이다. 두 번째는 변화에 대응하기 어렵다는 것이다. 명확한 경계 없이 코드 베이스에 뒤섞인 비즈니스 로직은 도메인에 변화가 생겼을 때 대응하기 어렵게 만든다.

 

도메인 주도 설계의 유비쿼터스 언어는 메인 지식이 왜곡 없이 단순하게 코드 베이스로 흐를 수 있도록 한다. 그리고 바운디드 컨텍스트, 하위 도메인, 애그리게이트와 같은 경계 개념은 도메인 지식이 코드 베이스의 어디에 반영될지를 명확하게 해준다. 이러한 기법을 통해 도메인 주도 설계는 도메인 지식이 왜곡 없이 시스템으로 명확하게 흐른다.

 

 

한계

모든 책에는 한계가 존재한다. 그러나 도메인 주도 설계의 입문이라는 관점에서 본다면 이 책은 한계가 뚜렷하지 않다. 번역도 이 정도면 훌륭한 수준이다. 하나 아쉬운 점이 있다면 구성이다. 마지막에 부록으로 넣은 도메인 주도 설계: 사례연구 파트가 부록으로 남기엔 너무 좋았다. 오히려 이 내용을 앞에 넣었으면 좀 더 도메인 주도 설계를 이해하기 쉽지 않았을까? 생각이 들었다.