--- id: P-REINFORCE-AUTO-E5BF95 category: "10_Wiki/πŸ’‘ Topics/Programming & Language" confidence_score: 0.90 tags: [auto-reinforced] last_reinforced: 2026-04-20 github_commit: "[P-Reinforce] Continuous Worker - κ²¬κ³ ν•œ 도메인 λͺ¨λΈ 및 API 계약 섀계" --- # [[κ²¬κ³ ν•œ 도메인 λͺ¨λΈ 및 API 계약 섀계]] ## πŸ“Œ ν•œ 쀄 톡찰 (The Karpathy Summary) > κ²¬κ³ ν•œ 도메인 λͺ¨λΈ 및 API 계약 μ„€κ³„λŠ” TypeScript의 정적 νƒ€μž… μ‹œμŠ€ν…œμ„ ν™œμš©ν•˜μ—¬ μœ νš¨ν•˜μ§€ μ•Šμ€ μƒνƒœλ₯Ό μ›μ²œ μ°¨λ‹¨ν•˜κ³  예츑 κ°€λŠ₯ν•œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ ꡬ쑰λ₯Ό λ§Œλ“œλŠ” κ³Όμ •μž…λ‹ˆλ‹€. 이λ₯Ό μœ„ν•΄ 식별 κ°€λŠ₯ν•œ μœ λ‹ˆμ˜¨, λΈŒλžœλ””λ“œ νƒ€μž…, λΆˆλ³€μ„± μ œμ•½, 그리고 "κ²€μ¦ν•˜μ§€ 말고 νŒŒμ‹±ν•˜λΌ"와 같은 섀계 철학을 κ²°ν•©ν•˜μ—¬, κ²½κ³„λ©΄μ—μ„œλΆ€ν„° λ°μ΄ν„°μ˜ 무결성을 보μž₯ν•˜λŠ” μ•ˆμ „ν•œ 계약을 μˆ˜λ¦½ν•©λ‹ˆλ‹€. ## πŸ“– κ΅¬μ‘°ν™”λœ 지식 (Synthesized Content) * **"κ²€μ¦ν•˜μ§€ 말고 νŒŒμ‹±ν•˜λΌ (Parse, don't validate)":** μ‹œμŠ€ν…œ 경계(API μ§„μž…μ μ΄λ‚˜ 좜ꡬ)μ—μ„œ νƒ€μž…μ΄ μ§€μ •λ˜μ§€ μ•Šμ€ 데이터λ₯Ό μˆ˜λ™μœΌλ‘œ κ²€μ¦ν•˜κΈ°λ§Œ ν•˜λŠ” λŒ€μ‹ , 잘 μ •μ˜λœ νƒ€μž…μ˜ λ°μ΄ν„°λ‘œ νŒŒμ‹±ν•˜μ—¬ λ³€ν™˜ν•΄μ•Ό ν•©λ‹ˆλ‹€ [1, 2]. Zod와 같은 λŸ°νƒ€μž„ 검증 라이브러리λ₯Ό λΈŒλžœλ””λ“œ νƒ€μž…κ³Ό κ²°ν•©ν•˜λ©΄, μ•Œ 수 μ—†λŠ” 데이터λ₯Ό λͺ…ν™•ν•œ νƒ€μž…μœΌλ‘œ 쒁히고 μ‹œμŠ€ν…œ λ‚΄λΆ€μ—μ„œ 정적 λΆ„μ„μ˜ 이점을 μ˜¨μ „νžˆ λˆ„λ¦΄ 수 μžˆμŠ΅λ‹ˆλ‹€ [3, 4]. * **식별 κ°€λŠ₯ν•œ μœ λ‹ˆμ˜¨(Discriminated Unions)κ³Ό μ™„μ „μ„± 검사:** 객체의 곡톡 λ¦¬ν„°λŸ΄ 속성을 μ‹λ³„μžλ‘œ μ‚¬μš©ν•˜λŠ” μœ λ‹ˆμ˜¨ νƒ€μž…μ„ 톡해, λŸ°νƒ€μž„μ— μœ νš¨ν•˜μ§€ μ•Šμ€ μƒνƒœκ°€ μ•„μ˜ˆ ν‘œν˜„λ  수 없도둝 도메인을 λͺ¨λΈλ§ν•©λ‹ˆλ‹€ [5-7]. 여기에 `never` νƒ€μž…μ„ ν™œμš©ν•œ μ™„μ „μ„± 검사(Exhaustiveness checking)λ₯Ό λ”ν•˜λ©΄, μƒˆλ‘œμš΄ API 응닡 μƒνƒœλ‚˜ 도메인 둜직이 좔가될 λ•Œ μ²˜λ¦¬λ˜μ§€ μ•Šμ€ μΌ€μ΄μŠ€λ₯Ό 컴파일 μ—λŸ¬λ‘œ 즉각 μž‘μ•„λ‚Ό 수 μžˆμŠ΅λ‹ˆλ‹€ [6, 8-10]. * **λΈŒλžœλ””λ“œ νƒ€μž…(Branded Types)을 ν†΅ν•œ λͺ…λͺ©μ  타이핑:** TypeScript의 ꡬ쑰적 타이핑이 κ°–λŠ” ν•œκ³„(κΈ°λ³Έ νƒ€μž…μ—μ˜ μ§‘μ°©)λ₯Ό κ·Ήλ³΅ν•˜κΈ° μœ„ν•΄, μ‹λ³„μš© 가상 μ†μ„±μ΄λ‚˜ `unique symbol`을 κ΅μ§‘ν•©μœΌλ‘œ μΆ”κ°€ν•˜μ—¬ κ³ μœ ν•œ 뢈투λͺ… νƒ€μž…(Opaque Types)을 μƒμ„±ν•©λ‹ˆλ‹€ [11-14]. 이λ₯Ό 톡해 μ‚¬μš©μž ID와 μ£Όλ¬Έ ID처럼 ꡬ쑰가 λ™μΌν•œ λ¬Έμžμ—΄μ΄λ‚˜ μˆ«μžμΌμ§€λΌλ„ μ„œλ‘œ μ„žμ—¬ API 계약을 μœ„λ°˜ν•˜λŠ” 치λͺ…적인 버그λ₯Ό 컴파일 νƒ€μž„μ— μ°¨λ‹¨ν•©λ‹ˆλ‹€ [3, 15, 16]. * **`satisfies` μ—°μ‚°μžλ₯Ό ν™œμš©ν•œ μ—„κ²©ν•œ 계약 κ°•μ œ:** λ³€μˆ˜λ₯Ό 거친 κ°„μ ‘ ν• λ‹Ή κ³Όμ •μ—μ„œλŠ” νƒ€μž…μŠ€ν¬λ¦½νŠΈμ˜ κ³Όμž‰ 속성 체크(Excess Property Checking)κ°€ μž‘λ™ν•˜μ§€ μ•Šμ„ 수 μžˆμŠ΅λ‹ˆλ‹€ [17, 18]. λ°±μ—”λ“œ API 응닡을 ν”„λ‘ νŠΈμ—”λ“œ λͺ¨λΈλ‘œ λ§€ν•‘ν•  λ•Œ `satisfies` μ—°μ‚°μžλ₯Ό μ‚¬μš©ν•˜λ©΄, μΆ”κ°€λœ 초과 속성을 μ—„κ²©ν•˜κ²Œ μ—λŸ¬λ‘œ μž‘μ•„λ‚΄λ©΄μ„œλ„ ꡬ체적인 λ¦¬ν„°λŸ΄ νƒ€μž… 좔둠을 κ·ΈλŒ€λ‘œ μœ μ§€ν•˜μ—¬ κ³„μ•½μ˜ 엄격성과 μœ μ—°μ„±μ„ λ™μ‹œμ— λ‹¬μ„±ν•©λ‹ˆλ‹€ [19-22]. * **λΆˆλ³€μ„±(Immutability) 확립:** 객체와 λ°°μ—΄μ˜ λ¬΄λΆ„λ³„ν•œ μƒνƒœ 변경을 막고 데이터 무결성을 보μž₯ν•˜κΈ° μœ„ν•΄ `readonly` μˆ˜μ‹μ–΄μ™€ `DeepReadonly` μž¬κ·€μ  μœ ν‹Έλ¦¬ν‹° νƒ€μž…μ„ μ μš©ν•©λ‹ˆλ‹€ [23-25]. μ‹λ³„μž, μ„€μ • 객체, API 응닡 λ“± μ ˆλŒ€ λ³€κ²½λ˜μ–΄μ„œλŠ” μ•ˆ λ˜λŠ” 핡심 데이터에 컴파일 νƒ€μž„μ˜ κ°•λ ₯ν•œ λ³΄ν˜Έλ§‰μ„ μ œκ³΅ν•©λ‹ˆλ‹€ [25, 26]. * **도메인 λ°©μ–΄ 및 μ˜ˆμ™Έ 처리 섀계:** λΉ„μ¦ˆλ‹ˆμŠ€ λ‘œμ§μ—μ„œ μ˜ˆμƒ κ°€λŠ₯ν•œ μ‹€νŒ¨λ₯Ό μ²˜λ¦¬ν•  λ•Œ λ‹¨μˆœνžˆ `throw`둜 μ˜ˆμ™Έλ₯Ό λ°œμƒμ‹œν‚€λŠ” λŒ€μ‹ , `Result` νƒ€μž…μ„ λͺ…μ‹œμ μœΌλ‘œ λ°˜ν™˜ν•©λ‹ˆλ‹€ [27-30]. 이λ₯Ό 톡해 ν•¨μˆ˜ μ‹œκ·Έλ‹ˆμ²˜ 자체λ₯Ό κ²¬κ³ ν•œ κ³„μ•½μœΌλ‘œ λ§Œλ“€μ–΄, API의 κ°€λŠ₯ν•œ λͺ¨λ“  κ²°κ³Ό(였λ₯˜ 포함)λ₯Ό μ†ŒλΉ„μžκ°€ μ•ˆμ „ν•˜κ³  μ² μ €ν•˜κ²Œ μ²˜λ¦¬ν•˜λ„λ‘ κ°•μ œν•©λ‹ˆλ‹€ [28, 29, 31]. ## ⚠️ λͺ¨μˆœ 및 μ—…λ°μ΄νŠΈ (Contradictions & RL Update) - **κ³Όκ±° λ°μ΄ν„°μ™€μ˜ 좩돌:** μžλ™ν™” 엔진에 μ˜ν•΄ λ§€ν•‘λœ μ§€μ‹μœΌλ‘œ, μΆ”ν›„ μ •λ°€ 검증 ν•„μš”. - **μ •μ±… λ³€ν™”:** Programming & Language λΆ„μ•Όμ˜ μžλ™ μžμ‚°ν™” μˆ˜ν–‰. ## πŸ”— 지식 μ—°κ²° (Graph) - **Related Topics:** Parse, don't validate, 식별 κ°€λŠ₯ν•œ μœ λ‹ˆμ˜¨ (Discriminated Unions), [[λΈŒλžœλ””λ“œ νƒ€μž… (Branded Types)]], [[Satisfies μ—°μ‚°μž]], [[λΆˆλ³€μ„± (Immutability)]], Result νƒ€μž… - **Projects/Contexts:** Zodλ₯Ό ν™œμš©ν•œ λŸ°νƒ€μž„ 데이터 검증, API 응닡 처리 및 μƒνƒœ λ¨Έμ‹  λͺ¨λΈλ§ - **Contradictions/Notes:** μ†ŒμŠ€μ— λ”°λ₯΄λ©΄ ꡐ집합(`&`)κ³Ό νƒ€μž… 별칭(`type`)λ§ŒμœΌλ‘œλ„ 객체λ₯Ό μ‘°ν•©ν•  수 μžˆμ§€λ§Œ, λŒ€κ·œλͺ¨ ν”„λ‘œμ νŠΈμ˜ μ„±λŠ₯κ³Ό 컴파일러 캐싱 μ΅œμ ν™”λ₯Ό κ³ λ €ν•  λ•Œ 핡심 도메인 객체 μ„ μ–Έμ—λŠ” μΈν„°νŽ˜μ΄μŠ€ 상속(`interface extends`)을 μš°μ„ μ‹œν•˜λŠ” 것이 ꢌμž₯λ©λ‹ˆλ‹€ [32-34]. λ˜ν•œ λΉ„μ¦ˆλ‹ˆμŠ€ 흐름 μ œμ–΄λ₯Ό μœ„ν•΄ 전톡적인 μ˜ˆμ™Έ(`Exception`) νˆ¬μ²™λ³΄λ‹€λŠ” `Result` νŒ¨ν„΄μ„ ν™œμš©ν•˜λŠ” 방식이 λ”μš± μ•ˆμ „ν•œ μ„€κ³„λ‘œ μ œμ‹œλ©λ‹ˆλ‹€ [28, 30, 35]. --- *Last updated: 2026-04-18* ---