도메인 주도 설계 첫걸음 - 03장 도메인 복잡성 관리
범위
- [Part 1] 전략적 설계 - 03장: 도메인 복잡성 관리
개념 정리
- 바운디드 컨텍스트(bounded context): 제한된 문맥, 경제지어진 문맥, 모델의 경계, 유비쿼터스 언어의 범위
- 시맨틱 도메인: 주어진 컨텍스트 내에서 의미 집합을 공유하는 특정 장소 또는 그 의미를 유지하는 언어
책에서 기억하고 싶은 내용
일관성 없는 모델
- 같은 비즈니스 도메인에서도 도메인 전문가마다 서로 다른 모델을 사용할 수 있다.
바운디드 컨텍스트란 무엇인가?
- 같은 비즈니스 도메인에서 도메인 전문가마다 서로 다른 모델을 사용할 경우 유비쿼터스 언어를 여러 개의 작은 언어로 나눈 다음 각 언어를 적용할 수 있는 명시적인 바운디스 컨텍스트(bounded context)에 할당하면 된다.
모델 경계
- 모델은 복잡한 시스템을 이해하는 데 도움을 주기 위해 구조화한 것이다.
- 모델의 경계(바운디드 컨텍스트)를 정의하는 것은 모델링 프로세스의 본질적인 부분이다.
- 바운디드 컨텍스트는 유비쿼터스 언어의 일관성이 유지되는 경계다. 유비쿼터스 언어의 용어, 원칙, 비즈니스 규칙은 해당 바운디드 컨텍스트 내에서만 일관성이 있다.
정제된 유비쿼터스 언어
- 유비쿼터스 언어는 바운디드 컨텍스트 경계 안에서만 보편적으로 적용된다.
- 유비쿼터스 언어는 바운디드 컨텍스트에 포함된 모델을 설명하는 데만 집중한다.
- 유비쿼터스 언어는 명시적으로 적용 가능한 컨텍스트 없이 정의하거나 사용할 수 없다.
바운디드 컨텍스트의 범위
- 유비쿼터스 언어의 범위(바운디드 컨텍스트)를 정의하는 것은 전략적인 설계 의사결정이다.
- 유비쿼터스 언어의 경계가 넓을수록 일관성을 유지하기가 더 어렵다.
- 바운디드 컨텍스트를 더 작게 만들수록 설계를 통합하는 오버헤드가 커진다.
바운디드 컨텍스트 대 하위 도메인
하위 도메인
- 하위 도메인은 상호 관련된 유스케이스 집합과 유사하다.
- 유스케이스는 비즈니스 도메인과 시스템 요구사항에 따라 정의된다.
바운디드 컨텍스트
- 바운디드 컨텍스트는 소프트웨어 엔지니어에 의해 설계된다.
- 모델의 경계를 선택하는 것은 전략적 의사결정 과정이다.
하위 도메인과 바운디드 컨텍스트 사이의 상호작용
- 하위 도메인은 비즈니스 전략에 의해 정의된다.
- 소프트웨어 엔지니어는 특정 프로젝트의 컨텍스트와 제약 조건을 해결하기 위해 소프트웨어 솔루션과 바운디드 컨텍스트를 설계할 수 있다.
경계
물리적 경계
- 바운디드 컨텍스트는 모델 경계뿐만 아니라 이를 구현하는 시스템의 물리적 경계 역할도 한다.
- 각 바운디드 컨텍스트는 개별 서비스/프로젝트로 구현돼야 한다. 즉, 구현, 진화, 버전 관리를 각각 다른 바운디드 컨텍스트와 독립적으로 해야 한다.
- 바운디드 컨텍스트는 여러 하위 도메인을 포함할 수 있다. 이러한 경우 바운디드 컨텍스트는 물리적 경계고 하위 도메인은 논리적 경계다.
소유권 경계
- 팀과 바운디드 컨텍스트 간의 관계는 단방향이다.
- 바운디드 컨텍스트는 한 팀만 소유해야 한다.
- 단일 팀에이 여러 개의 바운디드 컨텍스트를 소유할 수도 있다.
실생활의 바운디드 컨텍스트
시맨틱 도메인
- 시맨틱 도메인(semantic domain)은 의미 영역과 해당 의미를 전달하기 위해 사용하는 단어 영역으로 구분한다.
과학
냉장고 구입
- 모델은 당면한 작업과 관련 없는 정보는 생략해야 한다.
- 여러 개의 훨씬 단순한 모델이 각 문제를 효과적으로 해결할 수 있다면 복잡한 만능 모델을 설계할 필요가 없다.
결론
- 유비쿼터스 언어는 바운디드 컨텍스트의 범위 내에서 일관성이 있어야 한다.
- 서로 다른 바운디드 컨텍스트에서는 동일한 용어라도 다른 의미를 가질 수 있다.
- 하위 도메인이 발견되면 바운디드 컨텍스트도 설계한다.
- 바운디드 컨텍스트는 시스템을 서비스, 하위 시스템 등의 물리적 구성요소로 분해한다.
요약
- 3장에서는 비즈니스 도메인의 복잡성을 해결하고 시스템의 고수준 아키텍쳐 구성요소인 바운디드 컨텍스트를 설계하는 방법을 논의한다.
- 같은 비즈니스 도메인에서 도메인 전문가마다 서로 다른 모델을 사용할 경우 유비쿼터스 언어를 여러 개의 작은 언어로 나눈 다음 각 언어를 적용할 수 있는 명시적인 바운디스 컨텍스트(bounded context)에 할당한다.
- 바운디드 컨텍스트는 유비쿼터스 언어의 일관성이 유지되는 경계다. 유비쿼터스 언어의 용어, 원칙, 비즈니스 규칙은 해당 바운디드 컨텍스트 내에서만 일관성이 있다.
- 바운디드 컨텍스트는 소프트웨어 엔지니어에 의해 설계된다.
This post is licensed under CC BY 4.0 by the author.