1.4 바운디드 컨텍스트 정의
1. 바운디드 컨텍스트의 이해
1.1 바운디드 컨텍스트란?
바운디드 컨텍스트(Bounded Context)는 특정 도메인 모델이 적용되는 명확한 경계를 의미합니다. 이는 동일한 용어나 개념이라도 사용되는 맥락에 따라 다른 의미를 가질 수 있다는 점을 인식하고, 이를 명시적으로 구분하기 위한 개념입니다.
도메인 주도 설계에서 바운디드 컨텍스트는 다음과 같은 특징을 가집니다:
- 독립적인 도메인 모델을 가집니다.
- 자체적인 유비쿼터스 언어를 사용합니다.
- 명확한 통합 지점을 제공합니다.
- 독립적인 구현과 배포가 가능합니다.
1.2 바운디드 컨텍스트의 중요성
바운디드 컨텍스트는 복잡한 도메인을 관리 가능한 단위로 분할하는 핵심 도구입니다. 이는 다음과 같은 이점을 제공합니다:
개념적 명확성:
- 각 컨텍스트 내에서 용어와 개념의 의미가 일관되게 유지됩니다.
- 서로 다른 하위 도메인 간의 혼란을 방지합니다.
- 도메인 전문가와의 효과적인 의사소통이 가능해집니다.
기술적 자율성:
- 각 컨텍스트는 독립적인 기술 스택을 선택할 수 있습니다.
- 컨텍스트별로 최적화된 데이터 모델을 사용할 수 있습니다.
- 독립적인 개발과 배포가 가능해집니다.
2. 도서관 시스템의 바운디드 컨텍스트
2.1 사용자 관리 컨텍스트
사용자 관리 컨텍스트는 도서관 서비스 이용자의 신원과 자격을 관리하는 영역입니다.
핵심 개념:
[Member]
- 속성: 회원번호, 이름, 연락처, 주소
- 책임: 회원 자격 관리, 대출 권한 확인
- 불변식: 회원번호는 고유해야 함, 연체 시 대출 제한
[MembershipCard]
- 속성: 카드번호, 발급일자, 유효기간
- 책임: 회원 인증
- 불변식: 카드번호는 고유해야 함
[MembershipPolicy]
- 속성: 회원등급별 규칙
- 책임: 회원 권한 정의
- 불변식: 모든 회원은 하나의 등급에 속해야 함2.2 도서 관리 컨텍스트
도서 관리 컨텍스트는 도서관의 자료를 카탈로그화하고 관리하는 영역입니다.
핵심 개념:
[Book]
- 속성: ISBN, 제목, 저자, 출판정보
- 책임: 서지정보 관리
- 불변식: ISBN은 고유해야 함
[BookCategory]
- 속성: 분류코드, 분류명
- 책임: 도서 분류체계 관리
- 불변식: 모든 도서는 하나 이상의 분류를 가져야 함2.3 도서 대출 순환 컨텍스트
도서 대출 순환 컨텍스트는 실제 도서의 대출과 반납을 관리하는 영역입니다.
핵심 개념:
[BookCopy]
- 속성: 복본ID, 상태, 위치정보
- 책임: 대출 가능 여부 관리
- 불변식: 한 번에 한 명만 대출 가능
[Checkout]
- 속성: 대출ID, 대출일, 반납예정일
- 책임: 대출 상태 추적
- 불변식: 반납예정일은 대출일 이후여야 함
[Reservation]
- 속성: 예약ID, 예약일, 만료일
- 책임: 예약 순서 관리
- 불변식: 대출 중인 도서만 예약 가능3. 컨텍스트 간 협력 패턴
3.1 컨텍스트 매핑
컨텍스트 간의 관계는 명확한 통합 계약을 통해 정의됩니다:
업스트림-다운스트림 관계:
사용자 관리 → 도서 대출 순환
- 회원 자격 정보 제공
- 대출 권한 확인 서비스 제공
도서 관리 → 도서 대출 순환
- 도서 메타데이터 제공
- 도서 분류 정보 제공3.2 통합 패턴
컨텍스트 간 통합은 다음과 같은 패턴을 활용합니다:
이벤트 기반 통합:
회원상태변경됨 → 대출권한업데이트
도서상태변경됨 → 대출가능여부업데이트
대출완료됨 → 회원이력업데이트4. 바운디드 컨텍스트 구현 전략
4.1 기술 스택 선택
각 컨텍스트는 자신의 특성에 맞는 기술을 선택할 수 있습니다:
사용자 관리 컨텍스트:
- 관계형 데이터베이스 사용
- 강력한 트랜잭션 지원 필요
- 보안과 감사 기능 중요
도서 관리 컨텍스트:
- 문서 기반 데이터베이스 활용
- 유연한 메타데이터 관리
- 검색 기능 최적화
4.2 구현 시 고려사항
각 컨텍스트 구현 시 다음 사항을 고려합니다:
격리 수준:
- 독립적인 데이터베이스 사용
- 별도의 배포 단위로 관리
- 자체적인 캐싱 전략 수립
통합 인터페이스:
- API 게이트웨이 활용
- 이벤트 버스 구축
- 장애 격리 패턴 적용
Last updated on