핵심 인사이트 (3줄 요약)

  1. 본질: 바운디드 컨텍스트 (Bounded Context)란 DDD (Domain-Driven Design)에서 특정 도메인 모델이 유효한 논리적 경계로, 동일 단어도 경계 안에서 서로 다른 의미를 가질 수 있다.
  2. 가치: 각 바운디드 컨텍스트는 MSA (Microservices Architecture)에서 독립 배포 가능한 서비스 후보로 직결되어, 팀 경계·데이터 경계·코드 경계를 일치시킨다.
  3. 판단 포인트: 서비스 경계를 자를 때 비즈니스 언어(유비쿼터스 언어) 충돌 지점을 찾아 컨텍스트 맵을 그리면 과분리·과통합 없이 최적 경계를 도출할 수 있다.

Ⅰ. 개요 및 필요성

대규모 소프트웨어 시스템에서는 "고객(Customer)"이라는 단어 하나가 영업 팀에서는 잠재 리드를 뜻하고, 배송 팀에서는 수취인을, 청구 팀에서는 납부 주체를 의미한다. 이처럼 같은 용어가 맥락에 따라 다른 개념을 가리킬 때 하나의 통합 모델로 모든 의미를 담으려 하면 클래스는 비대해지고 결합도는 폭발적으로 늘어난다.

DDD (Domain-Driven Design)의 바운디드 컨텍스트 (Bounded Context)는 이 문제를 "모델이 유효한 경계를 명시적으로 선언"함으로써 해결한다. 경계 안에서는 유비쿼터스 언어 (Ubiquitous Language)가 일관되게 유지되며, 경계 바깥과는 컨텍스트 맵 (Context Map)으로 관계를 맺는다.

MSA (Microservices Architecture) 설계 시 바운디드 컨텍스트는 서비스 분리의 핵심 기준이 된다. 각 컨텍스트는 자체 데이터 스토어를 소유하고, 다른 컨텍스트와 API 또는 이벤트로만 통신한다. 이를 통해 팀 자율성(Conway's Law)과 기술 이종성(Polyglot)을 동시에 달성한다.

📢 섹션 요약 비유: 바운디드 컨텍스트는 외국어 사전과 같다 — "bank"가 영영 사전에서는 금융기관이지만, 지형 사전에서는 강둑이듯, 경계를 먼저 정해야 뜻이 명확해진다.


Ⅱ. 아키텍처 및 핵심 원리

항목내용특징
경계 정의유비쿼터스 언어가 일관된 범위도메인 전문가·개발자 공유 언어
데이터 소유권컨텍스트별 독립 DB데이터 결합 최소화
컨텍스트 맵경계 간 관계 명시ACL, Shared Kernel, Upstream/Downstream
서비스 후보1 컨텍스트 ≈ 1 마이크로서비스팀·배포·스케일 단위 일치
통신 방식API(동기) 또는 이벤트(비동기)느슨한 결합 유지
┌─────────────────────────────────────────────────────────────────┐
│                     전체 도메인 (E-Commerce)                    │
│                                                                 │
│  ┌──────────────────┐   ACL   ┌──────────────────────────┐     │
│  │  주문 컨텍스트    │◄──────►│    결제 컨텍스트          │     │
│  │  (Order BC)      │         │    (Payment BC)           │     │
│  │  ─ Order         │         │  ─ Invoice                │     │
│  │  ─ OrderItem     │         │  ─ PaymentMethod          │     │
│  │  [주문 DB]       │         │  [결제 DB]                │     │
│  └──────────────────┘         └──────────────────────────┘     │
│          │ Domain Event                    ▲                   │
│          │ (OrderPlaced)                   │ API               │
│          ▼                                 │                   │
│  ┌──────────────────┐         ┌──────────────────────────┐     │
│  │  재고 컨텍스트    │         │    배송 컨텍스트          │     │
│  │  (Inventory BC)  │         │    (Shipping BC)          │     │
│  │  ─ StockItem     │         │  ─ Shipment               │     │
│  │  ─ Warehouse     │         │  ─ Recipient              │     │
│  │  [재고 DB]       │         │  [배송 DB]                │     │
│  └──────────────────┘         └──────────────────────────┘     │
└─────────────────────────────────────────────────────────────────┘

📢 섹션 요약 비유: 각 컨텍스트는 독립된 왕국 — 왕국마다 화폐 단위가 달라도 국경의 환전소(ACL, Anti-Corruption Layer)를 통해 교역이 가능하다.


Ⅲ. 비교 및 연결

구분바운디드 컨텍스트 (Bounded Context)하위 도메인 (Subdomain)
관점솔루션 공간 (구현 경계)문제 공간 (비즈니스 영역)
개수설계 선택에 따라 변동비즈니스 구조에 의해 결정
1:1 관계권장하나 필수 아님1개 하위 도메인 → 여러 BC 가능
핵심 도구컨텍스트 맵, ACL코어/서브/지원 도메인 분류

컨텍스트 맵 패턴 종류:

  • Shared Kernel: 두 컨텍스트가 작은 모델 일부를 공유, 변경 시 협의 필수.
  • Customer/Supplier: 업스트림이 다운스트림 요구를 충족해야 함.
  • ACL (Anti-Corruption Layer): 외부 모델을 내부 모델로 변환하는 번역 계층.
  • Open Host Service: 퍼블릭 API 형태로 서비스를 노출.

📢 섹션 요약 비유: 하위 도메인이 지도 위의 지형이라면, 바운디드 컨텍스트는 그 위에 그린 행정구역 선 — 지형은 고정이지만 경계선은 필요에 따라 조정된다.


Ⅳ. 실무 적용 및 기술사 판단

서비스 경계 도출 체크리스트

  1. 도메인 전문가와 이벤트 스토밍 (Event Storming) 세션을 통해 도메인 이벤트 목록 작성.
  2. 같은 명사가 다른 의미로 쓰이는 충돌 지점 → 컨텍스트 경계 후보.
  3. 각 컨텍스트의 변경 빈도·팀 소유권·독립 배포 요구 사항 검토.
  4. 컨텍스트 맵 작성 후 순환 의존 여부 점검 → 순환 발생 시 경계 재조정.
  5. 단일 DB 공유 여부 점검 → 공유 시 경계 실질적으로 무의미.

기술사 시험 포인트

  • 바운디드 컨텍스트와 마이크로서비스 1:1 대응 원칙을 설명하고, 예외(대형 BC를 여러 서비스로 분리)도 언급할 것.
  • ACL 패턴을 레거시 시스템 연동 시나리오에서 적용하는 방법을 서술하면 가점.

📢 섹션 요약 비유: 경계 설계는 도시 계획 — 처음에 도로망(경계)을 잘 깔아야 나중에 건물(서비스)을 자유롭게 신축·재건축할 수 있다.


Ⅴ. 기대효과 및 결론

바운디드 컨텍스트를 기반으로 MSA를 설계하면 팀 자율성, 독립 배포, 데이터 소유권 명확화라는 세 가지 이점을 동시에 얻는다. 비즈니스 언어와 코드 구조가 일치하므로 신규 팀원의 온보딩 속도가 빨라지고, 도메인 변경이 특정 서비스에 국소화된다.

한계점으로는 초기 설계 비용이 크고, 잘못된 경계 설정 시 네트워크 홉 (hop) 증가·분산 트랜잭션 복잡도 상승 등의 역효과가 발생한다. 따라서 작은 모놀리스로 시작해 Strangler Fig 패턴으로 점진적으로 분리하는 것이 리스크를 줄이는 실용적 접근이다.

📢 섹션 요약 비유: 바운디드 컨텍스트는 집의 방 구조 — 방을 잘 나눠야 각자 편히 살 수 있지만, 벽을 너무 많이 세우면 이사하기도 불편하다.


📌 관련 개념 맵

개념연결 포인트
유비쿼터스 언어 (Ubiquitous Language)BC 내부에서 일관된 용어 사용
컨텍스트 맵 (Context Map)BC 간 관계·통신 패턴 명시
이벤트 스토밍 (Event Storming)BC 경계 발견 워크숍 기법
MSA (Microservices Architecture)BC 1개 = 서비스 후보
ACL (Anti-Corruption Layer)외부 BC 모델 오염 방지 번역 계층
Strangler Fig 패턴모놀리스를 BC 단위로 점진적 분리

👶 어린이를 위한 3줄 비유 설명

  1. 학교에서 "선생님"은 담임 선생님이지만, 병원에서 "선생님"은 의사 선생님이에요 — 같은 말이라도 장소에 따라 뜻이 달라요.

📈 관련 키워드 및 발전 흐름도

모놀리식: 모든 도메인 용어 혼재
    │
    ▼
Bounded Context: 도메인별 독립 모델 경계
    ├─► Context Map: 관계 정의 (Upstream/Downstream)
    └─► Anti-Corruption Layer: 번역 계층
    │
    ▼
MSA 서비스 분할 기준 → API 계약
  1. 바운디드 컨텍스트는 그 '장소의 울타리'예요 — 울타리 안에서는 모두 같은 언어로 이야기해요.
  2. 울타리를 잘 치면, 학교와 병원이 서로 독립적으로 운영되면서도 필요할 때 연락해서 협력할 수 있어요.