---
type: knowledge
domain: architecture
status: active
last-reviewed: 2026-07-27
---

# 도메인 경계 설계

> 한 줄 정의
> 시스템을 어디서 자를지(Bounded Context)와 일관성의 단위(Aggregate)를 정하는 DDD 전략 설계의 실무 핵심. 모듈 분리·서비스 분리·팀 분담의 근거가 되는 상류 결정이다.

## 해결하는 문제

- 잘못 그은 경계는 코드가 아니라 **시스템 전체의 비용**이 된다: 모든 기능이 N개 모듈을 동시에 수정하고, 트랜잭션이 경계를 넘어 얽힌다.
- [[아키텍처 스타일 선택]] 1절의 서비스 분리 전제("경계가 증명됐다")를 만드는 방법이 이 문서다.

## 핵심 원리

### 1. Ubiquitous Language — 경계는 언어에서 드러난다
- 한 컨텍스트 안에서는 코드·문서·대화가 같은 단어를 같은 뜻으로 쓴다.
- **같은 단어가 다른 뜻이 되는 지점이 경계다**: "상품"이 카탈로그에선 설명·이미지, 재고에선 수량·위치, 정산에선 단가·세금 — 컨텍스트 3개의 신호.
- 도메인 전문가가 안 쓰는 단어(Manager·Processor·Info)가 코드에 많으면 모델이 없다는 신호다.

### 2. Bounded Context 발견 기준

| 기준 | 질문 |
|------|------|
| 언어 경계 | 같은 단어의 뜻이 갈리는 곳은? |
| 변경 이유 | 함께 바뀌는 것끼리 묶였나? 한 요구사항이 여러 후보 경계를 항상 동시에 건드리나? |
| 데이터 소유권 | 이 데이터의 생성·수정 규칙을 누가 최종 결정하나? |
| 팀·업무 경계 | 실제 업무 담당이 갈리는 곳은? (Conway) |

- 셋 이상이 같은 선을 가리키면 경계로 확정한다. 하나만 가리키면 보류 — 모놀리스 안 모듈로 두고 관찰한다.

### 3. Context Mapping — 경계 사이 관계의 선택 기준

| 관계 | 채택 조건 |
|------|----------|
| **부패방지계층(ACL)** — 기본값 | 레거시·외부 시스템 연동 전부. 상대 모델이 우리 도메인에 스미지 않게 번역 계층을 둔다 |
| 고객-공급자 | 상류 팀이 하류 요구를 반영해 줄 협상력이 있을 때 |
| 준수자(Conformist) | 상류를 바꿀 수 없고 번역 비용도 아까울 때 — 상류 모델을 그대로 수용 (종속을 인지하고 선택) |
| 공유 커널 | 두 컨텍스트가 한 팀이고 릴리즈를 함께 할 때만. **기본적으로 피한다** — 커널 변경이 양쪽을 동시에 깬다 |

### 4. Aggregate — 트랜잭션 일관성의 단위
1. **한 트랜잭션은 한 aggregate만 수정한다.** 둘을 같이 고치고 싶다면 경계가 틀렸거나 최종 일관성(이벤트)이 답이다.
2. **작게 유지한다.** "주문 + 전체 이력 + 고객"을 한 덩어리로 잠그면 동시성이 죽는다.
3. **다른 aggregate는 ID로만 참조한다.** 객체 참조로 끌고 오면 경계가 무너진다.
4. 경계 밖 정합성은 도메인 이벤트 + 최종 일관성으로 → [[분산 신뢰성 패턴]].

### 5. 전술 패턴은 선별 채택
- Entity(식별자로 추적) vs Value Object(값으로 비교, 불변)의 구분은 어디서나 유용하다.
- Repository·Factory·Domain Service는 [[백엔드 원리]] 수준이면 충분하다 — CRUD 앱에 전술 패턴 전체 세트를 깔지 않는다.

## 적용/비적용

- **적용**: 도메인 규칙이 복잡한 곳(정산·승인 흐름·재고), 모듈/서비스 분리 결정 전.
- **비적용**: 단순 CRUD·관리 화면 — 테이블 중심 설계로 충분하다. DDD는 복잡성에 대한 투자다.

## 안티패턴

- **DB 테이블 = 도메인 모델** — 엔티티 중심 사고. 규칙 없는 getter/setter 덩어리.
- **거대 aggregate** — "전부 연관되니 전부 한 덩어리": 락 경합과 메모리 부풀림.
- **CRUD 앱에 풀 DDD** — 전술 패턴 의식(儀式)이 단순한 문제를 비싸게 만든다.
- **공유 커널 남용** — "공통 모듈"이 모든 컨텍스트를 결합시키는 뒷문이 된다.

## 관련 문서

- [[00_설계 허브]] · [[아키텍처 스타일 선택]] · [[분산 신뢰성 패턴]] · [[백엔드 원리]] · [[데이터 원리]] · [[데이터-모델-템플릿]]
