1.5 컨텍스트 매핑

1. 컨텍스트 매핑의 이해

1.1 컨텍스트 매핑이란?

컨텍스트 매핑(Context Mapping)은 서로 다른 바운디드 컨텍스트 간의 관계와 상호작용을 정의하고 시각화하는 기법입니다. 도서관 시스템과 같이 여러 하위 도메인이 협력해야 하는 복잡한 시스템에서는, 각 컨텍스트가 어떻게 상호작용하는지 명확히 이해하는 것이 매우 중요합니다.

컨텍스트 매핑의 핵심 목적은 다음과 같습니다:

  • 시스템의 전체적인 구조와 의존성을 명확히 파악합니다
  • 컨텍스트 간의 통합 지점과 통신 방식을 구체적으로 정의합니다
  • 각 컨텍스트의 자율성과 의존성의 균형을 관리합니다
  • 잠재적인 통합 문제와 위험 요소를 사전에 식별합니다

1.2 컨텍스트 매핑 패턴

컨텍스트 매핑에는 여러 표준 패턴이 있으며, 각 패턴은 특정한 상황과 요구사항에 적합한 협력 모델을 제시합니다.

파트너십 패턴(Partnership): 두 컨텍스트가 성공을 위해 긴밀하게 협력하는 관계입니다. 개발 계획을 공동으로 수립하고, 변경사항을 함께 조율합니다. 예를 들어, 도서 검색과 도서 대출 컨텍스트는 사용자에게 일관된 경험을 제공하기 위해 파트너십 관계를 맺을 수 있습니다.

공유 커널 패턴(Shared Kernel): 두 컨텍스트가 일부 도메인 모델이나 코드를 공유하는 방식입니다. 도서관 시스템에서 도서 관리와 도서 대출 컨텍스트는 ISBN과 도서 메타데이터 스키마와 같은 핵심 요소를 공유할 수 있습니다.

고객-공급자 패턴(Customer-Supplier): 한 컨텍스트가 다른 컨텍스트에 서비스를 제공하는 일방향적인 관계를 나타냅니다. 사용자 관리 컨텍스트가 도서 대출 컨텍스트에 회원 인증 서비스를 제공하는 것이 좋은 예시입니다.

준수자 패턴(Conformist): 한 컨텍스트가 다른 컨텍스트의 모델을 그대로 따르는 방식입니다. 주로 외부 시스템과의 통합에서 사용되며, 예를 들어 외부 도서 정보 시스템의 데이터 구조를 그대로 수용하는 경우가 있습니다.

반부패 계층 패턴(Anti-corruption Layer): 외부 시스템이나 레거시 시스템과의 통합 시 사용되며, 변환 계층을 통해 내부 도메인 모델을 보호합니다. 외부 도서 API의 데이터를 내부 도메인 모델로 변환하는 경우에 사용될 수 있습니다.

2. 도서관 시스템의 컨텍스트 매핑

2.1 사용자 관리와 도서 대출의 관계

사용자 관리 컨텍스트와 도서 대출 순환 컨텍스트는 고객-공급자 패턴을 따릅니다. 이 관계에서 사용자 관리 컨텍스트는 공급자로서 다음과 같은 서비스를 제공합니다:

회원 인증 서비스:

엔드포인트: /api/members/validate
기능: 회원의 신원과 대출 자격을 검증
입력: 회원ID, 요청작업
출력: 인증결과, 권한정보

회원 상태 변경 이벤트:

이벤트명: MEMBER_STATUS_CHANGED
발행자: 사용자 관리 컨텍스트
페이로드:
  - memberId: 회원 식별자
  - previousStatus: 이전 상태
  - newStatus: 새로운 상태
  - effectiveUntil: 상태 유효 기간

2.2 도서 관리와 도서 대출의 관계

도서 관리 컨텍스트와 도서 대출 순환 컨텍스트는 공유 커널 패턴을 사용합니다. 두 컨텍스트는 다음과 같은 요소를 공유합니다:

공유 모델:

Book:
  - ISBN: 도서 식별자
  - title: 도서명
  - author: 저자
  - publisher: 출판사
  - publicationDate: 출판일

BookStatus:
  - available: 대출 가능
  - borrowed: 대출 중
  - reserved: 예약 중
  - maintenance: 정비 중

도서 복본 상태 변경 이벤트:

이벤트명: BOOK_COPY_STATUS_CHANGED
페이로드:
  - copyId: 도서 복본 ID
  - bookId: ISBN
  - previousStatus: 이전 상태
  - newStatus: 새로운 상태
  - timestamp: 변경 시각

3. 주요 이벤트와 통합점

3.1 도서 복본 상태 관리

도서 복본의 상태 변경은 시스템 전반에 영향을 미치는 중요한 이벤트입니다:

이벤트명: BOOK_COPY_STATUS_CHANGED
발행자: 도서 대출 순환 컨텍스트
구독자: 도서 관리 컨텍스트, 사용자 관리 컨텍스트

페이로드:
- copyId: 도서 복본의 고유 식별자
- bookId: 연관된 도서의 ISBN
- previousStatus: 이전 상태 (대출가능/대출중/예약중/정비중)
- newStatus: 새로운 상태
- timestamp: 상태 변경 시각
- memberId: 관련된 회원 ID (해당되는 경우)

3.2 회원 상태 관리

회원의 상태 변경은 대출 서비스 이용에 직접적인 영향을 줍니다:

이벤트명: MEMBER_STATUS_CHANGED
발행자: 사용자 관리 컨텍스트
구독자: 도서 대출 순환 컨텍스트

페이로드:
- memberId: 회원 식별자
- previousStatus: 이전 상태 (정상/연체/자격정지)
- newStatus: 새로운 상태
- reason: 상태 변경 사유
- effectiveUntil: 상태 유효 기간 (해당되는 경우)

4. 구현 고려사항

4.1 데이터 일관성 관리

컨텍스트 간 데이터 일관성을 유지하기 위해 다음 전략을 사용합니다:

이벤트 기반 동기화:

  • 상태 변경은 이벤트를 통해 전파됩니다
  • 각 컨텍스트는 자신의 로컬 데이터를 유지합니다
  • 최종 일관성(Eventually Consistency) 모델을 채택합니다

데이터 버전 관리:

  • 공유 데이터 모델은 버전 관리를 통해 호환성을 유지합니다
  • API 버전은 명시적으로 관리됩니다
  • 하위 호환성을 보장합니다

4.2 장애 대응 전략

컨텍스트 간 통신 장애에 대비한 전략을 수립합니다:

서킷 브레이커 패턴:

  • 반복적인 호출 실패를 감지하고 차단합니다
  • 단계적인 복구 전략을 구현합니다
  • 부분적 기능 저하를 허용합니다

폴백 메커니즘:

  • 캐시된 데이터를 활용합니다
  • 대체 작업 흐름을 제공합니다
  • 사용자에게 적절한 피드백을 제공합니다

이러한 구조화된 접근을 통해 도서관 시스템의 각 컨텍스트는 자율적으로 운영되면서도 전체 시스템의 일관성과 신뢰성을 유지할 수 있습니다.

Last updated on