도메인 주도 설계 철저 입문
나루세 마사노부 지음 / 심효섭 옮김
위키북스
도메인 주도 설계란?
- 에릭 에반스가 자신의 책
도메인 주도 설계
에서 최초로 제안한 개념. 도메인 지식
에 초점을 맞춘 설계 기법을 말한다.
도메인?
- 도메인은
영역
이라는 뜻을 가지고 있으며 개발 영역에서는프로그램이 쓰이는 대상 분야
라는 의미로 쓰인다. -
도메인은 만드는 시스템에 따라서 포함되는 개념이 달라진다.
- 회계 시스템이라면 금전, 장부와 같은 것이 도메인이 된다.
- 물류 시스템이라면 창고, 화물, 운송수단과 같은 것이 도메인이 된다.
- 시스템은 반드시 사용자가 존재하며 시스템마다 각각 해결하고자 하는 목적이 존재하게된다. 이를 위해서는 사용자의 관점이나 생각등을 이해해야 한느데, 이는 곧 이용자의 도메인을 접해야 한다는 것을 의미한다.
- 도메인 주도 개발은 소프트 웨어가 사용될 분야(도메인)의 지식에 초점을 맞추고 개발을 하는 것이다.
도메인 모델링이란 무엇인가?
- 모델은 현실에 일어나는 사건 혹은 개념을 추상화한 개념이다. 여기서
추상화
란 여러 사물 혹은 개념에서 공통적인 것을 뽑아 파악하는 것으로, 현실의 모든것을 반영하는 것은 아니다. 상황에 따라 무엇을 보리고 취할지는 도메인에 따라서 결정된다. - 사건 혹은 개념을 추상화하는 작업을 모델링이라고 하며, 모델링의 결과를 모델이라고 한다. 도메인 주도 설계에서는 도메인 개념을 모델링한 모델을
도메인 모델
이라고 한다. - 개발자는 개발 지식은 있지만 도메인 지식은 없고, 기획자(사용자)는 도메인 지식은 있지만 개발 지식은 없다. 서로 협력해서 도메인 모델을 만들어야 하는 것이다.
지식을 코드로 나타내는 도메인 객체
- 도메인 모델은 어디까지나 개념을 추상화한 지식이다. 이를 동작하는 형태로 만든것이
도메인 객체
이다. - 도메인 객체가 도메인 모델을 충실히 반영하고 있다면 도메인의 변화를 코드로 쉽게 옮길 수 있을 것이다.
-
도메인 개념과 객체까지를 정리하면 다음 처럼 표시 할 수 있을 것이다.
도메인 개념 <-> 도메인 모델 <-> 도메인 객체
- 각각의 개념, 모델, 객체는 서로 상호 작용하며 반복적으로 개발로 실현된다.
- 도메인에 대한 어중간한 이해는 도리어 구현을 방해한다. 도메인을 완전히 이해하고, 추상화하는 방법을 학습해야 한다.
이 책에서 설명하는 패턴
이 책에서 다루는 도메인 주도 설계 패턴의 큰 그림을 그리면 다음과 같다. ( 개별 항목에 대해서는 이후 학습을 통해서 정리할 예정이다.)
-
지식을 표현하기 위한 패턴
- 값 객체
- 엔티티
- 도메인 서비스
-
애플리케이션을 구성한느 패턴
- 리포지토리
- 애플리케이션 서비스
- 팩토리
-
지식 표현을 위한 고급 패턴
- 애그리게이트
- 명세