research

Ubiquitous Language — 한국어 도메인의 숨은 자산

Ubiquitous Language — 한국어 도메인의 숨은 자산

Eric Evans Domain-Driven Design (2003)의 핵심 명제. 도메인 expert·개발자·코드·문서가 같은 vocabulary를 쓴다. 번역 비용이 bug의 source. overview의 🌐 Domain 축의 root. AI 시대에 vocabulary 단위 information hiding으로 직접 작동. 한국어 학사 용어처럼 고유 정밀도가 높은 도메인에서 가장 강력.


한 줄

도메인 expert가 쓰는 단어가 그대로 코드의 단어, 회의의 단어, 문서의 단어가 되는 design. 번역 layer가 사라지면 misalignment 비용 + verbosity + bug source가 한꺼번에 줄어든다. 한국어 학사 도메인처럼 vocabulary가 정밀하게 박힌 segment에서는 영어로 번역하지 않는 게 오히려 정확. AI 시대에는 "20 words where 1 will do" (Matt) 직접 해결.


⚛️ 철학

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

Evans의 Domain-Driven Design (2003)에서 ubiquitous language는 모델 발견의 핵심 도구로 정의됨:

"Use the model as the backbone of a language. Commit the team to exercising that language relentlessly in all communication within the team and in the code."

— Eric Evans, Domain-Driven Design (2003)

핵심 명제:

도메인 expert·개발자·코드·문서·다이어그램이 모두 같은 vocabulary를 사용한다. vocabulary 일치가 깨지는 자리마다 번역이 발생하고, 번역마다 의미 손실과 bug가 발생한다.

번역 비용을 그림으로:

각 번역 단계에서 의미 손실:

  • "수강신청"의 학기·정정 기간·재수강 규칙·정원 제한·시간 충돌 검사·졸업요건 영향 같은 도메인 implications
  • 영어로 옮기면 *"course registration"*이 되지만, 학내 학사 시스템 specific 의미가 약함
  • 매 번역마다 어떤 implication이 살아 있는지 다시 합의 필요 → 회의·misalignment·bug

Matt의 AI 시대 표현

mattpocock/skills README에서 정확히 같은 명제:

"With a ubiquitous language, conversations among developers and expressions of the code are all derived from the same domain model. I felt the same tension with my agents. Agents are usually dropped into a project and asked to figure out the jargon as they go. So they use 20 words where 1 will do."

→ AI 시대에 UL은 vocabulary 단위 information-hiding|information hiding. 도메인 vocabulary가 secret이 아니라 contract. AI agent가 도메인 단어를 그대로 알면 jargon을 figure out하는 비용이 사라짐.

다른 root와의 연결


🧱 추상적 작동 구조

UL이 시스템을 어떻게 관통하는가:

핵심: vocabulary가 시스템의 backbone. 모든 layer가 같은 단어를 각자의 형식(자연어 / API / 코드 / SQL / log)으로 표현하지만 core 단어는 동일.

Vocabulary가 만드는 artifact

UL이 정착되면 자연스럽게 따라오는 artifact:

Artifact형태예시
Glossary도메인 용어집수강신청, 정정, 폐강, 가산점, 정원의 정의
Type definitions도메인 타입struct SugangSinchung { ... } (한국어 그대로) 또는 struct CourseRegistration
Test names시나리오를 도메인 언어로test_정원_초과시_대기열_등록
ADR (Architecture Decision Record)결정의 도메인적 이유"정정 기간을 별 module로 분리한 이유"
AI agent skillsUL 기반 skill/수강신청-검증.md, /시간표-충돌-검사.md

Hickey 명제와의 만남 — vocabulary 단위 complect 제거

도메인 vocabulary ⨯ 기술 vocabulary = complect
→ 두 vocabulary 사이에 *번역 매핑*이 매 layer마다 필요
→ 매 매핑이 secret이 됨 (사람 머릿속에)
→ AI agent fail (secret 모름) + 신참 fail + 변경 비용 폭발

UL: 두 vocabulary를 하나로 통일
→ 매핑 사라짐
→ secret 사라짐 → AI 친화적 + 신참 친화적

→ Hickey의 complect 제거가 vocabulary 단위에서 정확히 작동.


⚠️ 약점/한계

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

1. Vocabulary 발견의 비용

UL은 팀이 함께 발견하는 것. 도메인 expert와 깊은 대화가 필요. 시간·관계·기록의 비용이 큼. 빠른 prototyping에 부적합.

해결: Strategic 활동의 일부로 timeboxed. Sprint마다 1-2시간을 vocabulary 발견 회의에 투자. mattpocock/skills의 /grill-with-docs가 이 발견을 AI와 함께 가속.

2. Legacy 시스템과의 충돌

기존 코드의 vocabulary가 잘못된 경우 마이그레이션 비용 큼:

  • DB 컬럼 이름 변경 → 모든 query 영향
  • API field name 변경 → client 영향
  • log·metric 이름 변경 → dashboard 영향

해결: 점진 도입. 새 module부터 UL 적용, legacy는 anti-corruption layer로 격리. 한 번에 다 바꾸지 않음.

3. Vocabulary가 변할 때

도메인 정책 변경 → 단어 의미 변경 (예: 학칙 개정으로 "정정"의 정의가 달라짐). 모든 layer 동기화가 필요해짐.

해결: Vocabulary 변경을 schema migration처럼 다룸. ADR로 변경 이유 기록 + 버전 관리. UL이 살아있는 도구임을 인정.

4. Bounded Context 부재 시 의미 충돌

같은 단어가 다른 도메인 context에서 다른 의미를 가질 수 있음:

  • "회원" — 도서관 context vs 학생회 context vs 동아리 context
  • "수업" — 학사 context (정규 과목) vs 평생교육원 context (단기 과정)

UL을 시스템 전체에 강제하면 충돌. → bounded-context가 답. UL은 bounded context 안에서만 통일됨.

5. 학습 곡선

신규 팀원이 vocabulary 익히는 시간 필요. 빠른 onboarding 어려움.

해결: Glossary를 첫 onboarding 자료로. AGENTS.md에 도메인 용어집을 처음 부분에. 신참 + AI agent가 같은 자료로 학습.

6. Over-formalization

Vocabulary를 너무 strict하게 강제하면 자연스러운 의사소통 방해. "이 회의에서는 '수강신청'만 쓰세요, '신청'은 금지" 같은 규칙은 비현실적.

해결: Strict는 코드·문서·spec에만, 회의는 자연스럽게. Code review에서 vocabulary deviation 점검.


🔄 대안 흐름

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

대안 1 — DSL (Domain-Specific Language)

UL을 언어 수준으로 박음. SQL이 DB 도메인의 DSL, Make file이 빌드 도메인의 DSL. 내부 구현 vs 사용자 표현이 언어 자체로 분리.

→ UL의 가장 강한 형태. 비용 큼 (parser·compiler 직접 만들어야), 작은 도메인에 over-spec. 하지만 반복 사용 도메인에서는 가장 강력.

대안 2 — Pidgin / 절충 vocabulary

도메인 + 기술 어휘 혼합. "수강신청 form 제출", "정정 endpoint 호출". 실무 다수가 이 패턴.

→ UL의 현실적 절충. 전 layer 통일 비용 회피, 하지만 번역 비용 일부 잔존. AI 시대에는 AI agent가 pidgin을 figure out하느라 verbosity 증가 — UL이 더 답.

대안 3 — Anemic Domain Model

Vocabulary 일치 거부. 데이터를 그대로 노출. behavior는 service에 별도. CRUD UI에 적합.

→ DDD 진영에서 anti-pattern으로 비판 (Vernon, Fowler). 하지만 도메인이 단순할 때는 over-engineering 회피 측면에서 정당.

대안 4 — English-only standardization

글로벌 팀에서 영어 vocabulary로 통일. 도메인 단어를 영어로 번역 강제. lingua franca가 UL 일치보다 우선.

→ 한국어 도메인에서는 명백한 손실. 한국어 vocabulary의 정밀도 + 글로벌 영어 둘 다는 어려움. 한국 segment의 고유 자산을 영어로 평탄화하면 의미 손실.

대안 5 — No talk, just code

Vocabulary 합의 시간 절감. 코드를 보고 의미 추론. 작은 팀 / 단독 개발자에 적합.

→ Solo project에서는 정당. 하지만 AI agent도 협업 대상이라면 코드만으로 부족 — UL이 AI를 위한 vocabulary 합의가 됨.


💡 인사이트

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

1. AI agent의 verbosity 문제 직접 해결

mattpocock/skills의 명제 다시:

"Agents use 20 words where 1 will do."

Agent가 도메인 vocabulary를 모르면:

  • "course registration form submission for the upcoming semester subject to capacity constraints" (12 words)

Agent가 알면:

  • "수강신청" (5 글자)

→ Token 비용 / context 사용 / latency가 모두 직접 감소. 단순 미관이 아니라 경제적 가치. 그리고 misalignment도 감소 — 짧은 단어가 정확한 의미를 운반.

2. AI 시대 information hiding의 vocabulary 단위 표현

information-hiding 명제: secret을 module 안에 격리. UL의 응용:

도메인 vocabulary는 시스템의 secret이 아니라 contract. 외부에 명시적으로 노출.

UL이 정착되면:

  • AGENTS.md / glossary가 AI에게 도메인을 한 번에 가르침
  • 새 AI session도 vocabulary 학습 시간 0
  • AI가 jargon을 figure out하는 실수가 사라짐

→ Information hiding의 vocabulary 측 표현이 UL.

3. 한국어 도메인의 숨은 자산 — 학사 vocabulary

한국어 학사 vocabulary는 고유 정밀도가 매우 높음. 영어로 번역하면 손실:

한국어영어 번역 시도손실되는 의미
수강신청course registration학기·정정 기간·시간충돌·정원·졸업요건 같은 학내 implications
정정course change/drop-add정정 기간·횟수 제한·환불 규정
폐강course cancellation최소 수강인원·교수 사정·대체 안내
가산점bonus points우선순위·연차·전공·학년 가중치
정원capacity분반·대기열·우선순위 규칙
재수강retaking학점 인정·평점 산정·횟수 제한
학사일정academic calendar학기·학년·방학·개강·종강 segmentation
전공이수major requirement fulfillment필수·선택·심화·졸업요건

→ 한국어로 두는 것이 정확한 design. 영어로 번역하면 implications가 사라짐. AI agent에게 한국어 vocabulary 그대로 노출하는 게 정합.

4. v1.0 design 직접 적용

LayerUL 표현
SKILL.md frontmattername: 수강신청-검증 (한국어 그대로 또는 sugang-sinchung-verification)
AGENTS.md첫 부분에 도메인 용어집 (학번, 학과, 과목 코드, 학사일정, 가산점)
학내 통합 모듈 API학사일정_조회(), 시간표_충돌_검사() (한국어 함수명 또는 transliteration)
Test nametest_정원_초과시_대기열_등록, test_정정_기간_외_변경_불가
Log/metricdim.수강신청_상태, metric.가산점_평균

→ 모든 layer가 한국어 학사 vocabulary 그대로. 번역 layer 0.

5. 학내 vocabulary skill을 marketplace로

학내 sektor에서 가장 직접적인 공유 자산은 vocabulary skill:

  • /수강신청-glossary.md
  • /학사일정-glossary.md
  • /장학-glossary.md
  • /졸업요건-glossary.md

각 skill이 학내 도메인의 한 vocabulary 영역을 정의. 다른 학생이 자기 도구를 만들 때 이 skill을 import → vocabulary 일관성 자동 확보.

이게 research/stateless-llm-sdk/design-principles|7 원칙의 원칙 3 (Ubiquitous Language per Segment)의 직접 implementation. v1.0 marketplace의 kernel asset이 vocabulary skill.

6. Hickey 명제의 vocabulary 단위 응용

simple-not-easy 노트의 complect (얽힘) 제거가 vocabulary 단위에서:

번역 layer 자체가 complect
→ 도메인 단어가 항상 *기술 단어와 함께* 등장 (얽힘)
→ 둘이 *같이 변해야* 시스템 일관성 유지

UL: 번역 layer 제거
→ 도메인 단어가 *독립적 entity*
→ 변할 때 *vocabulary 자체*가 변하고, 시스템은 자동 따라감

→ Hickey의 simple 추구가 vocabulary 단위에서 번역 layer 제거로 작동.

7. AI 시대 새 협업 mode — 사람-AI dialog의 substrate

전통적 페어 프로그래밍: 두 사람이 같은 vocabulary로 대화. AI 시대 변형:

사람과 AI agent가 같은 도메인 vocabulary로 대화. UL이 그 dialog의 substrate.

학내 학생이 AI에게 "수강신청 검증 함수 만들어줘" — 5 단어로 정확한 의미 전달. AI가 학내 학사 vocabulary skill을 import해 두면 jargon figure out 비용 0. 이게 strategic-vs-tactical-programming|strategic-vs-tactical의 사람-AI substrate가 vocabulary 단위에서 작동하는 모양.

8. 학내 segment에서 vocabulary 학습이 fundamentals 학습

학내 학생이 v1.0이나 비슷한 도구를 처음 만들 때 학습 path:

이 path에서 학생이 vocabulary 정밀도를 의식적으로 사용하기 시작 → DDD 학습이 자연스럽게 시작 → fundamentals 흡수.

→ UL이 fundamentals 학습의 entry point. 추상적 design 원칙보다 내가 매일 쓰는 단어가 입구.


다음에 가야 할 자리

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

  • bounded-context — UL이 어디까지 통하는가. UL의 적용 범위 정의 (Domain 축 두 번째)
  • anti-corruption-layer — 외부 시스템과 만나는 자리에서 vocabulary 변환. Domain 축 마무리
  • orthogonality — vocabulary 단위 layer 독립성

→ Domain 축은 UL → BC → ACL이 자연스러운 순서. 다음은 bounded-context 권장.


관련


Sources

직접 source

  • Domain-Driven Design: Tackling Complexity in the Heart of Software — Eric Evans (2003). Chapter 2 Communication and the Use of Language가 UL의 원전
  • Learning Domain-Driven Design — Vlad Khononov (2021, O'Reilly). 한국어 번역본 《도메인 주도 설계 첫걸음》. UL 가장 접근 쉬운 설명
  • Implementing Domain-Driven Design — Vaughn Vernon (2013). 실무 적용

Matt의 AI 시대 응용

무료 자료

관련 노트