--- id: [[P-Reinforce]]-AUTO-5462C7 category: "10_Wiki/πŸ’‘ Topics/Programming & Language" confidence_score: 0.90 tags: [auto-reinforced] last_reinforced: 2026-04-20 github_commit: "[P-Reinforce] Continuous Worker - κΈ°λ³Έ νƒ€μž…μ—μ˜ μ§‘μ°©(Primitive Obsession)" --- # [[κΈ°λ³Έ νƒ€μž…μ—μ˜ μ§‘μ°©(Primitive Obsession)]] ## πŸ“Œ ν•œ 쀄 톡찰 (The Karpathy Summary) > 'κΈ°λ³Έ νƒ€μž…μ—μ˜ μ§‘μ°©(Primitive Obsession)'은 이메일 μ£Όμ†Œ, 이름, μ‹λ³„μž, 톡화 λ“± 의미적으둜 μ„œλ‘œ λ‹€λ₯Έ 데이터λ₯Ό `string`μ΄λ‚˜ `number` 같은 λ‹¨μΌν•œ κΈ°λ³Έ(μ›μ‹œ) νƒ€μž…μœΌλ‘œλ§Œ μ·¨κΈ‰ν•˜μ—¬ ν‘œν˜„ν•˜λ €λŠ” 문제λ₯Ό λœ»ν•œλ‹€[1, 2]. TypeScript와 같이 ꡬ쑰적 타이핑([[Structural Typing]])을 μ‚¬μš©ν•˜λŠ” μ–Έμ–΄μ—μ„œλŠ” μ»΄νŒŒμΌλŸ¬κ°€ μ΄λŸ¬ν•œ λ°μ΄ν„°λ“€μ˜ 의미적 차이λ₯Ό κ΅¬λΆ„ν•˜μ§€ λͺ»ν•΄ μ˜λ„μΉ˜ μ•Šμ€ 데이터 혼용 μ‹€μˆ˜λ₯Ό λ°©μ§€ν•  수 μ—†λ‹€[2, 3]. 이 문제λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄ κ³ μœ ν•œ ν‘œμ‹μ„ λΆ€μ—¬ν•˜λŠ” λΈŒλžœλ””λ“œ νƒ€μž…(Branded Types)μ΄λ‚˜ 뢈투λͺ… νƒ€μž…(Opaque Types) 같은 기법이 ν•΄κ²°μ±…μœΌλ‘œ μ‚¬μš©λœλ‹€[2-4]. ## πŸ“– κ΅¬μ‘°ν™”λœ 지식 (Synthesized Content) * **κΈ°λ³Έ νƒ€μž… μ§‘μ°©μ˜ 원인 및 ν•œκ³„** ν˜„λŒ€ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œ `string`은 토큰, λ¦¬μ†ŒμŠ€ μ‹λ³„μž, 이벀트 이름 λ“± μ•„μ£Ό λ‹€μ–‘ν•œ 역할을 ν•˜λ©°, `number` μ—­μ‹œ 톡화, 가상 포인트, νƒ€μž„μŠ€νƒ¬ν”„ 등을 λ‚˜νƒ€λ‚Έλ‹€[1]. ν•˜μ§€λ§Œ TypeScript의 ꡬ쑰적 타이핑 νŠΉμ„±μƒ, 이메일 μ£Όμ†Œκ°€ ν•„μš”ν•œ λ§€κ°œλ³€μˆ˜μ— μ‚¬μš©μžμ˜ 이름을 전달해도 λ‘˜ λ‹€ `string`μ΄λΌλŠ” 이유둜 μ»΄νŒŒμΌλŸ¬κ°€ ν˜Έν™˜μ„±μ„ 인정해버리며 였λ₯˜λ₯Ό μž‘μ•„λ‚΄μ§€ λͺ»ν•œλ‹€[2]. 즉, 외견상 ꡬ쑰가 κ°™μ•„ λ³΄μ΄λŠ” κΈ°λ³Έ νƒ€μž…λ“€μ„ 의미둠적으둜 차별화할 수 μžˆλŠ” λ‚΄μž₯된 방법이 λΆ€μ‘±ν•œ 것이 근본적인 원인이닀[5]. * **μ‹€μ œ λ°œμƒν•  수 μžˆλŠ” μœ„ν—˜μ„±** μ΄λŸ¬ν•œ κΈ°λ³Έ νƒ€μž…μ—μ˜ 집착은 λŸ°νƒ€μž„ 였λ₯˜μ™€ μ‹¬κ°ν•œ 논리적 결함을 μœ λ°œν•œλ‹€. κ°€μž₯ 널리 μ•Œλ €μ§„ 비극적 μ‚¬λ‘€λŠ” λ―Έκ΅­ λ‹¨μœ„κ³„(νŒŒμš΄λ“œνž˜ 초)와 SI λ‹¨μœ„κ³„(뉴턴 초)λ₯Ό λ™μΌν•œ 숫자 νƒ€μž…μœΌλ‘œ ν˜Όμš©ν•˜μ—¬ 3μ–΅ 2,760만 λ‹¬λŸ¬ 규λͺ¨μ˜ ꢀ도선이 μ†Œμ‹€λœ Mars Climate Orbiter 사건이닀[4]. 이 외에도 μ„œλ‘œ λ‹€λ₯Έ 톡화(예: EUR와 GBP)의 μƒν’ˆ 가격을 의미 ꡬ뢄 없이 `number` νƒ€μž…μœΌλ‘œ λ¬Άμ–΄ μ—°μ‚°ν•  경우 μ‹œμŠ€ν…œμ˜ λΆˆμΌμΉ˜λ‚˜ 수읡 손싀을 μ΄ˆλž˜ν•  수 있으며[6], 인증 μ„œλ²„ 토큰과 API 토큰을 ν˜Όλ™ν•˜μ—¬ 잘λͺ»λœ 인자둜 μ „λ‹¬ν•˜λŠ” 버그가 λ°œμƒν•  수 μžˆλ‹€[7]. * **ν•΄κ²° λ°©μ•ˆ: λͺ…λͺ©μ  νƒ€μ΄ν•‘μ˜ 수볡** κΈ°λ³Έ νƒ€μž…μ—μ˜ 집착을 ν•΄κ²°ν•˜κΈ° μœ„ν•΄ 도메인 기반 섀계(DDD) λ“±μ—μ„œ 'λΈŒλžœλ””λ“œ νƒ€μž…(Branded Types)' λ˜λŠ” '뢈투λͺ… νƒ€μž…(Opaque Types)'이 널리 μ‚¬μš©λœλ‹€[2, 8]. μ΄λŠ” λŸ°νƒ€μž„μ—λŠ” μ‘΄μž¬ν•˜μ§€ μ•Šμ§€λ§Œ 컴파일 μ‹œμ μ—λ§Œ μ‘΄μž¬ν•˜λŠ” κ³ μœ ν•œ 속성(λΈŒλžœλ“œ)을 μ›μ‹œ νƒ€μž…μ— κ°•μ œλ‘œ 덧뢙여(예: `string & { __brand: 'UserId' }`) μ˜λ―Έκ°€ λ‹€λ₯Έ νƒ€μž… κ°„μ˜ ν˜Έν™˜κ³Ό μ„žμž„μ„ μ°¨λ‹¨ν•˜λŠ” 기법이닀[2, 9]. 이λ₯Ό 톡해 μ‚¬μš©μž ID와 μ£Όλ¬Έ IDλ₯Ό μ—„κ²©νžˆ λΆ„λ¦¬ν•˜κ±°λ‚˜[10], μ² μ €νžˆ κ²€μ¦λœ 데이터(Sanitized String λ“±)만이 μ‹œμŠ€ν…œ λ‚΄λΆ€ 둜직으둜 μ§„μž…ν•˜λ„λ‘ κ°•μ œν•˜μ—¬ 데이터 μ˜€μ—Όμ„ μ˜ˆλ°©ν•  수 μžˆλ‹€[2, 11]. ## ⚠️ λͺ¨μˆœ 및 μ—…λ°μ΄νŠΈ (Contradictions & RL Update) - **κ³Όκ±° λ°μ΄ν„°μ™€μ˜ 좩돌:** μžλ™ν™” 엔진에 μ˜ν•΄ λ§€ν•‘λœ μ§€μ‹μœΌλ‘œ, μΆ”ν›„ μ •λ°€ 검증 ν•„μš”. - **μ •μ±… λ³€ν™”:** Programming & Language λΆ„μ•Όμ˜ μžλ™ μžμ‚°ν™” μˆ˜ν–‰. ## πŸ”— 지식 μ—°κ²° (Graph) - **Related Topics:** [[ꡬ쑰적 타이핑(Structural Typing)]], λΈŒλžœλ””λ“œ νƒ€μž…(Branded Types), 뢈투λͺ… νƒ€μž…(Opaque Types), [[도메인 기반 섀계(DDD)]] - **Projects/Contexts:** TypeScript νƒ€μž… μ‹œμŠ€ν…œ, Mars Climate Orbiter 사둀 - **Contradictions/Notes:** μ†ŒμŠ€μ— λ”°λ₯΄λ©΄ νƒ€μž… λΈŒλžœλ”©μ€ ν”„λ‘œκ·Έλž¨μ˜ μ•ˆμ „μ„±μ„ κ·ΉλŒ€ν™”ν•˜μ§€λ§Œ, μ½”λ“œμ˜ κ°œλ…μ  λ³΅μž‘μ„±μ„ μ¦κ°€μ‹œν‚€κ³  μž‘μ„±ν•΄μ•Ό ν•  타이핑 λŸ‰μ΄ λ§Žμ•„μ§„λ‹€λŠ” 단점이 μžˆλ‹€. λ”°λΌμ„œ 일뢀 μ†ŒμŠ€μ—μ„œλŠ” 값이 0이 μ•„λ‹˜μ΄ κ°œλ°œμžμ— μ˜ν•΄ λͺ…ν™•νžˆ μΈμ§€λ˜λŠ” λ“±μ˜ νŠΉμ • μƒν™©μ—μ„œλŠ” λΈŒλžœλ””λ“œ νƒ€μž…μ˜ 강박적 μ‚¬μš©μ„ ν”Όν•˜κ³  λ‹¨μˆœν•œ μ›μ‹œ νƒ€μž…κ³Ό 단일 μ˜ˆμ™Έ 처리(μ–΄μ„€μ…˜)λ₯Ό μ‚¬μš©ν•˜λŠ” 것이 μ½”λ“œλ₯Ό 더 κ°„κ²°ν•˜κ³  읽기 μ‰½κ²Œ λ§Œλ“€ 수 μžˆλ‹€κ³  μ‘°μ–Έν•œλ‹€[12-14]. --- *Last updated: 2026-04-18* ---