--- id: P-REINFORCE-AUTO-176A7F category: "[[10_Wiki/πŸ’‘ Topics/Programming & Language]]" confidence_score: 0.90 tags: [auto-reinforced] last_reinforced: 2026-04-20 github_commit: "[P-Reinforce] Continuous Worker - TypeScript νƒ€μž… μ‹œμŠ€ν…œ μ•„ν‚€ν…μ²˜ 및 도메인 기반 섀계(DDD)" --- # [[TypeScript νƒ€μž… μ‹œμŠ€ν…œ μ•„ν‚€ν…μ²˜ 및 도메인 기반 섀계(DDD)]] ## πŸ“Œ ν•œ 쀄 톡찰 (The Karpathy Summary) > 지식 μš”μ•½ 정보 μΆ”μΆœ 쀑... ## πŸ“– κ΅¬μ‘°ν™”λœ 지식 (Synthesized Content) - **ꡬ쑰적 νƒ€μ΄ν•‘μ˜ ν•œκ³„μ™€ λͺ…λͺ©μ  νƒ€μ΄ν•‘μ˜ 수볡** TypeScriptλŠ” 객체의 ꡬ쑰(ν˜•νƒœ)κ°€ κ°™μœΌλ©΄ λ™μΌν•œ νƒ€μž…μœΌλ‘œ μ·¨κΈ‰ν•˜λŠ” ꡬ쑰적 타이핑을 μ‚¬μš©ν•©λ‹ˆλ‹€ [1, 2, 8]. ν•˜μ§€λ§Œ 도메인 λͺ¨λΈλ§μ—μ„œλŠ” 이메일 μ£Όμ†Œμ™€ μ‚¬μš©μžμ˜ 이름이 λͺ¨λ‘ λ¬Έμžμ—΄(`string`)이라고 ν•΄μ„œ μ„žμ—¬ 쓰이면 μ•ˆ λ˜λŠ” 'κΈ°λ³Έ νƒ€μž…μ—μ˜ μ§‘μ°©(Primitive Obsession)' λ¬Έμ œκ°€ λ°œμƒν•©λ‹ˆλ‹€ [3, 9]. - **λΈŒλžœλ””λ“œ νƒ€μž…(Branded Types)을 ν†΅ν•œ 데이터 격리** μœ„ 문제λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄ 도메인 기반 μ„€κ³„μ—μ„œλŠ” λΈŒλžœλ””λ“œ νƒ€μž…(λ˜λŠ” Opaque Types)을 적극 ν™œμš©ν•©λ‹ˆλ‹€ [10, 11]. λŸ°νƒ€μž„μ—λŠ” μ‘΄μž¬ν•˜μ§€ μ•Šμ§€λ§Œ 컴파일 μ‹œμ μ—λ§Œ μ‘΄μž¬ν•˜λŠ” κ³ μœ ν•œ 속성(예: `unique symbol`)을 νƒ€μž…μ— λΆ€μ—¬ν•˜μ—¬ `UserId`와 `OrderId`λ₯Ό μ—„κ²©νžˆ λΆ„λ¦¬ν•©λ‹ˆλ‹€ [3, 9, 12]. 이λ₯Ό 톡해 였직 κ²€μ¦λœ λ°μ΄ν„°λ§Œμ΄ μ‹œμŠ€ν…œμ˜ λ‚΄λΆ€ 둜직으둜 μ§„μž…ν•˜λ„λ‘ κ°•μ œν•  수 μžˆμŠ΅λ‹ˆλ‹€ [11, 12]. - **"κ²€μ¦ν•˜μ§€ 말고 νŒŒμ‹±ν•˜λΌ (Parse, Don't Validate)"** μ™ΈλΆ€μ—μ„œ μœ μž…λ˜λŠ” μ–Ένƒ€μž…λ“œ(untyped) 데이터λ₯Ό λ‹¨μˆœνžˆ μœ νš¨μ„± κ²€μ‚¬ν•˜λŠ” 것에 κ·ΈμΉ˜μ§€ μ•Šκ³ , μ‹œμŠ€ν…œ 경계(Boundary)μ—μ„œ ν•œ λ²ˆμ— μ™„λ²½νžˆ νƒ€μ΄ν•‘λœ ꡬ쑰둜 λ³€ν™˜(νŒŒμ‹±)ν•΄μ•Ό ν•œλ‹€λŠ” 섀계 μ² ν•™μž…λ‹ˆλ‹€ [4, 6, 13]. Zod와 같은 λŸ°νƒ€μž„ 검증 λΌμ΄λΈŒλŸ¬λ¦¬μ™€ λΈŒλžœλ””λ“œ νƒ€μž…μ„ κ²°ν•©ν•˜λ©΄, νŒŒμ‹±μ„ ν†΅κ³Όν•œ 데이터가 도메인 κ°μ²΄λ‘œμ„œ μ•ˆμ „ν•˜λ‹€λŠ” 것을 νƒ€μž… μ‹œμŠ€ν…œ λ ˆλ²¨μ—μ„œ 영ꡬ적으둜 보μž₯ν•  수 μžˆμŠ΅λ‹ˆλ‹€ [6, 12, 14]. - **식별 κ°€λŠ₯ν•œ μœ λ‹ˆμ˜¨(Discriminated Unions)κ³Ό μ™„μ „μ„± 검사(Exhaustiveness Checking)** κ³΅ν†΅λœ λ¦¬ν„°λŸ΄ 속성(νƒœκ·Έ)을 μ‚¬μš©ν•˜μ—¬ λ„λ©”μΈμ˜ λ³΅μž‘ν•œ μƒνƒœ 머신을 λͺ¨λΈλ§ν•˜λŠ” κΈ°λ²•μœΌλ‘œ, "λΆˆκ°€λŠ₯ν•œ μƒνƒœλ₯Ό ν‘œν˜„ λΆˆκ°€λŠ₯ν•˜κ²Œ λ§Œλ“œλŠ”" 핡심 μˆ˜λΉ„ κΈ°μˆ μž…λ‹ˆλ‹€ [5, 15-18]. `switch`λ¬Έκ³Ό `never` νƒ€μž…μ„ κ²°ν•©ν•œ μ™„μ „μ„± 검사(Exhaustiveness Checking) 기법을 μ‚¬μš©ν•˜λ©΄, 도메인에 μƒˆλ‘œμš΄ μƒνƒœκ°€ μΆ”κ°€λ˜μ—ˆμ„ λ•Œ 이λ₯Ό μ²˜λ¦¬ν•˜μ§€ μ•Šμ€ λͺ¨λ“  μ½”λ“œλ₯Ό 컴파일 μ—λŸ¬λ‘œ 즉각 μ°Ύμ•„λ‚Ό 수 μžˆμŠ΅λ‹ˆλ‹€ [18-22]. - **λΆˆλ³€μ„±(Immutability) 확립** μƒνƒœμ˜ λ¬΄λΆ„λ³„ν•œ 변경을 막기 μœ„ν•΄ `readonly` μˆ˜μ‹μ–΄λ₯Ό 적극적으둜 μ‚¬μš©ν•˜μ—¬ 객체와 λ°°μ—΄μ˜ μˆ˜μ •μ„ 컴파일 μˆ˜μ€€μ—μ„œ κΈˆμ§€ν•©λ‹ˆλ‹€ [23-25]. λ‹¨μˆœν•œ 얕은 보호λ₯Ό λ„˜μ–΄ λ§€ν•‘ νƒ€μž…κ³Ό 쑰건뢀 νƒ€μž…μ„ κ²°ν•©ν•œ μž¬κ·€μ  λΆˆλ³€μ„±(`DeepReadonly`)을 κ΅¬μΆ•ν•˜λ©΄, λ³΅μž‘ν•œ 도메인 μ—”ν‹°ν‹°μ˜ 무결성을 μ™„λ²½ν•˜κ²Œ λ°©μ–΄ν•  수 μžˆμŠ΅λ‹ˆλ‹€ [5, 25, 26]. - **κ²½κ³„λ©΄μ˜ λ°©μ–΄: EPC와 `satisfies` μ—°μ‚°μž** 객체 λ¦¬ν„°λŸ΄μ΄ 직접 할당될 λ•Œ μž‘λ™ν•˜λŠ” κ³Όμž‰ 속성 체크(Excess Property Checking, EPC)λ₯Ό 톡해 μ •μ˜λ˜μ§€ μ•Šμ€ 도메인 속성이 ν¬ν•¨λ˜λŠ” 것을 μ°¨λ‹¨ν•©λ‹ˆλ‹€ [8, 27, 28]. κ°„μ ‘ ν• λ‹ΉμœΌλ‘œ 인해 EPCκ°€ μš°νšŒλ˜λŠ” 것을 막기 μœ„ν•΄ `satisfies` μ—°μ‚°μžλ₯Ό ν™œμš©ν•˜λ©΄, 객체의 ꡬ체적인 λ¦¬ν„°λŸ΄ νƒ€μž… 정보λ₯Ό μœ μ§€ν•˜λ©΄μ„œλ„ μ•ˆμ „ν•˜κ²Œ 도메인 μΈν„°νŽ˜μ΄μŠ€ κ·œκ²©μ„ μΆ©μ‘±ν•˜λŠ”μ§€ 검증할 수 μžˆμŠ΅λ‹ˆλ‹€ [11, 29, 30]. ## ⚠️ λͺ¨μˆœ 및 μ—…λ°μ΄νŠΈ (Contradictions & RL Update) - **κ³Όκ±° λ°μ΄ν„°μ™€μ˜ 좩돌:** μžλ™ν™” 엔진에 μ˜ν•΄ λ§€ν•‘λœ μ§€μ‹μœΌλ‘œ, μΆ”ν›„ μ •λ°€ 검증 ν•„μš”. - **μ •μ±… λ³€ν™”:** Programming & Language λΆ„μ•Όμ˜ μžλ™ μžμ‚°ν™” μˆ˜ν–‰. ## πŸ”— 지식 μ—°κ²° (Graph) - **Related Topics:** [[λΈŒλžœλ””λ“œ νƒ€μž…(Branded Types)]], [[식별 κ°€λŠ₯ν•œ μœ λ‹ˆμ˜¨(Discriminated Unions)]], [[ꡬ쑰적 타이핑(Structural Typing)]], [[Parse, Don't Validate]], [[μ™„μ „μ„± 검사(Exhaustiveness Checking)]] - **Projects/Contexts:** [[Zod μœ νš¨μ„± 검사 라이브러리 연동]], [[ν”„λ‘ νŠΈμ—”λ“œ μƒνƒœ λ¨Έμ‹ (State Machine) κ΅¬ν˜„]] - **Contradictions/Notes:** TypeScriptλŠ” 본래 Javaλ‚˜ C#κ³Ό 달리 λͺ…λͺ©μ  타이핑(Nominal Typing)을 λ„€μ΄ν‹°λΈŒλ‘œ μ§€μ›ν•˜μ§€ μ•Šκ³  ꡬ쑰적 νƒ€μ΄ν•‘μœΌλ‘œ λ™μž‘ν•©λ‹ˆλ‹€. λ”°λΌμ„œ μ—„κ²©ν•œ 도메인 섀계λ₯Ό κ΅¬μΆ•ν•˜λ €λ©΄, 컴파일러λ₯Ό μ†μ΄λŠ” 방식(κ°€μ§œ 속성 μΆ”κ°€ λ“±)인 λΈŒλžœλ””λ“œ νƒ€μž…κ³Ό 같은 우회 μ „λž΅μ„ μΈμœ„μ μœΌλ‘œ λ„μž…ν•΄μ•Όλ§Œ λͺ…λͺ©μ  νƒ€μ΄ν•‘μ˜ 효과λ₯Ό 얻을 수 μžˆμŠ΅λ‹ˆλ‹€. --- *Last updated: 2026-04-18* - Raw Source: [[00_Raw/2026-04-20/TypeScript νƒ€μž… μ‹œμŠ€ν…œ μ•„ν‚€ν…μ²˜ 및 도메인 기반 섀계(DDD).md]] ---