--- id: [[P-Reinforce]]-AUTO-F2DA4C category: "10_Wiki/πŸ’‘ Topics/Programming & Language" confidence_score: 0.90 tags: [auto-reinforced] last_reinforced: 2026-04-20 github_commit: "[P-Reinforce] Continuous Worker - 도메인 기반 섀계 (DDD)" --- # [[도메인 기반 섀계 (DDD)]] ## πŸ“Œ ν•œ 쀄 톡찰 (The Karpathy Summary) > 도메인 기반 섀계(DDD)λŠ” λΉ„μ¦ˆλ‹ˆμŠ€ 도메인에 맞좰 μ†Œν”„νŠΈμ›¨μ–΄λ₯Ό λͺ¨λΈλ§ν•˜λŠ” 섀계 μ ‘κ·Όλ²•μœΌλ‘œ, TypeScript의 νƒ€μž… μ‹œμŠ€ν…œμ—μ„œλŠ” 의미적으둜 λ‹€λ₯Έ 데이터λ₯Ό μ—„κ²©ν•˜κ²Œ λΆ„λ¦¬ν•˜μ—¬ μ‹œμŠ€ν…œμ˜ 무결성을 λ³΄ν˜Έν•˜λŠ” 데 ν™œμš©λ©λ‹ˆλ‹€ [1]. 특히 λΈŒλžœλ””λ“œ νƒ€μž…(Branded Types)κ³Ό λΆˆλ³€μ„±(Immutability)을 톡해 도메인 λͺ¨λΈ λ‚΄μ—μ„œ 데이터가 λ¬΄λΆ„λ³„ν•˜κ²Œ μ„žμ΄κ±°λ‚˜ μ˜€μ—Όλ˜λŠ” 것을 λ°©μ§€ν•˜μ—¬ 예츑 κ°€λŠ₯성을 κ·ΉλŒ€ν™”ν•©λ‹ˆλ‹€ [1-3]. ## πŸ“– κ΅¬μ‘°ν™”λœ 지식 (Synthesized Content) * **λΈŒλžœλ””λ“œ νƒ€μž…(Branded Types)의 ν™œμš©:** 도메인 기반 μ„€κ³„μ—μ„œλŠ” κΈ°λ³Έ νƒ€μž…(Primitive Type)μ—λ§Œ μ˜μ‘΄ν•˜λŠ” 문제λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄ λΈŒλžœλ””λ“œ νƒ€μž…μ„ 적극 ν™œμš©ν•©λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, ꡬ쑰적으둜 λ™μΌν•œ `string` νƒ€μž…μ΄λ”λΌλ„ `UserId`와 `OrderId`λ₯Ό μ—„κ²©νžˆ λΆ„λ¦¬ν•¨μœΌλ‘œμ¨ 도메인 데이터가 μ„œλ‘œ μ„žμ΄λŠ” 것을 λ°©μ§€ν•  수 μžˆμŠ΅λ‹ˆλ‹€ [1, 2, 4, 5]. * **데이터 μ˜€μ—Ό 방지와 신뢄증 μ‹œμŠ€ν…œ:** DDD κ΅¬μ‘°μ—μ„œ νƒ€μž… μ‹œμŠ€ν…œμ€ μ™ΈλΆ€μ˜ λΆˆμ•ˆμ •ν•œ λ°μ΄ν„°λ‘œλΆ€ν„° λ‚΄λΆ€ λ‘œμ§μ„ λ³΄ν˜Έν•˜λŠ” 역할을 ν•©λ‹ˆλ‹€. κ²€μ¦λœ 데이터(예: `SanitizedString`)만이 μ‹œμŠ€ν…œμ˜ λ‚΄λΆ€ 둜직으둜 μ§„μž…ν•˜λ„λ‘ κ°•μ œν•  수 있으며, μ΄λŠ” 마치 μ™ΈλΆ€ μΉ¨μž…μœΌλ‘œλΆ€ν„° 성채λ₯Ό λ³΄ν˜Έν•˜λŠ” "신뢄증 μ‹œμŠ€ν…œ"κ³Ό 같이 μž‘λ™ν•©λ‹ˆλ‹€ [1, 2]. * **도메인 λͺ¨λΈμ˜ λΆˆλ³€μ„±(Immutability) 확립:** 도메인 λͺ¨λΈμ΄λ‚˜ μ—”ν‹°ν‹° 클래슀λ₯Ό κ΅¬ν˜„ν•  λ•Œ λ°μ΄ν„°μ˜ 무결성을 μœ μ§€ν•˜λŠ” 것은 맀우 μ€‘μš”ν•©λ‹ˆλ‹€. `[[readonly]]` μˆ˜μ‹μ–΄λ₯Ό μ‚¬μš©ν•˜μ—¬ λΆˆλ³€μ μΈ μ‹λ³„μž 속성([[identity]] properties)κ³Ό λ³€κ²½ κ°€λŠ₯ν•œ μƒνƒœ(Mutable [[State]])λ₯Ό λͺ…ν™•ν•˜κ²Œ κ΅¬λΆ„ν•¨μœΌλ‘œμ¨ λ°μ΄ν„°μ˜ 신뒰성을 보μž₯ν•  수 μžˆμŠ΅λ‹ˆλ‹€ [3]. * **도메인 μ—λŸ¬(Domain Error) 처리:** 도메인 둜직 λ‚΄μ—μ„œ 예기치 μ•Šμ€ μƒνƒœλ‚˜ μœ νš¨ν•˜μ§€ μ•Šμ€ 데이터가 λ°œμƒν•  경우, 도메인 μ˜ˆμ™Έ(DomainException)λ₯Ό λ˜μ§€κ³  미듀웨어가 이λ₯Ό μ „μ—­μ μœΌλ‘œ μ²˜λ¦¬ν•˜κ²Œ ν•¨μœΌλ‘œμ¨ λΉ„μ¦ˆλ‹ˆμŠ€ 흐름을 μ œμ–΄ν•˜λŠ” λ³΅μž‘ν•œ μ—λŸ¬ 체크 λ‘œμ§μ„ 쀄일 수 μžˆμŠ΅λ‹ˆλ‹€ [6, 7]. λ‹€λ§Œ, λ„λ©”μΈμ˜ 관심사 뢄리([[Separation of Concerns]])λ₯Ό μ§€ν‚€μ§€ μ•Šμ€ μ„£λΆ€λ₯Έ μΆ”μƒν™”λŠ” μ‹œμŠ€ν…œ μ½”λ“œλ₯Ό λΉ„λŒ€ν•˜κ²Œ λ§Œλ“€κ³  관리λ₯Ό μ–΄λ ΅κ²Œ ν•  수 μžˆμœΌλ―€λ‘œ μ£Όμ˜ν•΄μ•Ό ν•©λ‹ˆλ‹€ [8]. ## ⚠️ λͺ¨μˆœ 및 μ—…λ°μ΄νŠΈ (Contradictions & RL Update) - **κ³Όκ±° λ°μ΄ν„°μ™€μ˜ 좩돌:** μžλ™ν™” 엔진에 μ˜ν•΄ λ§€ν•‘λœ μ§€μ‹μœΌλ‘œ, μΆ”ν›„ μ •λ°€ 검증 ν•„μš”. - **μ •μ±… λ³€ν™”:** Programming & Language λΆ„μ•Όμ˜ μžλ™ μžμ‚°ν™” μˆ˜ν–‰. ## πŸ”— 지식 μ—°κ²° (Graph) - **Related Topics:** [[λΈŒλžœλ””λ“œ νƒ€μž… (Branded Types)]], [[λΆˆλ³€μ„± (Immutability)]], ꡬ쑰적 타이핑 ([[Structural Typing]]) - **Projects/Contexts:** [[TypeScript νƒ€μž… μ‹œμŠ€ν…œμ„ ν™œμš©ν•œ λ‚΄λΆ€ 둜직 보호 및 데이터 검증]] - **Contradictions/Notes:** μ˜ˆμ™Έ(Exception) μ²˜λ¦¬μ— λŒ€ν•΄, 도메인 λΉ„μ¦ˆλ‹ˆμŠ€ 흐름을 λ‹¨μˆœνžˆ μ œμ–΄ν•  λͺ©μ (if-elseλ₯Ό λŒ€μ²΄ν•˜λŠ” μš©λ„)으둜 μ˜ˆμ™Έλ₯Ό λ‚¨μš©ν•˜λŠ” 것은 μ§€μ–‘ν•΄μ•Ό ν•˜μ§€λ§Œ, 예기치 μ•Šμ€ μƒν™©μ΄λ‚˜ 검증 μ‹€νŒ¨ μ‹œ 도메인 μ—λŸ¬λ₯Ό λ°œμƒμ‹œν‚€κ³  이λ₯Ό μ „μ—­ λ―Έλ“€μ›¨μ–΄μ—μ„œ μ²˜λ¦¬ν•˜λ„λ‘ μœ„μž„ν•˜λŠ” 방어적 ν”„λ‘œκ·Έλž˜λ° νŒ¨ν„΄μ€ μ μ ˆν•œ μˆ˜λΉ„ μ „λž΅μœΌλ‘œ ꢌμž₯λ©λ‹ˆλ‹€ [6, 7]. --- *Last updated: 2026-04-18* ---