바운디드 컨텍스트

Bounded context

같은 단어라도 업무 경계마다 다른 모델과 규칙을 갖게 합니다.

···
html
<div class="scene"><div class="title">ONE WORD, TWO MODELS</div><div class="contexts"><div class="context" id="sales"><b>SALES</b><div>CUSTOMER</div><span>account · plan</span></div><div class="bridge" id="map">MAP<br>→</div><div class="context" id="shipping"><b>SHIPPING</b><div>CUSTOMER</div><span>address · contact</span></div></div><div class="muted" id="contextState">Translate at the boundary</div></div>
css
.scene{width:min(94vw,760px);height:min(86vh,320px);padding:clamp(10px,2.5vmin,18px);border:1px solid var(--line);border-radius:14px;background:var(--surface);color:var(--fg);font:500 clamp(11px,1.3vw,16px)/1.25 "Pretendard Variable",Pretendard,-apple-system,sans-serif;display:flex;flex-direction:column;gap:clamp(7px,1.6vmin,12px);overflow:hidden}.scene *{box-sizing:border-box}.title{font-weight:750;color:var(--accent)}.muted{color:var(--muted)}.mono{font-family:ui-monospace,monospace}.row{display:flex;align-items:center;justify-content:center;gap:clamp(5px,1.4vmin,12px);flex:1;min-height:0}.tile{border:1px solid var(--line);border-radius:8px;background:var(--bg);padding:clamp(6px,1.6vmin,12px);text-align:center;min-width:0}.on{border-color:var(--accent)!important;background:color-mix(in srgb,var(--accent) 12%,var(--surface))!important}.pulse{animation:pulse 1.6s infinite alternate}@keyframes pulse{to{border-color:var(--accent);transform:translateY(-3px)}}.contexts{display:flex;align-items:stretch;gap:5px;flex:1;min-height:0}.context{flex:1;min-width:0;border:2px dashed var(--line);border-radius:9px;padding:7px;display:flex;flex-direction:column;justify-content:space-around;text-align:center}.context b{color:var(--accent)}.context span{color:var(--muted)}.bridge{align-self:center;color:var(--accent);text-align:center;min-width:16%}.context.active{border-color:var(--accent);background:color-mix(in srgb,var(--accent) 9%,var(--surface))}
js
let right=false;function tick(){right=!right;document.getElementById('sales').classList.toggle('active',!right);document.getElementById('shipping').classList.toggle('active',right);document.getElementById('map').innerHTML=right?'MAP<br>→':'←<br>MAP';document.getElementById('contextState').textContent=right?'Sales account → shipping destination':'Shipping contact → sales account'}tick();setInterval(tick,1300);document.querySelector('.scene').addEventListener('pointerdown',tick)

바운디드 컨텍스트는 도메인 모델과 용어가 통하는 범위를 정합니다. 예를 들어 고객은 영업에서는 계약 관계, 배송에서는 수령지와 연락처로 표현될 수 있습니다. 한 모델을 모든 팀에 강요하기보다 경계 사이의 번역 규칙을 명시합니다.

데모의 CUSTOMER 카드는 경계를 넘을 때 필요한 필드만 다른 형태로 매핑됩니다. 경계를 나눴다면 소유권과 데이터 교환 계약도 함께 정해야 합니다.

언제 쓰나

부서나 기능마다 같은 용어의 의미가 달라 모델이 비대해질 때 사용합니다.

페이지로 열기 ↗