--- id: [[P-Reinforce|P-Reinforce]]-AUTO-9B5D9F 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) 맟 데아ᄐα…₯ α„‹α…©α„‹α…§α†· α„‡α…‘α†Όα„Œα…΅|도메인 기반 섀계 (DDD) 및 데이터 μ˜€μ—Ό λ°©μ§€]] ## πŸ“Œ ν•œ 쀄 톡찰 (The Karpathy Summary) > 도메인 기반 섀계(DDD)μ—μ„œ 데이터 μ˜€μ—Ό λ°©μ§€λŠ” TypeScript의 ꡬ쑰적 타이핑 ν•œκ³„λ‘œ 인해 λ°œμƒν•˜λŠ” 'κΈ°λ³Έ νƒ€μž…μ—μ˜ μ§‘μ°©(Primitive Obsession)' 문제λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•œ ν•„μˆ˜μ μΈ λ°©μ–΄ κΈ°μ œμž…λ‹ˆλ‹€ [1]. λΈŒλžœλ””λ“œ νƒ€μž…(Branded Types) λ˜λŠ” 뢈투λͺ… νƒ€μž…(Opaque Types)을 ν™œμš©ν•΄ ꡬ쑰가 λ™μΌν•œ κΈ°λ³Έ νƒ€μž… 데이터에 κ³ μœ ν•œ κ°€μƒμ˜ μ‹λ³„μžλ₯Ό λΆ€μ—¬ν•˜μ—¬ μ˜λ―Έκ°€ λ‹€λ₯Έ 데이터λ₯Ό μ—„κ²©ν•˜κ²Œ λΆ„λ¦¬ν•©λ‹ˆλ‹€ [1]. 이λ₯Ό 톡해 였직 사전에 κ²€μ¦λœ μ•ˆμ „ν•œ λ°μ΄ν„°λ§Œμ΄ μ‹œμŠ€ν…œμ˜ 핡심 λΉ„μ¦ˆλ‹ˆμŠ€ 둜직으둜 μ§„μž…ν•˜λ„λ‘ κ°•μ œν•˜μ—¬ 데이터가 μ„žμ΄κ±°λ‚˜ μ˜€μ—Όλ˜λŠ” 것을 μ›μ²œ μ°¨λ‹¨ν•©λ‹ˆλ‹€ [2]. ## πŸ“– κ΅¬μ‘°ν™”λœ 지식 (Synthesized Content) * **ꡬ쑰적 νƒ€μ΄ν•‘μ˜ ν•œκ³„μ™€ 데이터 μ˜€μ—Όμ˜ μœ„ν—˜μ„±:** TypeScript의 ꡬ쑰적 타이핑은 맀우 μœ μ—°ν•˜μ§€λ§Œ, 이메일 μ£Όμ†Œμ™€ μ‚¬μš©μž 이름이 λͺ¨λ‘ `string` νƒ€μž…μœΌλ‘œ μ²˜λ¦¬λ˜λŠ” κ²ƒμ²˜λŸΌ 의미적으둜 λ‹€λ₯Έ 데이터λ₯Ό κ΅¬λ³„ν•˜μ§€ λͺ»ν•˜λŠ” "κΈ°λ³Έ νƒ€μž…μ—μ˜ μ§‘μ°©(Primitive Obsession)" 문제λ₯Ό μ•ΌκΈ°ν•©λ‹ˆλ‹€ [1]. μ»΄νŒŒμΌλŸ¬κ°€ 이λ₯Ό 막지 λͺ»ν•˜κΈ° λ•Œλ¬Έμ— 잘λͺ»λœ μ‹λ³„μžλ‚˜ 데이터가 μ „λ‹¬λ˜λŠ” μ‹€μˆ˜κ°€ λ°œμƒν•  수 있으며, μ΄λŠ” μ‹œμŠ€ν…œμ˜ 데이터 μ˜€μ—ΌμœΌλ‘œ μ΄μ–΄μ§‘λ‹ˆλ‹€ [1]. * **λΈŒλžœλ””λ“œ νƒ€μž…(Branded Types)을 ν†΅ν•œ 방어막 ꡬ좕:** 데이터 μ˜€μ—Όμ„ 막기 μœ„ν•΄ λŸ°νƒ€μž„μ—λŠ” μ‘΄μž¬ν•˜μ§€ μ•Šμ§€λ§Œ 컴파일 μ‹œμ μ—λ§Œ μ‘΄μž¬ν•˜λŠ” κ³ μœ ν•œ 속성(예: `__brand`)을 ꡐ집합 νƒ€μž…μœΌλ‘œ λΆ€μ—¬ν•˜λŠ” λΈŒλžœλ””λ“œ νƒ€μž…μ„ μ‚¬μš©ν•©λ‹ˆλ‹€ [1]. μ΄λŠ” λͺ…λͺ©μ  타이핑을 λͺ¨λ°©ν•˜λŠ” κΈ°λ²•μœΌλ‘œ, μ™ΈλΆ€ μΉ¨μž…μ΄λ‚˜ 잘λͺ»λœ 데이터 μœ μž…μœΌλ‘œλΆ€ν„° 성채λ₯Ό λ³΄ν˜Έν•˜λŠ” μΌμ’…μ˜ "신뢄증 μ‹œμŠ€ν…œ" 역할을 μˆ˜ν–‰ν•©λ‹ˆλ‹€ [1, 2]. * **도메인 μ—”ν‹°ν‹° μ‹λ³„μžμ˜ μ—„κ²©ν•œ 뢄리:** 도메인 기반 섀계(DDD)μ—μ„œλŠ” `UserId`와 `OrderId`처럼 본질적으둜 ꡬ쑰가 같은 νƒ€μž…λ“€μ„ λΈŒλžœλ””λ“œ νƒ€μž…μœΌλ‘œ μ—„κ²©νžˆ λΆ„λ¦¬ν•©λ‹ˆλ‹€ [2]. μ΄λ ‡κ²Œ ν•˜λ©΄ 두 μ‹λ³„μž 간에 데이터가 μ‹€μˆ˜λ‘œ μ„žμ΄λŠ” 것을 λ°©μ§€ν•  수 있으며, μ•…μ˜μ μ΄κ±°λ‚˜ 잘λͺ»λœ μž…λ ₯μœΌλ‘œλΆ€ν„° μ•ˆμ „ν•˜λ‹€κ³  ν™•μΈλœ 데이터(예: `SanitizedString`)만이 μ‹œμŠ€ν…œ λ‚΄λΆ€λ‘œ 듀어가도둝 ν†΅μ œν•  수 μžˆμŠ΅λ‹ˆλ‹€ [2]. * **'Parse, Don't Validate' μ›μΉ™μ˜ 적용:** λ‹¨μˆœνžˆ λ°μ΄ν„°μ˜ μœ νš¨μ„±μ„ μ²΄ν¬ν•˜λŠ” 것을 λ„˜μ–΄, "κ²€μ¦ν•˜μ§€ 말고 νŒŒμ‹±ν•˜λΌ"λŠ” 철학을 μ μš©ν•΄μ•Ό ν•©λ‹ˆλ‹€ [3]. Zod와 같은 νŒŒμ‹± 라이브러리λ₯Ό μ‚¬μš©ν•˜μ—¬ λΆˆμ•ˆμ •ν•œ λŸ°νƒ€μž„ μ™ΈλΆ€ 데이터λ₯Ό μ‹ λ’°ν•  수 μžˆλŠ” λΈŒλžœλ””λ“œ νƒ€μž…μœΌλ‘œ λ³€ν™˜(νŒŒμ‹±)ν•œ λ’€ μ‹œμŠ€ν…œ λ‚΄λΆ€λ‘œ μ „λ‹¬ν•¨μœΌλ‘œμ¨ 데이터 무결성을 완벽에 κ°€κΉκ²Œ λ³΄ν˜Έν•  수 μžˆμŠ΅λ‹ˆλ‹€ [3]. ## ⚠️ λͺ¨μˆœ 및 μ—…λ°μ΄νŠΈ (Contradictions & RL Update) - **κ³Όκ±° λ°μ΄ν„°μ™€μ˜ 좩돌:** μžλ™ν™” 엔진에 μ˜ν•΄ λ§€ν•‘λœ μ§€μ‹μœΌλ‘œ, μΆ”ν›„ μ •λ°€ 검증 ν•„μš”. - **μ •μ±… λ³€ν™”:** Programming & Language λΆ„μ•Όμ˜ μžλ™ μžμ‚°ν™” μˆ˜ν–‰. ## πŸ”— 지식 μ—°κ²° (Graph) - **Related Topics:** [[브ᄅᅒᆫ다드 ᄐᅑ압 (Branded Types)|λΈŒλžœλ””λ“œ νƒ€μž… (Branded Types]], κΈ°λ³Έ νƒ€μž…μ—μ˜ μ§‘μ°© (Primitive Obsession), ꡬ쑰적 타이핑 ([[Structural Typing|Structural Typing]]), Parse, Don't Validate - **Projects/Contexts:** UserId와 OrderId의 μ—„κ²©ν•œ 뢄리 λͺ¨λΈλ§, Zod 라이브러리λ₯Ό ν™œμš©ν•œ λŸ°νƒ€μž„ 데이터 νŒŒμ‹± - **Contradictions/Notes:** TypeScript μžμ²΄λŠ” ν˜•νƒœλ₯Ό κΈ°μ€€μœΌλ‘œ ν•˜λŠ” ꡬ쑰적 타이핑 μ–Έμ–΄μ΄μ§€λ§Œ, 도메인 주도 μ„€κ³„μ—μ„œ 데이터 μ˜€μ—Όμ„ μ™„λ²½νžˆ μ°¨λ‹¨ν•˜κΈ° μœ„ν•΄μ„œλŠ” 였히렀 λͺ…λͺ©μ  타이핑(Nominal Typing)의 νŠΉμ„±μ„ λΈŒλžœλ””λ“œ νƒ€μž…μ΄λΌλŠ” 우회적 λ°©λ²•λ‘ μœΌλ‘œ λͺ¨λ°©ν•˜μ—¬ μ‚¬μš©ν•΄μ•Ό ν•©λ‹ˆλ‹€ [1, 4]. --- *Last updated: 2026-04-18* ---