도메인 주도 설계 첫걸음-Part1
01_ 비즈니스 도메인 분석하기
비즈니스 도메인이란?
- 기업의 주요 활동 영역을 의미한다.
하위 도메인이란?
- 비즈니스 활통의 세분화된 영역이다.
하위 도메인 유형
1) 핵심 하위 도메인 : 타 회사와의 경쟁력 우위의 원천이며 복잡성이 높은 도메인으로 수익에 영향을 크게 주는 영역
2) 일반 하위 도메인 : 경쟁력 X, 모든 회사가 비슷한 방식으로 제공하며 외부 솔루션을 도입할 수 있는 영역
3) 지원 하위 도메인 : 우리 회사만의 기술이나 경쟁력 X, 핵심 하위 도메인보다 복잡하지 않고 간단한 영역
하위 도메인 비교
하위 도메인 경계 식별
유스케이스를 정의한 뒤 도메인 분석을 직접 수행해야 된다.
도메인 전문가는 어떤 사람인가?
- 구현할 비즈니스의 모든 복잡성을 알고 있는 주제 전문가.
02_ 도메인 지식 찾아내기
비즈니스 문제
- 비즈니스 도메인의 컨텍스트에서 문제의 의미는 광범위하다. (프로세스 최적화, 수작업 최소화, 자원 관리, 의사결정 지원, 데이터 관리 등)
도메인 지식 찾아내기
- 도메인 전문가와 소프트웨어 엔지니어 간의 의사소통을 통해 지식 공유로 도메인 지식을 쌓아야 된다.
커뮤니케이션
- 문서를 통한 커뮤니케이션을 변환 과정을 통해 정보를 잃을 수도 있고 최신 정보를 담아내지 못하기도 한다. 이 문제의 해결책은 유비쿼터스 언어이다.
유비쿼터스 언어란 무엇인가?
- 모든 관계자들이 소통하고 이해할 수 있는 같은 언어를 의미한다.
비즈니스 언어
- 유비쿼터스 언어가 비즈니스 언어이다. 유비쿼터스 언어는 도메인 전문가의 이해와 비즈니스 도메인에 대한 멘탈 모델을 쉽게 이해할 수 있도록 표현하는 것이 주요 목적이다.
비즈니스 도메인 모델
- 효과적인 모델링을 위해선 딱 필요한 정보만 모델이 포함시켜야 된다. 비즈니스 도메인 모델링은 지속적으로 도메인 전문가와 소통하고 질문하여 문제를 도출하고 팍 필요한 정보만 포함시키며 검증하는 걸 의미한다.
03_ 도메인 복잡성 관리
일관성 없는 모델
- 모든 이해관계자 간의 의사소통에 사용하는 유비쿼터스 언어를 정의하는 것은 매우 중요하고 해당 언어는 명확하고 일관성이 있어야 한다.
동의어로 하위 도메인별 의미가 다른 용어에 대한 문제를 해결하기 위해선 1) 모든 종류의 문제에 사용할 수 있는 모델 설계, 2) 용어 앞에 접두사로 해당 언어의 영역 정의 2가지 방법이 있지만 두가지 모두 문제점이 존재한다.
모델을 언제 사용해야 될지, 대화에 접두사를 두고선 소통하는 어려움이 있다. 이 문제를 해결하기 위한 방법이 바운디드 컨텍스트이다.
바운디드 컨텍스트란 무엇인가?
- 유비쿼터스 언어를 여러개로 나눈 다음 명시적인 바운디드 컨텍스트를 정의해야 된다. 즉 바운디드 컨텍스트를 통해 유비쿼터스 언어의 정의를 완성할 수 있다.
모델 : 복잡한 시스템을 이해하는데 도움을 주는 구조화된 것
우리가 해결하려는 문제는 모델 본연의 목적을 의미하며 바운디드 컨텍스트 내에서의 유비쿼터스 언어는 일관성이 있고 다른 바운디드 컨텍스트와는 관련성이 없다.
바운디드 컨텍스트 대 하위 도메인
- 바운디드 컨텍스트 크기는 작으면 통합해야되는 오버헤드가 발생할 수도 있고 너무 크면 일관성을 유지하기 어렵다. 그러므로 적절한 크기를 유지하기 위해 노력해야 된다.
경계
- 각각의 바운디드 컨텍스트는 독립적이고 한팀만 소유해야 된다. 그래야 업무를 협의하고 R&R을 정의하기 수월하다.
실생활의 바운디드 컨텍스트
- 시매틱 도메인(토마토), 과학, 냉장고 구입
04_ 바운디드 컨텍스트 연동
협력형 패턴 그룹
- 소통이 잘되는 팀으로 긴밀한 팀간의 패턴은 파트너십 패턴, 공유커널 패턴이 있다.
파트너십 패턴 : 양팀의 차이점을 함께 해결하고 적절한 솔류션을 선정하기.
공유커널 패턴 : 교집합, 모든 바운디드 컨텍스트에 걸쳐서 일관성을 유지해야 된다.
사용자-제공자 패턴 그룹
제공자 : Upstream, 사용자 : Downstream
순응주의자 패턴 : 제공하는 솔루션 그대로 사용하는 패턴이다. (제공해주는대로 받아서 사용)
충돌 방지 계층 패턴 : 사용자가 제공자의 방식을 순응하지 않고 사용자 입장에 맞춰 제공자의 모델을 필요에 맞게 가공해서 사용하는 패턴이다.
오픈 호스트 서비스 패턴 : 사용자가 힘이 쎄 제공자에서 사용자 입맛에 맞게 커스텀해서 제공하는 패턴이다.
분리형 노선
커뮤니케이션 이슈 또는 정치적 이슈로 협업이 불가능한 경우 각자의 길을 가는 패턴이다.
컨텍스트 맵
바운디드 컨텍스트 간의 연동 패턴을 시각적으로 표현한 것을 의미한다.
초기에 컨텍스트 맵을 정의한 뒤 유지보수하면 업무를 진행하고 정책을 정의하는데 수월하나 바운디드 컨텍스트의 하위 도메인이 여러개가 존재할 수 있고 각각의 하위 도메인 간의 패턴이 다를 수 있음으로 컨텍스트 맵을 작성하고 유지하는데엔 어려움이 많다.
[참고도서]