[architecture Series Ddd] 04.02.boundedcontext
February 21, 2025
바운디드 컨텍스트
- 대규모 소프트웨어 시스템의 복잡성을 관리하는 데 도움이 되는 중요한 개념이다.
- 전체 시스템 내에서 명확한 경계를 정의하여 시스템의 여러 부분이 자율적으로 발전할 수 있도록 보장할 수 있다.
바운디드 컨텍스트란?
- 특정 도메인 모델이 정의되고 작동하는 의미론적 경계로 정의할 수 있다.
- 용어, 개념 및 모델이 특정 컨텍스트와 의미를 갖는 더 큰 도메인 내에서 논리적 분리를 나타낸다.
- 각 바운디드 컨텍스트는 시스템의 다른 부분과 분리하기 위해서 비즈니스의 고유한 영역을 캡슐화
특징
- 유비쿼터스 언어
- 컨텍스트에는 도메인 전문가, 개발자 및 기타 이해관계자 간의 커뮤니케이션을 위한 공유 어휘를 제공하는 고유한 유비쿼터스 언어가 있다.
- 도메인 모델의 의미와 의도를 상황에 맞는 방식으로 표현하는 데 도움이 된다.
- 명시적 컨텍스트 경계
- 경계가 있는 컨텍스트는 기술적으로나 개발 및 유지 관리를 담당하는 팀 또는 부서 관점에서 명시적으로 정의
- 특정 비즈니스 목표에 집중할 수 있도록 하는 가이드 역할을 한다.
- 애그리거트 및 엔티티
- 도메인 객체는 애그리거트와 엔티티로 구성
- 애그리거트는 관련 엔티티를 구룹화하는 일관성 경계, 주어진 트랜잭션 경계 내에서 데이터 무결성이 유지되도록 보장
- 엔티티는 도메인 내의 갭라 객체를 나타내며 그 동작을 캡슐화
- 컨텍스트 일관성
- 특정 용어나 모델이 동일한 시슽메 내의 다른 컨텍스트와 다르더라도 그 자체 내에서 개념적으로 일관성이 있어야 한다.
- 컨텍스트 내의 도메인 전문가와 개발자는 비즈니스 요구 사항을 더 잘 추론하고 그에 따라 코드 베이스를 설계할 수 있다.
- 컨텍스트 매핑
- 종종 서로 통신하고 통합해야 하므로 컨텍스트 매핑 기술이 필요
- 서로 다른 바운디드 컨텍스트 간에 명확한 커뮤니케이션 경로와 경계를 설정하여 한 컨텍스트의 변경사항이 다른 컨텍스트에 의해 사이드 이펙트가 없는 것을 목표로 한다.
- 자율적 개발
- 명확한 경계와 잘 정의된 컨텍스트가 있으면 팀은 각 바운디드 컨텍스트를 자율적으로 개발하고 발전시킬 수 있다.
중요성
- 관심사 분리
- 협업 및 커뮤니케이션
- 확장성 및 민첩성
- 진화 가능성 및 복원력
어떻게 식별하는가
- 비즈니스 프로세스를 분석해서 응집성이 높고 결합력이 낮은 영역을 식별
- 도메인 주도 설계 기법을 사용해서 도메인 모델링
- 도메인 전문가 및 이해관계자와의 협업
- 시스템의 기존 경계를 관찰
영향
- 모듈화 및 컴포넌트화
- 명확한 인터페이스 및 API 설계
- 이벤트 중심 아키텍쳐
- 데이터베이스 및 데이터 스토리지 고려 사항 : 데이터 격리를 보장하고 컨텍스트 특정 요구 사항을 지원하기 위해 자체 전용 DB 혹은 스키마를 가질 수도 있다.
- 보안 및 액세스 제어
발전을 하면?
- 경계의 세분화:
- 바운디드 컨텍스트 경계를 세분화해야 할 수도 있다.
- 도메인 동작에 더 잘 맞추고 개발 및 확장성을 최적화하기 위해서 분할하거나 병합하는 작업이 포함될 수 있다.
- 모놀리식 바운디드 컨텍스트 분해
- 복잡성을 최소화하기 위해서 모놀리식 컴포넌트로 설계할 수 있다.
- 시스템이 확장되고 확장성 또는 자율성이 필요해지면 바운디드 컨텍스트를 더 작고 세분화된 구성요소로 분해해야할 수도 있다.
- 새로운 개념 또는 하위 도메인 통합
- 새로운 개념이나 하위 도메인이 등장하면 새로운 바운디드 컨텍스트를 만들어야 할 수도 있다.
- 공유 커널 통합
- 공통 개념이나 작업을 정의하는 공유 커널은 시간이 지남에 따라 발전할 수 있다.
- 요구 사항에 따라 개선, 확장 또는 사용 중단되어야 할 수도 있다.
- 기술 스택 조성
- 새로운 기술이나 아키텍쳐 패턴을 사용할 수 있게 되면 이를 활용하기 위해 바운디드 컨텍스트가 발전할 수 있다.
- 지속적인 개선 및 피드백