research

Bounded Context — UL의 통치 범위 + AI session의 자연 경계

Bounded Context — UL의 통치 범위 + AI session의 자연 경계

Eric Evans DDD의 또 하나 핵심 명제. Ubiquitous Language가 어디까지 통하는가의 답. 모델의 경계를 명시적으로 그어 vocabulary 충돌과 모델 일관성 붕괴를 차단. overview의 🌐 Domain 축 두 번째. AI 시대에는 context window 한계가 BC 경계를 강제해서, BC가 단순 design choice가 아니라 AI 시스템의 강제 조건.


한 줄

한 model·한 vocabulary가 일관되게 통하는 경계가 bounded context. 같은 단어("회원", "수업", "계좌")가 다른 context에서 다른 의미를 가질 수 있고, 그게 정상. 시스템 전체에 single universal model을 강요하려는 시도는 항상 실패한다. AI 시대에는 context window 자체가 BC를 강제하는 새 차원이 추가됨 — 한 AI session = 한 BC가 자연스러운 정합.


⚛️ 철학

원칙의 . 더 깊은 root와의 연결.

Evans DDD의 정의:

"A bounded context is a description of a boundary (typically a subsystem, or the work of a particular team) within which a particular model is defined and applicable."

— Eric Evans, Domain-Driven Design (2003)

ubiquitous-language|ULvocabulary가 통일된다고 약속하지만, 약속의 한계가 있음:

UL은 bounded context 안에서만 통일된다. 다른 BC에서는 같은 단어가 다른 의미를 가질 수 있고, 그게 정상이다.

학내 segment의 명료한 예시:

단어학사 BC학생회 BC도서관 BC동아리 BC
회원(개념 없음, "학생")총학생회·단과대 가입자도서관 카드 보유자동아리 가입자
수업정규 학점 과목(개념 없음)도서관 이용교육동아리 자체 강좌
출석학점 평가 요소회의 참석행사 참석활동 참석
회비(개념 없음)학생회비(개념 없음)동아리 회비
임원(개념 없음)학생회 임원(개념 없음)동아리 임원

단어가 다른 게 아니라 의미가 다름. 한 모델로 통합하려 하면:

  • 모든 의미를 모두 표현하려는 bloated entity (회원 entity가 학사+학생회+도서관+동아리 속성 다 가짐)
  • 어느 context에서도 완벽히 맞지 않는 모델
  • 변경 시 다른 context까지 영향 (학생회 회원 정의 변경 → 도서관에 영향)

Single Universal Model 함정 (DDD anti-pattern)

DDD 진영이 가장 강하게 비판하는 모든 도메인을 한 모델로 표현하려는 시도. 결과:

→ 90년대 Enterprise Data Model 운동이 이 함정의 대표적 사례. 거의 모든 시도가 실패. 그래서 DDD가 bounded context로 해체를 답으로 제시.

다른 root와의 연결

  • ubiquitous-language — UL의 통치 범위가 BC. UL과 BC는
  • information-hidingBC 경계가 information hiding의 시스템 단위. 다른 BC에서 내부 모델을 볼 수 없음
  • anti-corruption-layer두 BC 사이의 vocabulary 변환이 ACL의 직접 역할
  • strategic-vs-tactical-programming어디서 BC를 끊을지가 가장 strategic한 결정 중 하나. 잘못 끊으면 시스템 전체 영향
  • Conway's Law (Mel Conway, 1968) — 조직 구조가 시스템 구조에 박힘. BC가 조직 경계와 정렬되어야 자연스러움

🧱 추상적 작동 구조

두 BC의 vocabulary 분리:

핵심: 각 BC가 자기 model + 자기 UL. BC 사이는 명시적 변환 layer가 책임.

Context Map — BC 사이의 7가지 관계 패턴

Evans가 DDD에서 정의한 BC 사이의 관계 패턴 (Context Map):

패턴설명학내 예시
Partnership두 팀이 협력 관계. 함께 진화학사 + 졸업사정 (둘 다 졸업요건 변경 시 같이)
Shared Kernel작은 공유 모델을 두 BC가 함께 소유학번·학과 코드는 모든 BC가 공유
Customer-Supplier한 BC가 upstream, 다른 BC가 downstream. 합의된 변경학사 (upstream) → 졸업사정 (downstream)
Conformistdownstream이 upstream에 그대로 따름외부 시스템에 종속될 때
Anti-Corruption Layerdownstream이 변환 layer로 격리학사 시스템 변경에 학내 도구가 영향 받지 않게
Open Host Serviceupstream이 공개 API로 통신학사 시스템이 OpenAPI 제공
Published Language두 BC가 합의된 외부 언어로 통신JSON Schema, OpenAPI spec

BC 사이의 모든 관계는 명시적이어야. 이게 information-hiding|information hiding시스템 단위 표현.


⚠️ 약점/한계

원칙의 적용 한계. 잘못 적용 시 함정.

1. 경계 결정의 어려움

어디서 한 context를 끊고 다른 context를 시작할지 명확한 알고리즘이 없음. 도메인 expert와 깊은 대화로 발견. 시간·관계 비용 큼.

해결: Vocabulary 충돌 지점이 BC 경계 후보. 같은 단어가 의미가 다르기 시작하면 그 자리에 BC. 학습 도메인 + 운영 도메인이 같은 시스템에서 manage되면 BC 분리 신호.

2. 조직과 코드의 mismatch (Conway's Law 충돌)

"Any organization that designs a system will produce a design whose structure is a copy of the organization's communication structure." — Mel Conway

팀 경계와 BC 경계가 어긋나면 매 변경마다 팀 간 합의 비용. 팀 A가 자기 BC를 변경하려는데 팀 B의 BC도 영향이면 조정 비용 폭발.

해결: BC 경계를 조직 경계와 정렬. Inverse Conway Maneuver — 원하는 시스템 구조에 맞춰 조직을 재구성.

3. 너무 작은 BC → context 폭발

매 vocabulary 차이마다 BC 분리하면 수십 개 BC. 관리 비용 폭발. 통신 overhead 증가.

해결: BC는 cohesive한 모델 단위가 한 BC. 한 사람이 머릿속에 담을 수 있는 크기. 보통 1 BC ≈ 5-10 entities.

4. 너무 큰 BC → UL 의미 흐려짐

한 BC가 너무 크면 내부에서 vocabulary 충돌 시작. UL이 흔들림.

해결: BC 내부 충돌 발생 = 분리 신호. 변경에 따라 점진 분리.

5. 변화 시기 mismatch

BC 분리 시기를 잘못 판단:

  • 너무 일찍 분리 → premature BC. 도메인 이해 부족 상태에서 분리. 잘못된 경계.
  • 너무 늦게 분리 → big-ball-of-mud. 분리 비용 폭발.

해결: **모니카 가설 (Monica Heuristic)*: vocabulary 충돌이 3번 발생하면 그때 분리. Rule of three의 BC 단위 표현.

6. Cross-context 데이터 sync 비용

두 BC가 같은 entity를 다른 시각으로 보면 sync 비용:

  • 학사 BC의 "학생" vs 도서관 BC의 "회원" — 둘 다 같은 사람
  • 한쪽 변경 (졸업, 휴학) → 다른 쪽 sync 필요

해결: Event-driven sync + ACL. 두 BC가 직접 sync하지 않고 event를 발행. 다른 BC가 자기 모델로 reflect.


🔄 대안 흐름

이 원칙이 적용 안 되는 시나리오와 다른 답.

대안 1 — Monolithic single model

한 모델로 통합. 작은 시스템 / single team / 단순 도메인에 적합.

Single Universal Model 함정과 다름. 작은 시스템은 진짜로 한 BC. 비판받는 건 큰 시스템에서 한 모델 강요. 작은 시스템에는 BC 자체가 over-engineering.

대안 2 — Microservices = BC

서비스 경계가 BC 경계와 정렬. 가장 modern한 implementation.

→ 정렬되면 매우 강력. BC가 코드·배포·운영까지 분리됨. 단, microservices의 추가 비용 (네트워크, eventual consistency, 운영 복잡도) 발생.

대안 3 — Modular monolith

한 codebase 안에 BC만 분리. 코드 modularity는 BC, 배포는 monolith. microservices 비용 회피.

→ 학내 segment에 적합. 작은 팀 / 적은 사용자 / 운영 부담 회피. v1.0의 자연스러운 출발점.

대안 4 — Event-driven sync

두 BC 사이를 event로 통신. Direct call 대신 publish/subscribe. eventual consistency 허용.

→ BC 자율성 높임. 단, 학습 곡선 + 디버깅 어려움.

대안 5 — Shared database (anti-pattern이지만 실무 다수)

여러 BC가 같은 DB schema 공유. 빠른 sync, 그러나 BC 자율성 파괴. 변경 시 모든 BC 영향.

→ DDD 진영에서 강하게 비판. 그러나 실무 legacy 시스템 다수가 이 패턴. 현실적 절충 — 읽기 전용 view만 공유, 쓰기는 BC owner만.


💡 인사이트

AI 시대 왜 지금 부활하는가 + 학내 segment 의미.

1. Context window 한계가 BC 경계를 강제

AI agent의 context window는 제한 (Claude는 200K, GPT는 128K 등). 시스템 전체 vocabulary와 model을 한 session에 담을 수 없음. 이게 BC를 design choice가 아닌 강제 조건으로 만듦:

→ *AI 시대에 BC는 경제적 정합. 한 session = 한 BC = 한 UL = AI 정확도 최대.

2. AI session 자체가 자연스러운 BC

전통적으로 BC는 영구한 architectural 단위. AI 시대에 새 차원 추가:

1회성 AI session도 BC가 될 수 있음. 한 task에 필요한 vocabulary만 모아서 session.

sources/key-articles-summary#3. Anthropic — *Effective Harnesses for Long-Running Agents*|Anthropic harnesses 글의 feature list 한 번에 한 feature 패턴이 정확히 이 표현. 한 session = 한 작업 BC.

3. 학내 BC 분리 — 자연스러운 경계

학내 segment에서 명백한 BC 경계:

BCUL 핵심자연스러운 owner
학사학번·학과·과목·학점·졸업요건학사처
연구연구실·논문·과제·실험연구처
학생회회원·임원·회의·회비총학생회
단과대 학생회행사·MT·간식단과대 학생회
동아리동아리원·활동·정기모임동아리연합회
도서관도서·대출·연체·열람실도서관
취업채용·인턴·자격·이력경력개발센터
장학신청·심사·지급장학팀
기숙사입사·점호·식사생활관

각 BC가 자기 vocabulary skill + 자기 통합 모듈. v1.0이 학내 segment에 가져다 줄 분할 구조.

4. Conway's Law의 학내 segment 표현

Conway's law: 조직이 시스템 구조에 박힘. 학내에서는:

  • 학사처 ↔ 학사 BC (자연스러움)
  • 총학 ↔ 학생회 BC (자연스러움)
  • 도서관 ↔ 도서관 BC (자연스러움)

학내 조직 구조 자체가 BC를 자연스럽게 정의. 별 design 노력 없이 BC가 이미 존재. v1.0이 그 자연 구조에 정합.

5. v1.0 design 직접 적용

적용 자리BC 표현
SKILL.md frontmatterbounded_context: 학사 field
학내 통합 모듈BC별로 별 crate (unit-haksa, unit-haksengwhi, unit-doseogwan)
AGENTS.mdBC별로 별 glossary section
AI session prompt"이 session은 학사 BC. 학사 vocabulary만 사용"
MarketplaceBC별로 별 카테고리 (학사 skills / 학생회 skills / ...)

6. AI agent specialize — BC별 specialist

전통적으로 한 AI agent가 모든 도메인 처리. AI 시대 새 패턴:

BC별로 specialized AI agent. 학사 agent / 학생회 agent / 도서관 agent. 각자 자기 BC vocabulary와 model에만 집중.

장점:

  • Context window 효율 (한 BC만)
  • vocabulary 일관성 (UL 정착)
  • specialization으로 정확도 ↑
  • 학내 학생이 자기 BC agent만 쓰면 됨

→ 이게 v1.0 marketplace의 kernel value proposition. 학내 BC별 agent를 학내 사용자가 만들고 공유.

7. 조직 변화에 BC가 자연 적응

학내 조직은 학기마다 재선·개편 (총학생회 임기 1년). BC 단위로 분리되어 있으면:

  • 새 총학 ↔ 학생회 BC만 영향. 학사 BC는 무관
  • 학칙 개정 ↔ 학사 BC만 영향. 학생회 BC는 무관

조직 변화 흡수 능력이 BC 분리에 직접 비례. 학내 segment의 높은 변화 빈도가 BC 분리의 가장 강한 정당화.

8. AI 시대 새 차원task-level BC

기존 BC: 영구 architectural 단위. AI 시대 추가: task-level transient BC.

예: 학생이 "이번 학기 시간표 짜기" task를 시작 → 임시 BC 생성:

  • vocabulary: 시간표·과목·교수·강의실
  • model: 시간 슬롯·충돌 검사·우선순위
  • session 단위로 살아있다가 task 끝나면 사라짐

AI session = 1회용 BC가 새 design 단위. v1.0이 task-level BC를 도구화하면 학내 학생이 자기 일상의 작은 BC들을 만들고 활용.


다음에 가야 할 자리

이 노트가 호출한 다른 원칙들 — 자연스러운 다음 노트:

→ Domain 축 마무리에는 anti-corruption-layer가 가장 자연스러움.


관련


Sources

직접 source

  • Domain-Driven Design — Eric Evans (2003). Chapter 14 Maintaining Model Integrity (BC의 원전)
  • Implementing Domain-Driven Design — Vaughn Vernon (2013). Chapter 2 Domains, Subdomains, and Bounded Contexts
  • Learning Domain-Driven Design — Vlad Khononov (2021). 한국어판 《도메인 주도 설계 첫걸음》. BC 가장 접근 쉬운 설명

Context Map과 패턴

  • Evans 책 Chapter 14 Context Maps — 7가지 관계 패턴 원전
  • Khononov 책 — 더 modern한 표현

Conway's Law

  • Conway, M. (1968). How Do Committees Invent?. Datamation. — 원전
  • Inverse Conway ManeuverTeam Topologies (Skelton & Pais, 2019)

AI 시대 BC

Microservices와 BC

  • Building Microservices — Sam Newman (2nd ed). Microservices를 BC로 보는 시각
  • Monolith to Microservices — Sam Newman. BC 분리 마이그레이션