--- id: wiki-2026-0508-the-two-hats title: The Two Hats category: 10_Wiki/Topics status: needs_review canonical_id: self aliases: [] duplicate_of: none source_trust_level: A confidence_score: 0.92 tags: [uncategorized] raw_sources: [] last_reinforced: 2026-05-08 github_commit: pending inferred_by: Claude Opus 4.7 (auto-normalize 2026-05-08) tech_stack: language: unspecified framework: unspecified --- # [[The Two Hats]] ## πŸ“Œ ν•œ 쀄 톡찰 (The Karpathy Summary) '두 개의 λͺ¨μž(The Two Hats)'λŠ” μΌ„νŠΈ 벑(Kent Beck)κ³Ό λ§ˆν‹΄ 파울러(Martin Fowler)κ°€ μ œμ•ˆν•œ λ¦¬νŒ©ν† λ§μ˜ 핡심적인 심리적, 절차적 운영 원칙을 λ‚˜νƒ€λ‚΄λŠ” μ€μœ μ΄λ‹€ [1, 2]. 이 원칙은 μ†Œν”„νŠΈμ›¨μ–΄ 개발 μ‹œκ°„μ„ 'κΈ°λŠ₯ μΆ”κ°€(Adding Function)'와 'λ¦¬νŒ©ν† λ§(Refactoring)'μ΄λΌλŠ” 두 κ°€μ§€ λšœλ ·ν•œ ν™œλ™μœΌλ‘œ λͺ…ν™•ν•˜κ²Œ λ‚˜λˆ„μ–΄μ•Ό 함을 κ°•μ‘°ν•œλ‹€ [1, 3]. 즉, κ°œλ°œμžλŠ” μžμ‹ μ΄ ν˜„μž¬ μ–΄λ–€ λͺ©μ μ˜ λͺ¨μžλ₯Ό μ“°κ³  μž‘μ—…μ„ μˆ˜ν–‰ν•˜κ³  μžˆλŠ”μ§€ 항상 μ •ν™•νžˆ μΈμ§€ν•˜μ—¬, 두 κ°€μ§€ ν™œλ™μ„ λ’€μ„žμ§€ μ•Šκ³  λΆ„λ¦¬ν•¨μœΌλ‘œμ¨ μž‘μ—…μ˜ λͺ…확성을 확보해야 ν•œλ‹€ [2, 4]. ## πŸ“– κ΅¬μ‘°ν™”λœ 지식 (Synthesized Content) * **μ›μΉ™μ˜ κ°œλ…κ³Ό λͺ©μ :** '두 개의 λͺ¨μž'λŠ” ν”„λ‘œκ·Έλž˜λ¨Έκ°€ μ½”λ“œ 베이슀λ₯Ό λ‹€λ£° λ•Œ μ·¨ν•΄μ•Ό ν•˜λŠ” 두 κ°€μ§€ μƒλ°˜λœ νƒœλ„λ₯Ό μ„€λͺ…ν•˜λŠ” μ€μœ μ΄λ‹€ [1, 5]. 이 원칙은 κ°œλ°œμžκ°€ ν”„λ‘œκ·Έλž˜λ°μ„ ν•  λ•Œ ν˜„μž¬ μˆ˜ν–‰ 쀑인 μž‘μ—…μ˜ λͺ©μ μ„ λͺ…ν™•νžˆ κ΅¬λΆ„ν•˜μ—¬ 디버깅 νš¨μœ¨μ„±μ„ 높이고 μž‘μ—…μ˜ λͺ…확성을 ν™•λ³΄ν•˜λŠ” 것을 λͺ©ν‘œλ‘œ ν•œλ‹€ [2, 6]. * **κΈ°λŠ₯ μΆ”κ°€(Adding Function) λͺ¨μž:** 'κΈ°λŠ₯ μΆ”κ°€' λͺ¨μžλ₯Ό μ“°κ³  μžˆμ„ λ•ŒλŠ” 였직 μƒˆλ‘œμš΄ λ™μž‘μ„ κ΅¬ν˜„ν•˜κ³  ν…ŒμŠ€νŠΈλ₯Ό ν†΅κ³Όμ‹œν‚€λŠ” λ°μ—λ§Œ 집쀑해야 ν•œλ‹€ [1, 2]. κΈ°μ‘΄ μ½”λ“œμ˜ ꡬ쑰λ₯Ό λ³€κ²½ν•΄μ„œλŠ” μ•ˆ 되며, 단지 μƒˆλ‘œμš΄ κΈ°λŠ₯을 λ”ν•˜λŠ” κ²ƒλ§Œ μˆ˜ν–‰ν•΄μ•Ό ν•œλ‹€ [1, 3]. * **λ¦¬νŒ©ν† λ§(Refactoring) λͺ¨μž:** 'λ¦¬νŒ©ν† λ§' λͺ¨μžλ₯Ό μ“°κ³  μžˆμ„ λ•ŒλŠ” κΈ°μ‘΄ μ½”λ“œμ˜ ꡬ쑰λ₯Ό μž¬κ΅¬μ„±ν•˜κ³  κ°œμ„ ν•˜λŠ” λ°μ—λ§Œ 전념해야 ν•˜λ©°, μƒˆλ‘œμš΄ κΈ°λŠ₯μ΄λ‚˜ ν…ŒμŠ€νŠΈλ₯Ό μ ˆλŒ€λ‘œ μΆ”κ°€ν•΄μ„œλŠ” μ•ˆ λœλ‹€ [1, 3]. 이 λͺ¨μžλ₯Ό 썼을 λ•Œ ν…ŒμŠ€νŠΈ μ½”λ“œλ₯Ό μˆ˜μ •ν•  수 μžˆλŠ” κ²½μš°λŠ” μ˜€λ‘œμ§€ 이전에 λˆ„λ½λœ μΌ€μ΄μŠ€λ₯Ό λ°œκ²¬ν–ˆκ±°λ‚˜, μΈν„°νŽ˜μ΄μŠ€ 변경에 λŒ€μ‘ν•΄μ•Ό ν•  λ•ŒλΏμ΄λ‹€ [3]. * **μœ μ—°ν•œ λͺ¨μž ꡐ체(Swapping Hats):** μ‹€μ œ μ†Œν”„νŠΈμ›¨μ–΄ 개발 κ³Όμ •μ—μ„œ κ°œλ°œμžλŠ” 10λΆ„ μ •λ„μ˜ 짧은 μ‹œκ°„ λ™μ•ˆμ—λ„ μˆ˜μ‹œλ‘œ λͺ¨μžλ₯Ό λ°”κΏ” μ“°κ²Œ λœλ‹€ [7]. 예λ₯Ό λ“€μ–΄, μƒˆλ‘œμš΄ κΈ°λŠ₯을 μΆ”κ°€ν•˜λ €λ‹€ κΈ°μ‘΄ μ½”λ“œλ₯Ό λ‹€λ₯΄κ²Œ κ΅¬μ„±ν•˜λ©΄ 더 μ‰½κ² λ‹€λŠ” 것을 κΉ¨λ‹¬μœΌλ©΄ μž μ‹œ λ¦¬νŒ©ν† λ§ λͺ¨μžλ‘œ λ°”κΏ” μ“°κ³  μ½”λ“œλ₯Ό μ •λΉ„ν•œλ‹€ [7]. ꡬ쑰 κ°œμ„ μ΄ λλ‚˜λ©΄ λ‹€μ‹œ κΈ°λŠ₯ μΆ”κ°€ λͺ¨μžλ₯Ό μ“°κ³  μ½”λ“œλ₯Ό μ™„μ„±ν•œ λ’€, λ§ˆμ§€λ§‰μœΌλ‘œ λ‹€μ‹œ λ¦¬νŒ©ν† λ§ λͺ¨μžλ₯Ό μ“°κ³  μ½”λ“œλ₯Ό κΉ”λ”ν•˜κ²Œ λ‹€λ“¬λŠ” μ‹μœΌλ‘œ μ§„ν–‰λœλ‹€ [7]. μ΄λ•Œ 핡심은 ꡐ체가 λΉˆλ²ˆν•˜λ”λΌλ„ ν˜„μž¬ μ–΄λ–€ λͺ¨μžλ₯Ό μ“°κ³  μžˆλŠ”μ§€ 항상 μžκ°ν•˜λŠ” 것이닀 [4, 7]. ## ⚠️ λͺ¨μˆœ 및 μ—…λ°μ΄νŠΈ (Contradictions & Updates) * **λΆ€μž‘μš©(Side Effect) 및 버그 μˆ˜μ •μ˜ 유혹 ν†΅μ œ:** λ¦¬νŒ©ν† λ§ λͺ¨μžλ₯Ό μ“°κ³  κΈ°μ‘΄ μ½”λ“œλ₯Ό μž¬κ΅¬μ„±ν•˜λ‹€ 보면 μ½”λ“œκ°€ μ œλŒ€λ‘œ λ™μž‘ν•˜μ§€ μ•ŠλŠ” λΆ€λΆ„(버그 λ“±)을 λ°œκ²¬ν•  λ•Œκ°€ μžˆλ‹€ [8]. ν•˜μ§€λ§Œ μ΄λ•Œ 이λ₯Ό μ¦‰μ‹œ μˆ˜μ •ν•˜λ €λŠ” μœ ν˜Ήμ„ κ°•λ ₯히 μ°Έμ•„μ•Ό ν•œλ‹€ [4, 8]. λ¦¬νŒ©ν† λ§μ˜ λͺ©ν‘œλŠ” μ‹œμž‘ν•  λ•Œμ™€ λ˜‘κ°™μ€ κ²°κ³Όλ₯Ό λ„μΆœν•˜λŠ” 것이기 λ•Œλ¬Έμ—, 문제λ₯Ό λ°œκ²¬ν–ˆλ‹€λ©΄ μ½”λ“œ 변경을 λ©ˆμΆ”λŠ” λŒ€μ‹  인덱슀 μΉ΄λ“œ 등에 λ‚˜μ€‘μ— μˆ˜μ •ν•΄μ•Ό ν•  사항(ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€ μΆ”κ°€, κ΄€λ ¨ μ—†λŠ” λ¦¬νŒ©ν† λ§, λ¬Έμ„œ μž‘μ„± λ“±)을 λ©”λͺ¨ν•΄ 두고 ν˜„μž¬ μ§„ν–‰ 쀑인 λ¦¬νŒ©ν† λ§ μž‘μ—…μ—λ§Œ 집쀑해야 ν•œλ‹€ [4, 8]. * **디버깅 νš¨μœ¨μ„± μ €ν•˜ 및 컀밋(Commit) 뢄리 μ œμ•½:** κΈ°λŠ₯ μΆ”κ°€ ν™œλ™κ³Ό λ¦¬νŒ©ν† λ§ ν™œλ™μ„ λ’€μ„žμ–΄μ„œ μˆ˜ν–‰ν•  경우, μΆ”ν›„ μ½”λ“œμ—μ„œ λ°œμƒν•œ 버그가 μƒˆλ‘œμš΄ κΈ°λŠ₯ μΆ”κ°€λ‘œ μΈν•œ 것인지 λ¦¬νŒ©ν† λ§ κ³Όμ •μ—μ„œμ˜ μ‹€μˆ˜ λ•Œλ¬ΈμΈμ§€ κ·Έ 원인을 νŒŒμ•…ν•˜κΈ° 맀우 μ–΄λ €μ›Œμ Έ 디버깅 효율이 κΈ‰κ²©νžˆ μ €ν•˜λ˜λŠ” 치λͺ…적인 μ œμ•½μ΄ λ”°λ₯Έλ‹€ [2]. λ”°λΌμ„œ λ‹€λ₯Έ λ³€κ²½ 사항과 λ¦¬νŒ©ν† λ§μ„ μ² μ €νžˆ κ²©λ¦¬ν•˜μ—¬ 독립적인 컀밋(Commit) λ‹¨μœ„λ‘œ λΆ„λ¦¬ν•˜λŠ” 것이 μš”κ΅¬λœλ‹€ [5]. --- *Last updated: 2026-05-03* ## πŸ€– LLM ν™œμš© 힌트 (How to Use This Knowledge) **μ–Έμ œ 이 지식을 μ“°λŠ”κ°€:** - *(TODO)* **μ–Έμ œ μ“°λ©΄ μ•ˆ λ˜λŠ”κ°€:** - *(TODO)* ## πŸ§ͺ 검증 μƒνƒœ (Validation) - **정보 μƒνƒœ:** needs_review - **좜처 신뒰도:** A - **κ²€ν†  이유:** *(P-Reinforce Phase 1 μžλ™ μ •κ·œν™”. λ³Έλ¬Έ 검증 ν•„μš”.)* ## 🧬 쀑볡 검사 (Duplicate Check) - **κΈ°μ‘΄ μœ μ‚¬ λ¬Έμ„œ:** *(TODO: μΈλ±μ„œ ν΄λŸ¬μŠ€ν„° 리포트 μ°Έμ‘°)* - **처리 방식:** UPDATE (μžλ™ μ •κ·œν™”) - **처리 이유:** Phase 1 μ •κ·œν™” β€” μ˜› ν…œν”Œλ¦Ώ/λˆ„λ½ ν•„λ“œ 보강. ## πŸ”— 지식 μ—°κ²° (Graph) - **Parent:** [[10_Wiki/Topics]] - **Related:** *(TODO: μ΅œμ†Œ 2개)* - **Opposite / Trade-off:** *(TODO)* - **Raw Source:** 직접 μž…λ ₯ ## πŸ•“ λ³€κ²½ 이λ ₯ (Changelog) | λ‚ μ§œ | λ³€κ²½ λ‚΄μš© | 처리 방식 | 신뒰도 | |------|-----------|-----------|--------| | 2026-05-08 | P-Reinforce Phase 1 μ •κ·œν™” (frontmatter + 헀더 ν‘œμ€€ν™”) | UPDATE | A | ## πŸ’» μ½”λ“œ νŒ¨ν„΄ (Code Patterns) **νŒ¨ν„΄ 1:** *(TODO: 이 ν”„λ‘œμ νŠΈ μ»¨λ²€μ…˜ λ°˜μ˜ν•œ ꡬ쑰 μŠ€μΌˆλ ˆν†€)* ```text # TODO ``` ## πŸ€” μ˜μ‚¬κ²°μ • κΈ°μ€€ (Decision Criteria) **선택 Aλ₯Ό 써야 ν•  λ•Œ:** - *(TODO)* **선택 Bλ₯Ό 써야 ν•  λ•Œ:** - *(TODO)* **κΈ°λ³Έκ°’:** > *(TODO)* ## ❌ μ•ˆν‹°νŒ¨ν„΄ (Anti-Patterns) - **[μ•ˆν‹°νŒ¨ν„΄]:** *(TODO: 무엇을 ν•˜λ©΄ μ•ˆ λ˜λŠ”κ°€ + 이유 + λŒ€μ‹  무엇을)*