--- id: P-REINFORCE-WIKI-E5D26B38 category: "10_Wiki/πŸ’‘ Topics/02_Architecture_Principles" confidence_score: 0.95 tags: ['domain-driven-design-(ddd)', 'microservices-architecture', 'hexagonal-architecture', 'modular-monolith', 'event-sourcing-pattern', 'architecture-principles'] last_reinforced: 2026-05-02 --- # [[Domain-Driven Design (DDD)]] ## πŸ“Œ Brief Summary **도메인 주도 섀계(DDD)**λŠ” λΉ„μ¦ˆλ‹ˆμŠ€ μ—­λŸ‰κ³Ό 도메인 경계λ₯Ό μ€‘μ‹¬μœΌλ‘œ μ†Œν”„νŠΈμ›¨μ–΄μ˜ ꡬ성과 μ±…μž„μ„ μ‹λ³„ν•˜λ„λ‘ λ•λŠ” 섀계 원칙 및 관행이닀 [1, 2]. 주둜 λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€ μ•„ν‚€ν…μ²˜(MSA), ν—₯사고날 μ•„ν‚€ν…μ²˜, λͺ¨λ“ˆν˜• λͺ¨λ†€λ¦¬μŠ€ λ“±κ³Ό κ²°ν•©ν•˜μ—¬ λΉ„μ¦ˆλ‹ˆμŠ€ 둜직의 경계λ₯Ό λͺ…ν™•νžˆ ν•˜κ³  μ‹œμŠ€ν…œμ˜ λͺ¨λ“ˆμ„±μ„ λ†’μ΄λŠ” 데 ν™œμš©λœλ‹€ [3, 4]. 전체적인 원리에 λŒ€ν•΄ μ†ŒμŠ€μ— κ΄€λ ¨ 정보가 λΆ€μ‘±ν•˜μ§€λ§Œ, 주둜 λ³΅μž‘ν•œ μ‹œμŠ€ν…œμ˜ μ±…μž„ 뢄리 κΈ°μ€€μœΌλ‘œ μž‘μš©ν•œλ‹€ [1]. ## πŸ“– Core Content 도메인 주도 섀계(DDD)에 λŒ€ν•œ ꡬ체적인 λ°©λ²•λ‘ μ΄λ‚˜ 전체 ꡬ성 μš”μ†Œμ— λŒ€ν•œ 상세 μ„€λͺ…은 **μ†ŒμŠ€μ— κ΄€λ ¨ 정보가 λΆ€μ‘±ν•©λ‹ˆλ‹€.** 제곡된 μ†ŒμŠ€μ—μ„œ 확인 κ°€λŠ₯ν•œ DDD의 핡심 μ—­ν• κ³Ό νŠΉμ§•μ€ λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€: * **도메인 경계 식별과 단일 μ±…μž„:** DDDλŠ” μ‹œμŠ€ν…œ λ‚΄μ—μ„œ 각 μ„œλΉ„μŠ€κ°€ 단일 μ±…μž„μ„ 갖도둝 **도메인 경계(Domain boundaries)λ₯Ό 식별**ν•˜λŠ” κ°€μ΄λ“œλΌμΈ 역할을 ν•©λ‹ˆλ‹€ [1]. * **λΉ„μ¦ˆλ‹ˆμŠ€ μ—”ν‹°ν‹° μ •μ˜:** DDDλŠ” λΉ„μ¦ˆλ‹ˆμŠ€ λ‘œμ§μ„ κ΅¬ν˜„ν•  λ•Œ, λΉ„μ¦ˆλ‹ˆμŠ€ κ·œμΉ™μ„ μ‹€ν–‰ν•˜λŠ” **λΉ„μ¦ˆλ‹ˆμŠ€ μ—”ν‹°ν‹°(DDD μ• κ·Έλ¦¬κ±°νŠΈ, aggregates)**λ₯Ό 기반으둜 κ΅¬μ„±ν•©λ‹ˆλ‹€ [5]. * **μ•„ν‚€ν…μ²˜ νŒ¨ν„΄κ³Όμ˜ 높은 ν˜Έν™˜μ„±:** * **λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€ μ•„ν‚€ν…μ²˜(MSA):** λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€λŠ” λΉ„μ¦ˆλ‹ˆμŠ€ μ—­λŸ‰μ„ μ€‘μ‹¬μœΌλ‘œ μ‘°μ§λ˜μ–΄μ•Ό ν•˜λ©°, μ΄λŠ” DDD 원칙과 λ§₯을 같이 ν•©λ‹ˆλ‹€ [2]. * **ν—₯사고날 μ•„ν‚€ν…μ²˜(Hexagonal Architecture):** λͺ…ν™•ν•œ μ‹œμŠ€ν…œ 경계λ₯Ό μ΄‰μ§„ν•˜λ©° DDD 원칙과 맀우 잘 λΆ€ν•©ν•©λ‹ˆλ‹€ [3]. * **λͺ¨λ“ˆν˜• λͺ¨λ†€λ¦¬μŠ€(Modular Monolith):** λ„€νŠΈμ›Œν¬λ₯Ό 톡해 λΆ„μ‚°λœ μ„œλΉ„μŠ€λ₯Ό κ΅¬μΆ•ν•˜μ§€ μ•Šλ”λΌλ„, 단일 μ• ν”Œλ¦¬μΌ€μ΄μ…˜ λ‚΄μ—μ„œ DDD 원칙을 κΉ”λ”ν•˜κ²Œ μ μš©ν•˜μ—¬ λΉ„μ¦ˆλ‹ˆμŠ€ 둜직의 경계λ₯Ό κ°•μ œν•  수 μžˆμŠ΅λ‹ˆλ‹€ [4]. ## βš–οΈ Trade-offs & Caveats * **높은 μ „λ¬Έμ„± μš”κ΅¬:** DDDλŠ” μ‹œμŠ€ν…œ 섀계에 μžˆμ–΄ 높은 μˆ˜μ€€μ˜ 전문성을 μš”κ΅¬ν•©λ‹ˆλ‹€. **DDD 전문성이 λΆ€μ‘±ν•œ νŒ€μ˜ 경우, 이벀트 μ†Œμ‹±(Event Sourcing)κ³Ό 같은 λ³΅μž‘ν•œ μ•„ν‚€ν…μ²˜ νŒ¨ν„΄μ˜ λ„μž…μ„ ν”Όν•΄μ•Ό ν•©λ‹ˆλ‹€** [6]. * **κ°€νŒŒλ₯Έ ν•™μŠ΅ 곑선(Learning Curve):** DDDλŠ” 클린 μ•„ν‚€ν…μ²˜(Clean Architecture) 등을 κ΅¬ν˜„ν•  λ•Œ **μ†Œκ·œλͺ¨ νŒ€μ΄λ‚˜ 초보 νŒ€μ΄ λ‹€λ£¨κΈ°μ—λŠ” ν•™μŠ΅ 곑선이 κ°€νŒ”λΌ 어렀움을 κ²ͺ을 수 μžˆλŠ” μ œμ•½**이 μžˆμŠ΅λ‹ˆλ‹€ [7]. * *(κ·Έ μ™Έ ꡬ체적인 μ΅œμ ν™” λΆ€μž‘μš©μ΄λ‚˜ 좔가적인 기술적 μ œμ•½ 사항은 μ†ŒμŠ€μ— κ΄€λ ¨ 정보가 λΆ€μ‘±ν•©λ‹ˆλ‹€.)* ## πŸ”— Knowledge Connections ### Related Concepts #### [관계 μœ ν˜• A: μ•„ν‚€ν…μ²˜/기반 기술] * [[Microservices Architecture]] * μ—°κ²° 이유: λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€ μ•„ν‚€ν…μ²˜μ—μ„œ μ„œλΉ„μŠ€λ₯Ό λΆ„ν• ν•  λ•Œ λΉ„μ¦ˆλ‹ˆμŠ€ μ—­λŸ‰μ„ μ€‘μ‹¬μœΌλ‘œ μ‘°μ§ν•˜κ²Œ 되며, 이 κ³Όμ •μ—μ„œ 단일 μ±…μž„μ„ λͺ…ν™•νžˆ ν•˜κΈ° μœ„ν•΄ DDD의 도메인 경계 식별 κ°œλ…μ΄ ν•„μˆ˜λ‘œ μ‚¬μš©λ¨ [1, 2]. * 이 κ°œλ…μ„ 톡해 더 깊게 이해할 수 μžˆλŠ” λΆ€λΆ„: 이둠적인 도메인 경계가 μ‹€μ œ λ…λ¦½μ μœΌλ‘œ 배포 κ°€λŠ₯ν•œ λΆ„μ‚° μ„œλΉ„μŠ€ λ‹¨μœ„λ‘œ μ–΄λ–»κ²Œ λ§€ν•‘λ˜λŠ”μ§€ νŒŒμ•…ν•  수 있음. * [[Hexagonal Architecture]] * μ—°κ²° 이유: λΉ„μ¦ˆλ‹ˆμŠ€ λ‘œμ§μ„ μ™ΈλΆ€ 기술과 κ²©λ¦¬ν•˜κ³  λŠμŠ¨ν•œ 결합을 λ§Œλ“œλŠ” ν—₯사고날 μ•„ν‚€ν…μ²˜μ˜ 철학이 λͺ…ν™•ν•œ 경계λ₯Ό μ§€ν–₯ν•˜λŠ” DDD 원칙과 ꡬ쑰적으둜 잘 뢀합함 [3]. * 이 κ°œλ…μ„ 톡해 더 깊게 이해할 수 μžˆλŠ” λΆ€λΆ„: DDD둜 μ„€κ³„λœ λΉ„μ¦ˆλ‹ˆμŠ€ 핡심 λ‘œμ§μ„ μ™ΈλΆ€ ν¬νŠΈμ™€ μ–΄λŒ‘ν„°λ‘œλΆ€ν„° μ–΄λ–»κ²Œ μ•ˆμ „ν•˜κ²Œ λ³΄ν˜Έν•  수 μžˆλŠ”μ§€ 이해할 수 있음. * [[Modular Monolith]] * μ—°κ²° 이유: μ„œλΉ„μŠ€λ₯Ό λ„€νŠΈμ›Œν¬ λ‹¨μœ„λ‘œ λΆ„ν• ν•˜μ§€ μ•Šκ³ λ„, λͺ¨λ“ˆν˜• λͺ¨λ†€λ¦¬μŠ€ λ‚΄μ—μ„œ DDD 원칙을 ν™œμš©ν•˜μ—¬ λͺ¨λ“ˆ κ°„μ˜ λΉ„μ¦ˆλ‹ˆμŠ€ 둜직 경계λ₯Ό μ—„κ²©ν•˜κ²Œ μœ μ§€ν•  수 있음 [4]. * 이 κ°œλ…μ„ 톡해 더 깊게 이해할 수 μžˆλŠ” λΆ€λΆ„: λΆ„μ‚° μ‹œμŠ€ν…œμ˜ λ³΅μž‘μ„± 없이 단일 μ½”λ“œλ² μ΄μŠ€μ—μ„œ 도메인 주도 μ„€κ³„μ˜ 이점을 λˆ„λ¦¬λŠ” 방법을 배울 수 있음. ### Deeper Research Questions * DDD의 핡심 ꡬ성 μš”μ†ŒμΈ 'DDD μ• κ·Έλ¦¬κ±°νŠΈ(Aggregates)'λŠ” μ‹œμŠ€ν…œμ˜ λΉ„μ¦ˆλ‹ˆμŠ€ κ·œμΉ™κ³Ό λ°μ΄ν„°μ˜ 일관성을 μ–΄λ–»κ²Œ μΊ‘μŠν™”ν•˜κ³  κ΄€λ¦¬ν•˜λŠ”κ°€? * 이벀트 μ†Œμ‹±(Event Sourcing) νŒ¨ν„΄μ„ κ΅¬ν˜„ν•  λ•Œ, DDD 전문성이 νŒ€ 내에 λ°˜λ“œμ‹œ μš”κ΅¬λ˜λŠ” μ•„ν‚€ν…μ²˜μ  및 논리적 μ΄μœ λŠ” 무엇인가? * λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€ μ•„ν‚€ν…μ²˜μ—μ„œ μ„œλΉ„μŠ€κ°€ λ„ˆλ¬΄ μ„Έλ°€ν•΄μ§€κ±°λ‚˜ λ°©λŒ€ν•΄μ§€λŠ” 것을 막기 μœ„ν•΄ DDD의 도메인 경계 식별 원칙을 μ–΄λ–»κ²Œ μ •λŸ‰μ /μ •μ„±μ μœΌλ‘œ μ μš©ν•  수 μžˆλŠ”κ°€? * λͺ¨λ“ˆν˜• λͺ¨λ†€λ¦¬μŠ€ κ΅¬μ‘°μ—μ„œ λ„€νŠΈμ›Œν¬ 뢄리 없이 DDD μ›μΉ™μœΌλ‘œ λΉ„μ¦ˆλ‹ˆμŠ€ 둜직의 경계λ₯Ό κ°•μ œν•  λ•Œ, 기술적 μ˜μ‘΄μ„± λˆ„μˆ˜λ₯Ό 막기 μœ„ν•œ ꡬ체적인 방법은 무엇인가? * κ°€νŒŒλ₯Έ ν•™μŠ΅ 곑선을 κ°€μ§„ DDDλ₯Ό 클린 μ•„ν‚€ν…μ²˜λ‚˜ MSA ν™˜κ²½μ˜ 신생 개발 νŒ€μ— λ„μž…ν•  λ•Œ, λΉ„μš© λŒ€λΉ„ 효과λ₯Ό κ·ΉλŒ€ν™”ν•  수 μžˆλŠ” 점진적 λ„μž… μ „λž΅μ€ 무엇인가? ### Practical Application Contexts * **Implementation:** λΉ„μ¦ˆλ‹ˆμŠ€ κ·œμΉ™κ³Ό 핡심 λ‘œμ§μ„ μΊ‘μŠν™”ν•˜κΈ° μœ„ν•΄ μ½”λ“œ λ ˆλ²¨μ—μ„œ 'DDD μ• κ·Έλ¦¬κ±°νŠΈ(aggregates)'와 같은 λΉ„μ¦ˆλ‹ˆμŠ€ μ—”ν‹°ν‹°λ₯Ό κ΅¬ν˜„ν•˜λŠ” 데 적용됨 [5]. * **System Design:** λ³΅μž‘ν•œ μ‹œμŠ€ν…œμ„ MSAλ‚˜ λͺ¨λ“ˆν˜• λͺ¨λ†€λ¦¬μŠ€λ‘œ 섀계할 λ•Œ, μ„œλΉ„μŠ€ κ°„ 톡신과 독립성을 보μž₯ν•˜κΈ° μœ„ν•΄ λΉ„μ¦ˆλ‹ˆμŠ€ μ—­λŸ‰ μ€‘μ‹¬μœΌλ‘œ 도메인 경계λ₯Ό μ •μ˜ν•˜λŠ” 데 ν™œμš©λ¨ [1, 2, 4]. * **Operation / Maintenance:** (운영 및 μœ μ§€λ³΄μˆ˜μ— DDDκ°€ μ§μ ‘μ μœΌλ‘œ λ―ΈμΉ˜λŠ” μ„ΈλΆ€ 지침은 μ†ŒμŠ€μ— κ΄€λ ¨ 정보가 λΆ€μ‘±ν•©λ‹ˆλ‹€.) * **Learning Path:** 클린 μ•„ν‚€ν…μ²˜λ‚˜ 이벀트 μ†Œμ‹± νŒ¨ν„΄μ„ 싀무에 λ„μž…ν•˜κΈ° μ „, νŒ€μ›λ“€μ΄ ν•„μˆ˜μ μœΌλ‘œ 거쳐야 ν•  ν•™μŠ΅ κ³Όμ •μœΌλ‘œ DDD의 κ°œλ… 및 도메인 λͺ¨λΈλ§ μˆ™μ§€κ°€ ν•„μš”ν•¨ [6, 7]. * **My Project Relevance:** λ³΅μž‘ν•œ λΉ„μ¦ˆλ‹ˆμŠ€ μš”κ΅¬μ‚¬ν•­μ„ κ°€μ§„ ν”„λ‘œμ νŠΈμ˜ μ•„ν‚€ν…μ²˜λ₯Ό κ²°μ •ν•  λ•Œ, 개발 νŒ€μ˜ μˆ™λ ¨λ„(DDD 이해도)λ₯Ό λ¨Όμ € ν‰κ°€ν•˜μ—¬ λͺ¨λ†€λ¦¬μ‹μœΌλ‘œ μ‹œμž‘ν• μ§€ λΆ„μ‚° μ•„ν‚€ν…μ²˜λ‘œ μ§„ν–‰ν• μ§€ κ²°μ •ν•˜λŠ” κΈ°μ€€μœΌλ‘œ 삼을 수 있음. ### Adjacent Topics * [[Event Sourcing Pattern]] * ν™•μž₯ λ°©ν–₯: 데이터λ₯Ό ν˜„μž¬ μƒνƒœκ°€ μ•„λ‹Œ 이벀트의 μ—°μ†λœ 슀트림으둜 μ €μž₯ν•˜λŠ” κΈ°λ²•μœΌλ‘œ, DDD 전문성이 μš”κ΅¬λ˜λŠ” 만큼 두 νŒ¨ν„΄ κ°„μ˜ 데이터 일관성 및 좔적 λ§€μ»€λ‹ˆμ¦˜ μ‹œλ„ˆμ§€ 쑰사. * [[Clean Architecture]] * ν™•μž₯ λ°©ν–₯: λΉ„μ¦ˆλ‹ˆμŠ€ λ‘œμ§μ„ 쀑앙에 두고 μ˜μ‘΄μ„±μ„ μ—­μ „μ‹œν‚€λŠ” μ•„ν‚€ν…μ²˜λ‘œ, 초보 νŒ€μ΄ DDD와 κ²°ν•© μ‹œ κ²ͺλŠ” ν•™μŠ΅ ν•œκ³„μ™€ 이λ₯Ό ν•΄κ²°ν•˜λŠ” 싀무적 μ½”λ“œ ꡬ성 방법 탐ꡬ. --- *Last updated: 2026-05-02*