3.서브도메인과 전략적 설계
- 바운디드 컨텍스트마다 하나의 서브도메인, 각 서브도메인마다 하나의 바운디드 컨텍스트.
- 하나의 바운디드 컨텍스트 안에 다수의 서브도메인이 잇을 수도 있지만, 이 경우 최적의 모델을 구성했다고 보기는 어려움.
서브도메인은 무엇인가?
- 서브도메인은 전체 비즈니스 도메인의 하위 부분.
- 거대하고 복잡한 프로젝트에서 문제 영역을 이해할 수 있도록 전체 비즈니스 도메인을 논리적으로 쪼갠 부분.
- 명확한 전문 지식 영역별로 정의된 부분.
- 서브도메인을 개발하는 데 DDD를 사용했다면 명확한 바운디드 컨텍스트를 구현할 수 있다.
서브도메인의 유형
핵심 도메인
- 보편언어를 신중하게 만들기 위한 전략적 투자 영역.
- 주요 자원을 할당하는 명시적인 바운디드 컨텍스트.
- 잘 정의된 도메인 모델.
- 높은 우선순위.
지원 서브도메인
- 이미 존재하는 제품으로 해결할 수 없는 맞춤 제작 개발이 필요한 모델링 영역.
- 너무 큰 투자를 하지 않기 위해 아웃소싱을 고려할 수 있음.
- 지원 서브도메인 없이 핵심 도메인을 성공시킬 수는 없기 때문에 여전히 중요한 소프트웨어 모델.
일반 서브도메인
- 기존 제품 구매를 통해 바로 충족시킬 수 있는 경우.
복잡성 다루기
- 문제 영역에 대해 논의하기 위한 도구로 서브도메인을 사용.
- 제한된 경계가 없는(unbounded) 레거시 시스템은 큰 진흙 덩어리와 같음.
- 그 안에서 몇 개의 논리적(Logical) 도메인을 서브도메인으로 정의.
- 바운디드 컨텍스트와 서브도메인은 일대일(1:1) 관계로 구성. 이는 바운디드 컨텍스트를 정확하게 유지시키고 핵심 전략 목표를 집중하는 데 도움을 줌.
- 핵심 도메인 안에 존재하는 동일한 바운디드 컨텍스트 안에 다른 모델을 만들어야 하는 상황이라면, 핵심 도메인으로부터 완전히 분리된 모듈 형태로 그 모델을 별도의 영역에 정의.
요약
- 서브도메인이 무엇이고, 문제 영역과 해결 영역에서 어떻게 사용하는가?
- 핵심 도메인과 지원 서브도메인, 일반 서브도메인의 차이
- 큰 진흙 덩어리 레거시 시스템과의 통합을 고려할 때, 서브도메인을 사용할 수 있는 방법
- DDD의 바운디드 컨텍스트와 서브도메인을 일대일 관계로 맺는 것의 중요성
- 핵심 도메인과 지원 서브도메인을 2개의 서로 다른 바운디드 컨텍스트로 분리하는 것이 현실적이지 않을 때, DDD 모듈로 그것을 분리하는 방법