--- id: P-REINFORCE-WIKI-1A4102A8 category: "10_Wiki/πŸ’‘ Topics/02_Architecture_Principles" confidence_score: 0.95 tags: ['도메인-주도-섀계-(domain-driven-design,-ddd)', 'microservices-architecture', 'modular-monolith', 'hexagonal-architecture', 'event-sourcing', 'architecture-principles'] last_reinforced: 2026-05-02 --- # [[도메인 주도 섀계 (Domain-Driven Design, DDD)]] ## πŸ“Œ Brief Summary 도메인 주도 섀계(DDD)λŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ λΉ„μ¦ˆλ‹ˆμŠ€ 도메인과 λ‘œμ§μ„ μ€‘μ‹¬μœΌλ‘œ μ†Œν”„νŠΈμ›¨μ–΄λ₯Ό λͺ¨λΈλ§ν•˜κ³  κ΅¬μ‘°ν™”ν•˜λŠ” 섀계 원칙이닀 [1, 2]. 주둜 λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€ μ•„ν‚€ν…μ²˜λ‚˜ λͺ¨λ“ˆν˜• λͺ¨λ†€λ¦¬μŠ€(Modular Monolith) ν™˜κ²½μ—μ„œ 각 μ„œλΉ„μŠ€λ‚˜ λͺ¨λ“ˆμ΄ λ‹΄λ‹Ήν•΄μ•Ό ν•  단일 μ±…μž„κ³Ό λΉ„μ¦ˆλ‹ˆμŠ€ 논리적 경계λ₯Ό λͺ…ν™•νžˆ μ‹λ³„ν•˜λŠ” 데 μ‚¬μš©λœλ‹€ [2, 3]. 이 접근법은 λ³΅μž‘ν•œ μ‹œμŠ€ν…œμ„ λΉ„μ¦ˆλ‹ˆμŠ€ μ—­λŸ‰μ— 따라 λΆ„ν• ν•˜μ—¬, 기술적 κ΅¬ν˜„λ³΄λ‹€ λΉ„μ¦ˆλ‹ˆμŠ€ κ·œμΉ™ μžμ²΄μ— 집쀑할 수 μžˆλ„λ‘ λ•λŠ” 핡심적인 역할을 μˆ˜ν–‰ν•œλ‹€ [4, 5]. ## πŸ“– Core Content * **λΉ„μ¦ˆλ‹ˆμŠ€ 경계 및 μ„œλΉ„μŠ€ λΆ„ν• μ˜ κΈ°μ€€:** 도메인 주도 섀계(DDD)λŠ” 각 μ„œλΉ„μŠ€κ°€ 무엇을 ν•΄μ•Ό ν•˜κ³  무엇을 ν•˜μ§€ 말아야 ν•˜λŠ”μ§€λ₯Ό λͺ…ν™•νžˆ μ •μ˜ν•˜λŠ” 데 핡심적인 κ°€μ΄λ“œλΌμΈμ„ μ œκ³΅ν•œλ‹€. λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€ μ•„ν‚€ν…μ²˜λ₯Ό 섀계할 λ•Œ, DDD 원칙을 ν™œμš©ν•΄ μ‹œμŠ€ν…œμ˜ 도메인 경계(Domain boundaries)λ₯Ό νŒŒμ•…ν•˜κ³  λΉ„μ¦ˆλ‹ˆμŠ€ μ—­λŸ‰μ„ μ€‘μ‹¬μœΌλ‘œ μ„œλΉ„μŠ€λ₯Ό 쑰직할 수 μžˆλ‹€ [2, 5]. * **μ„œλΈŒλ„λ©”μΈ(Subdomain)κ³Ό μ• κ·Έλ¦¬κ²Œμ΄νŠΈ(Aggregates):** DDDμ—μ„œ μ„œλΈŒλ„λ©”μΈμ€ λΉ„μ¦ˆλ‹ˆμŠ€ κΈ°λŠ₯(λΉ„μ¦ˆλ‹ˆμŠ€ μ—­λŸ‰)의 νŠΉμ • 단면을 κ΅¬ν˜„ κ°€λŠ₯ν•œ λͺ¨λΈλ‘œ μ •μ˜ν•œ 것이닀 [4]. μ„œλΈŒλ„λ©”μΈμ€ λΉ„μ¦ˆλ‹ˆμŠ€ κ·œμΉ™μ„ μ‹€μ œλ‘œ κ΅¬ν˜„ν•˜λŠ” λΉ„μ¦ˆλ‹ˆμŠ€ μ—”ν‹°ν‹°(DDD μ• κ·Έλ¦¬κ²Œμ΄νŠΈ)와 μ™ΈλΆ€ 세계와 ν†΅μ‹ ν•˜λŠ” μ–΄λŒ‘ν„°(Adapters)둜 κ΅¬μ„±λœ λΉ„μ¦ˆλ‹ˆμŠ€ λ‘œμ§μ„ ν¬ν•¨ν•œλ‹€ [4]. * **λͺ¨λ“ˆν˜• λͺ¨λ†€λ¦¬μŠ€(Modular Monolith) μ•„ν‚€ν…μ²˜μ™€μ˜ μ‘°ν™”:** λ„€νŠΈμ›Œν¬ λΆ„ν•  없이 단일 ν”„λ‘œμ„ΈμŠ€ λ‚΄μ—μ„œ λ™μž‘ν•˜λŠ” λͺ¨λ“ˆν˜• λͺ¨λ†€λ¦¬μŠ€ μ•„ν‚€ν…μ²˜λŠ” DDD 원칙을 κΉ”λ”ν•˜κ²Œ μ μš©ν•˜κΈ°μ— 이상적인 ν™˜κ²½μ„ μ œκ³΅ν•œλ‹€ [3, 6]. λ„€νŠΈμ›Œν¬ μ§€μ—°μ΄λ‚˜ μ„œλΉ„μŠ€ λΆ„ν• μ˜ λ³΅μž‘μ„± 없이 λΉ„μ¦ˆλ‹ˆμŠ€ 둜직의 경계λ₯Ό κ°•μ œν•  수 μžˆμ–΄ μ½”λ“œλ₯Ό 잘 μ²΄κ³„ν™”ν•˜κ³  μœ μ§€λ³΄μˆ˜μ„±μ„ λ†’μ΄λŠ” 데 κΈ°μ—¬ν•œλ‹€ [3]. * **ν—₯사고날 μ•„ν‚€ν…μ²˜(Hexagonal Architecture)의 기반:** ν¬νŠΈμ™€ μ–΄λŒ‘ν„°(Ports and Adapters) νŒ¨ν„΄μœΌλ‘œλ„ λΆˆλ¦¬λŠ” ν—₯사고날 μ•„ν‚€ν…μ²˜λŠ” 도메인 쀑심 섀계(DDD) 원칙과 잘 λΆ€ν•©ν•œλ‹€ [1]. μ΄λŠ” λΉ„μ¦ˆλ‹ˆμŠ€ λ‘œμ§μ„ 핡심 도메인 μ˜μ—­μ— μœ„μΉ˜μ‹œν‚€κ³  μ™ΈλΆ€ μ‹œμŠ€ν…œ(λ°μ΄ν„°λ² μ΄μŠ€, UI λ“±)에 λŒ€ν•œ μ˜μ‘΄μ„±μ„ λΆ„λ¦¬ν•˜λŠ” ꡬ쑰적인 틀을 μ œκ³΅ν•œλ‹€ [1, 7]. *(μ°Έκ³ : μ†ŒμŠ€μ— κ΄€λ ¨ 정보가 λΆ€μ‘±ν•©λ‹ˆλ‹€. DDD의 세뢀적인 μ „λž΅μ  νŒ¨ν„΄(예: Bounded Context, Ubiquitous Language)μ΄λ‚˜ ꡬ체적 μ „μˆ μ  νŒ¨ν„΄μ— λŒ€ν•œ 상세 이둠은 제곡된 λ¬Έμ„œμ— ν¬ν•¨λ˜μ–΄ μžˆμ§€ μ•ŠμŠ΅λ‹ˆλ‹€.)* ## βš–οΈ Trade-offs & Caveats * **κ°€νŒŒλ₯Έ ν•™μŠ΅ 곑선과 μ „λ¬Έμ„± μš”κ΅¬:** 도메인 주도 μ„€κ³„λŠ” 초보 κ°œλ°œμžλ‚˜ κ²½ν—˜μ΄ λΆ€μ‘±ν•œ μ†Œκ·œλͺ¨ νŒ€μ—κ²ŒλŠ” ν•™μŠ΅ 곑선이 κ°€νŒŒλ₯΄κ³  μ μš©ν•˜κΈ° κΉŒλ‹€λ‘œμš΄ 원칙이닀 [8]. λͺ…ν™•ν•œ 좔상화와 섀계 νŒ¨ν„΄μ„ 이해해야 ν•˜λ―€λ‘œ, νŒ€μ΄ DDD 전문성을 κ°–μΆ”μ§€ λͺ»ν•œ μƒνƒœμ—μ„œ λ„μž…μ„ μ‹œλ„ν•  경우 κ³ μ „ν•  수 μžˆλ‹€ [8]. * **μ „λ¬Έμ„± λΆ€μ‘± μ‹œ νŠΉμ • μ•„ν‚€ν…μ²˜ λ„μž…μ˜ μ œμ•½:** 이벀트 μ†Œμ‹±(Event Sourcing)κ³Ό 같이 DDD와 μ‹œλ„ˆμ§€λ₯Ό λ‚΄λŠ” νŠΉμ • μ•„ν‚€ν…μ²˜ νŒ¨ν„΄μ„ λ„μž…ν•  λ•Œ, νŒ€μ— 도메인 주도 섀계에 λŒ€ν•œ μ „λ¬Έ 지식이 λΆ€μ‘±ν•˜λ‹€λ©΄ 였히렀 ν•΄λ‹Ή νŒ¨ν„΄μ˜ μ‚¬μš©μ„ ν”Όν•˜λŠ” 것이 ꢌμž₯λœλ‹€ [9]. 즉, μ‹œμŠ€ν…œ μ„€κ³„μ˜ λ³΅μž‘λ„κ°€ λ†’μ•„μ§ˆμˆ˜λ‘ DDD에 λŒ€ν•œ 높은 μˆ˜μ€€μ˜ 이해도가 ν•„μˆ˜μ μΈ μ „μ œ 쑰건이 λœλ‹€. *(μ°Έκ³ : μ†ŒμŠ€μ— κ΄€λ ¨ 정보가 λΆ€μ‘±ν•©λ‹ˆλ‹€. DDD 적용 μ‹œ λ°œμƒν•  수 μžˆλŠ” ꡬ체적인 μ„±λŠ₯ μ €ν•˜, 좔가적인 인프라 λΉ„μš© λ“±μ˜ λ‹€λ₯Έ 기술적 λΆ€μž‘μš©μ— λŒ€ν•œ 언급은 μ†ŒμŠ€μ— μ—†μŠ΅λ‹ˆλ‹€.)* ## πŸ”— Knowledge Connections ### Related Concepts #### [μ•„ν‚€ν…μ²˜/기반 기술] - [[Microservices Architecture]] - μ—°κ²° 이유: DDDλŠ” λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€μ—μ„œ μ„œλΉ„μŠ€μ˜ 크기와 λΉ„μ¦ˆλ‹ˆμŠ€ 경계λ₯Ό μ‹λ³„ν•˜κ³ , λΉ„μ¦ˆλ‹ˆμŠ€ μ—­λŸ‰μ„ μ€‘μ‹¬μœΌλ‘œ μ‹œμŠ€ν…œμ„ μ‘°κ°λ‚΄λŠ” 데 ν•„μˆ˜μ μΈ 방법둠을 μ œκ³΅ν•˜κΈ° λ•Œλ¬Έμ΄λ‹€ [2, 5]. - 이 κ°œλ…μ„ 톡해 더 깊게 이해할 수 μžˆλŠ” λΆ€λΆ„: λ…λ¦½μ μœΌλ‘œ 배포 κ°€λŠ₯ν•œ μž‘μ€ μ„œλΉ„μŠ€λ“€μ΄ μ–΄λ–»κ²Œ λΉ„μ¦ˆλ‹ˆμŠ€ 도메인과 1:1둜 λ§€ν•‘λ˜λŠ”μ§€ 이해할 수 μžˆλ‹€. - [[Modular Monolith]] - μ—°κ²° 이유: λͺ¨λ“ˆν˜• λͺ¨λ†€λ¦¬μŠ€λŠ” μ„œλΉ„μŠ€λ₯Ό λ„€νŠΈμ›Œν¬λ‘œ λΆ„μ‚°μ‹œν‚€μ§€ μ•ŠμœΌλ©΄μ„œλ„ λ‚΄λΆ€μ μœΌλ‘œ DDD 원칙을 μ—„κ²©ν•˜κ²Œ μ μš©ν•˜μ—¬ λΉ„μ¦ˆλ‹ˆμŠ€ λ…Όλ¦¬μ˜ 경계λ₯Ό λΆ„λ¦¬ν•˜κ³  μœ μ§€λ³΄μˆ˜μ„±μ„ κ·ΉλŒ€ν™”ν•  수 μžˆλŠ” μ•„ν‚€ν…μ²˜μ΄κΈ° λ•Œλ¬Έμ΄λ‹€ [3, 6]. - 이 κ°œλ…μ„ 톡해 더 깊게 이해할 수 μžˆλŠ” λΆ€λΆ„: 물리적인 μ„œλ²„ 뢄리 없이도 논리적 도메인 λΆ„λ¦¬λ§ŒμœΌλ‘œ 달성할 수 μžˆλŠ” 섀계적 이점을 확인할 수 μžˆλ‹€. - [[Hexagonal Architecture]] - μ—°κ²° 이유: ν—₯사고날 μ•„ν‚€ν…μ²˜λŠ” DDD의 핡심 도메인 λ‘œμ§μ„ μ™ΈλΆ€μ˜ 기술적 λ³€ν™”λ‘œλΆ€ν„° 격리(Isolation)ν•˜κΈ° μœ„ν•œ ꡬ쑰적 ν…œν”Œλ¦Ώμ„ μ œκ³΅ν•˜μ—¬ DDD 원칙 κ΅¬ν˜„μ„ μ§€μ›ν•˜κΈ° λ•Œλ¬Έμ΄λ‹€ [1, 7]. - 이 κ°œλ…μ„ 톡해 더 깊게 이해할 수 μžˆλŠ” λΆ€λΆ„: 포트(Port)와 μ–΄λŒ‘ν„°(Adapter)λ₯Ό μ‚¬μš©ν•΄ μ–΄λ–»κ²Œ 도메인 λ‘œμ§μ„ μˆœμˆ˜ν•˜κ²Œ μœ μ§€ν•  수 μžˆλŠ”μ§€ νŒŒμ•…ν•  수 μžˆλ‹€. ### Deeper Research Questions - λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€λ‘œ μ‹œμŠ€ν…œμ„ λΆ„ν• ν•  λ•Œ DDD의 'μ„œλΈŒλ„λ©”μΈ'κ³Ό 'μ• κ·Έλ¦¬κ²Œμ΄νŠΈ'λŠ” μ„œλΉ„μŠ€μ˜ μ±…μž„κ³Ό νŠΈλžœμž­μ…˜ 경계λ₯Ό ꡬ체적으둜 μ–΄λ–»κ²Œ κ²°μ •ν•˜λŠ”κ°€? [2, 4] - λͺ¨λ“ˆν˜• λͺ¨λ†€λ¦¬μŠ€ ν™˜κ²½μ—μ„œ DDDλ₯Ό μ μš©ν•˜μ—¬ 논리적 경계λ₯Ό λ‚˜λˆˆ ν›„, ν–₯ν›„ λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€λ‘œ μ „ν™˜ν•΄μ•Ό ν•  λ•Œ 도메인 λͺ¨λΈμ„ μ–΄λ–»κ²Œ λΆ„λ¦¬ν•˜κ³  λ§ˆμ΄κ·Έλ ˆμ΄μ…˜ν•  것인가? [6, 10] - 이벀트 μ†Œμ‹±(Event Sourcing) μ•„ν‚€ν…μ²˜ νŒ¨ν„΄μ„ ꡬ좕할 λ•Œ DDD 전문성이 결여될 경우 λ°œμƒν•˜λŠ” 치λͺ…적인 λ¬Έμ œμ μ€ 무엇이며, μ–΄λ–»κ²Œ 극볡할 수 μžˆλŠ”κ°€? [9] - μ• μžμΌν•˜κ³  λΉ λ₯Έ 개발이 ν•„μš”ν•œ μŠ€νƒ€νŠΈμ—… ν™˜κ²½(MVP)μ—μ„œ DDD의 높은 ν•™μŠ΅ 곑선과 초기 섀계 λΉ„μš©μ„ μ΅œμ†Œν™”ν•˜λ©° μ μ§„μ μœΌλ‘œ μ μš©ν•˜λŠ” λ°©μ•ˆμ€ 무엇인가? [8] - ν—₯사고날 μ•„ν‚€ν…μ²˜μ˜ 포트 및 μ–΄λŒ‘ν„° 섀계가 DDD의 λΉ„μ¦ˆλ‹ˆμŠ€ μ—”ν‹°ν‹° λͺ¨λΈλ§κ³Ό κ²°ν•©ν•  λ•Œ, μ‹œμŠ€ν…œμ˜ ν…ŒμŠ€νŠΈ μš©μ΄μ„±μ€ ꡬ체적으둜 μ–΄λ–»κ²Œ ν–₯μƒλ˜λŠ”κ°€? [1, 11] ### Practical Application Contexts - **Implementation:** μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 개발 μ‹œ, λΉ„μ¦ˆλ‹ˆμŠ€ κ·œμΉ™κ³Ό λ‘œμ§μ„ DDD의 μ• κ·Έλ¦¬κ²Œμ΄νŠΈ(Aggregates) λͺ¨λΈλ‘œ μΊ‘μŠν™”ν•˜μ—¬ κ΅¬ν˜„ν•¨μœΌλ‘œμ¨, λΉ„μ¦ˆλ‹ˆμŠ€ 둜직의 무결성을 높일 수 μžˆλ‹€ [4]. - **System Design:** κ±°λŒ€ν•œ λͺ¨λ†€λ¦¬μ‹ μ‹œμŠ€ν…œμ„ λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€λ‘œ λΆ„ν•΄ν•˜κ±°λ‚˜, μ²˜μŒλΆ€ν„° λͺ¨λ“ˆν˜• λͺ¨λ†€λ¦¬μŠ€λ₯Ό 섀계할 λ•Œ, μ„œλΉ„μŠ€μ˜ 도메인 경계와 단일 μ±…μž„μ„ μ •μ˜ν•˜λŠ” μ•„ν‚€ν…μ²˜ 섀계 κΈ°μ€€μœΌλ‘œ ν™œμš©λœλ‹€ [2, 3, 6]. - **Operation / Maintenance:** λΉ„μ¦ˆλ‹ˆμŠ€ 도메인 λ‹¨μœ„λ‘œ μ‹œμŠ€ν…œμ΄ 잘 λΆ„ν• λ˜λ©΄, ν•œ λͺ¨λ“ˆμ˜ 변경이 λ‹€λ₯Έ λͺ¨λ“ˆμ— λ―ΈμΉ˜λŠ” 영ν–₯을 μ΅œμ†Œν™”ν•  수 μžˆμ–΄ μž₯기적으둜 μœ μ§€λ³΄μˆ˜ λΉ„μš©μ„ 쀄이고 μ½”λ“œ ν’ˆμ§ˆμ„ λ³΄ν˜Έν•  수 μžˆλ‹€ [3, 6]. - **Learning Path:** λ ˆμ΄μ–΄λ“œ μ•„ν‚€ν…μ²˜μ—μ„œ μ§„ν™”ν•˜μ—¬ ν—₯μ‚¬κ³ λ‚ μ΄λ‚˜ 클린 μ•„ν‚€ν…μ²˜λ₯Ό 싀무에 λ„μž…ν•˜κΈ° μœ„ν•΄ νŒ€μ›λ“€μ΄ 사전에 λ°˜λ“œμ‹œ ν•™μŠ΅ν•΄μ•Ό ν•˜λŠ” 좔상화 및 λΉ„μ¦ˆλ‹ˆμŠ€ λͺ¨λΈλ§ 기법이닀 [1, 8]. - **My Project Relevance:** ν˜„μž¬ νŒ€μ˜ 규λͺ¨, 개발자의 μ „λ¬Έμ„±, ν”„λ‘œμ νŠΈμ˜ λ³΅μž‘λ„λ₯Ό κ³ λ €ν•˜μ—¬ μ΄ˆκΈ°μ—λŠ” λͺ¨λ“ˆν˜• λͺ¨λ†€λ¦¬μŠ€ 기반의 DDDλ₯Ό μ μš©ν•˜κ³  μ‹œμŠ€ν…œμ΄ μ„±μž₯함에 따라 μ μ§„μ μœΌλ‘œ λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€λ‘œ λΆ„λ¦¬ν•˜λŠ” λ‘œλ“œλ§΅μ„ ꡬ좕할 수 μžˆλ‹€ [6, 8, 10]. ### Adjacent Topics - [[Event Sourcing]] - ν™•μž₯ λ°©ν–₯: λͺ¨λ“  λ°μ΄ν„°μ˜ μƒνƒœ 변경을 일련의 이벀트 둜그둜 μ €μž₯ν•˜λŠ” 이 νŒ¨ν„΄μ΄ DDD의 μ• κ·Έλ¦¬κ²Œμ΄νŠΈ μƒνƒœ 변경을 κ΄€λ¦¬ν•˜λŠ” 방식과 μ–΄λ–»κ²Œ κ²°ν•©λ˜λŠ”μ§€ 뢄석할 수 μžˆλ‹€ [9, 12]. - [[Clean Architecture]] - ν™•μž₯ λ°©ν–₯: 도메인 μ—”ν‹°ν‹°(Entities)와 μœ μŠ€μΌ€μ΄μŠ€(Use Cases)λ₯Ό μ™ΈλΆ€ ν”„λ ˆμž„μ›Œν¬λ‚˜ λ“œλΌμ΄λ²„λ‘œλΆ€ν„° λ³΄ν˜Έν•˜λŠ” 계측적 ꡬ쑰가 DDD의 철학을 μ–΄λ–»κ²Œ λ’·λ°›μΉ¨ν•˜λŠ”μ§€ μ—°κ΅¬ν•œλ‹€ [13, 14]. --- *Last updated: 2026-05-02*