# [[Technical Debt]] ## πŸ“Œ Brief Summary 기술 뢀채(Technical Debt)λŠ” 단기적인 개발 속도λ₯Ό μœ„ν•΄ ꡬ쑰λ₯Ό λ¬΄μ‹œν•˜κ±°λ‚˜ μž„μ‹œλ°©νŽΈμœΌλ‘œ μ½”λ“œλ₯Ό μž‘μ„±ν•  λ•Œ μž₯기적으둜 λ°œμƒν•˜λŠ” μ½”λ“œμ˜ ν˜Όλž€κ³Ό μœ μ§€λ³΄μˆ˜ λΉ„μš©μ„ μ˜λ―Έν•©λ‹ˆλ‹€ [1]. ꢁ극적으둜 μž‘μ„±λœ "λͺ¨λ“  μ½”λ“œλŠ” 기술 뢀채(All code is tech debt)"둜 간주될 수 있으며, λΆˆν•„μš”ν•œ μž‰μ—¬ μ½”λ“œλ₯Ό μ œκ±°ν•˜λŠ” 것이 μ€‘μš”ν•©λ‹ˆλ‹€ [2]. λŒ€κ·œλͺ¨ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œλŠ” μΌκ΄€λœ λͺ…λͺ… κ·œμΉ™, ν™•μž₯ κ°€λŠ₯ν•œ μ•„ν‚€ν…μ²˜ λ„μž…, 그리고 지속적인 λ¦¬νŒ©ν† λ§μ„ 톡해 기술 뢀채λ₯Ό κ΄€λ¦¬ν•˜κ³  μΆ•μ†Œν•  수 μžˆμŠ΅λ‹ˆλ‹€ [1, 3, 4]. ## πŸ“– Core Content * **기술 λΆ€μ±„μ˜ λ°œμƒ 원인:** κ°œλ°œμžκ°€ 파일 ꡬ쑰 섀계λ₯Ό κ±΄λ„ˆλ›°κ³  λ‹¨κΈ°μ μœΌλ‘œ "κ·Έλƒ₯ 이 νŒŒμΌμ„ 여기에 λ‘μž"λŠ” μ‹μœΌλ‘œ μ½”λ“œλ₯Ό μž‘μ„±ν•˜λ©΄ λ‹¨κΈ°μ μœΌλ‘œλŠ” λΉ λ₯Ό 수 μžˆμœΌλ‚˜, μž₯κΈ°μ μœΌλ‘œλŠ” μ•„ν‚€ν…μ²˜μ˜ 뢕괴와 μ‹¬κ°ν•œ 기술 뢀채λ₯Ό μ΄ˆλž˜ν•©λ‹ˆλ‹€ [1]. λ˜ν•œ μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” κ³Όλ„ν•œ κΈ°λŠ₯μ΄λ‚˜ μ½”λ“œλ₯Ό λ‚¨κ²¨λ‘λŠ” 것도 뢀채가 λ©λ‹ˆλ‹€ [2]. * **ꡬ쑰적 접근을 ν†΅ν•œ 뢀채 관리:** * **Feature-Sliced Design (FSD):** μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ 도메인과 κΈ°λŠ₯ λ²”μœ„μ— 따라 μŠ¬λΌμ΄μŠ€ν•˜μ—¬ 단방ν–₯ μ˜μ‘΄μ„±μ„ κ°•μ œν•©λ‹ˆλ‹€. 이 κ΅¬μ‘°λŠ” λ‹€λ₯Έ κΈ°λŠ₯에 λΆ€μž‘μš©μ„ μ£Όμ§€ μ•Šκ³  각 λͺ¨λ“ˆμ„ λ…λ¦½μ μœΌλ‘œ μˆ˜μ •ν•˜κ±°λ‚˜ μž¬μž‘μ„±ν•  수 있게 ν•˜μ—¬ μ•„ν‚€ν…μ²˜μ  기술 뢀채λ₯Ό λ°©μ§€ν•©λ‹ˆλ‹€ [5, 6]. * **λͺ…λͺ… κ·œμΉ™ μ€€μˆ˜ (Naming Conventions):** μΌ€λ°₯ μΌ€μ΄μŠ€(kebab-case)λ‚˜ 파슀칼 μΌ€μ΄μŠ€(PascalCase) λ“± 일관성 있고 λͺ…ν™•ν•œ 파일 λͺ…λͺ… κ·œμΉ™μ„ μ μš©ν•˜λŠ” κ²ƒλ§ŒμœΌλ‘œλ„ μž₯기적으둜 기술 뢀채λ₯Ό 크게 쀄이고 νŒ€μ› κ°„μ˜ ν˜‘μ—…μ„ μ‰½κ²Œ λ§Œλ“­λ‹ˆλ‹€ [4]. * **λ¦¬νŒ©ν† λ§κ³Ό 뢀채 μƒν™˜:** μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ μ˜€λž˜λ¨μ— 따라 μ½”λ“œλ² μ΄μŠ€λ₯Ό κ±΄κ°•ν•˜κ²Œ μœ μ§€ν•˜κΈ° μœ„ν•΄ 전문적인 λ¦¬νŒ©ν† λ§μ΄ ν•„μˆ˜μ μž…λ‹ˆλ‹€. μ΄λŠ” μ½”λ“œλ₯Ό "κ³ μΉ˜λŠ”" 것이 μ•„λ‹ˆλΌ λ™μž‘μ„ μœ μ§€ν•˜λ©΄μ„œ ꡬ쑰λ₯Ό κ°œμ„ ν•˜λŠ” μž‘μ—…μž…λ‹ˆλ‹€ [3]. 특히 큰 μ»΄ν¬λ„ŒνŠΈμ˜ λΉ„μ¦ˆλ‹ˆμŠ€ λ‘œμ§μ„ 'μ»€μŠ€ν…€ ν›…(Custom Hooks)'으둜 λΆ„λ¦¬ν•˜λŠ” 것이 ν˜„λŒ€ Reactμ—μ„œ λ¦¬νŒ©ν† λ§μ˜ μ£Όμš” λ‹¨μœ„κ°€ λ©λ‹ˆλ‹€ [7]. ## βš–οΈ Trade-offs & Caveats 기술 뢀채λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄ κ΅¬ν˜• κΈ°μˆ μ—μ„œ μƒˆ 기술둜 μ‹œμŠ€ν…œμ„ 이전할 λ•Œ, **μ™„μ „ν•œ μž¬μž‘μ„±(Complete rewrite)을 μ‹œλ„ν•˜λŠ” 것은 λ„ˆλ¬΄ μœ„ν—˜ν•œ 선택(too risky)**이 될 수 μžˆμŠ΅λ‹ˆλ‹€ [3]. λŒ€μ‹  μ•„ν‚€ν…μ²˜λ₯Ό ν˜„λŒ€ν™”ν•˜λ©΄μ„œλ„ κΈ°λŠ₯ κ°œλ°œμ„ 계속할 수 μžˆλ„λ‘ μ•Œλ¦Ό 같은 λ‹¨μˆœν•œ μœ ν‹Έλ¦¬ν‹°λΆ€ν„° μ‹œμž‘ν•΄ λ³΅μž‘ν•œ λ„λ©”μΈμœΌλ‘œ λ‚˜μ•„κ°€λŠ” "μž¬μž‘μ„±μ΄ μ•„λ‹Œ λ¦¬νŒ©ν† λ§(refactor, do not rewrite)" ν˜•νƒœμ˜ 점진적 λ§ˆμ΄κ·Έλ ˆμ΄μ…˜μ„ 채택해야 ν•˜λŠ” μ œμ•½μ΄ λ”°λ¦…λ‹ˆλ‹€ [3]. λ˜ν•œ, 쀑볡 μ½”λ“œλ₯Ό 쀄이기 μœ„ν•΄(DRY 원칙) μ§€λ‚˜μΉ˜κ²Œ μΆ”μƒν™”ν•˜λ©΄ μ½”λ“œκ°€ μ›λž˜μ˜ 반볡된 ν˜•νƒœλ³΄λ‹€ μ΄ν•΄ν•˜κΈ° μ–΄λ €μ›Œμ Έ KISS(Keep It Simple, Stupid) 원칙을 μœ„λ°°ν•˜κ³  μƒˆλ‘œμš΄ ν˜•νƒœμ˜ ꡬ쑰적 뢀채와 λ³΅μž‘μ„±μ„ 낳을 수 μžˆλ‹€λŠ” λΆ€μž‘μš©μ΄ μžˆμŠ΅λ‹ˆλ‹€ [8, 9]. ## πŸ”— Knowledge Connections ### Related Concepts #### [μ•„ν‚€ν…μ²˜ 및 섀계 원칙] - [[Feature-Sliced Design]] - μ—°κ²° 이유: μ•„ν‚€ν…μ²˜μ˜ μ±…μž„μ„ λΆ„λ¦¬ν•˜κ³  λͺ¨λ“ˆν™”λ₯Ό κ°•μ œν•˜μ—¬ μ½”λ“œ μˆ˜μ • μ‹œ λΆ€μž‘μš©μ„ μ—†μ•°μœΌλ‘œμ¨, 기술 뢀채 λˆ„μ μ„ μ›μ²œμ μœΌλ‘œ μ°¨λ‹¨ν•˜λŠ” 방법둠이기 λ•Œλ¬Έμž…λ‹ˆλ‹€ [6, 10]. - 이 κ°œλ…μ„ 톡해 더 깊게 이해할 수 μžˆλŠ” λΆ€λΆ„: λŒ€κ·œλͺ¨ React μ‹œμŠ€ν…œμ—μ„œ 기술 뢀채 없이 ν™•μž₯ κ°€λŠ₯ν•œ ꡬ쑰λ₯Ό μ„€κ³„ν•˜λŠ” 방법과 λ ˆμ΄μ–΄(Layer), 슬라이슀(Slice) 기반의 단방ν–₯ μ˜μ‘΄μ„± 원리 [10, 11]. - [[KISS and YAGNI]] - μ—°κ²° 이유: μ½”λ“œλ₯Ό λ‹¨μˆœν•˜κ²Œ μœ μ§€(KISS)ν•˜κ³ , λ―Έλž˜μ— ν•„μš”ν• μ§€λ„ λͺ¨λ₯Έλ‹€λŠ” 이유둜 λΆˆν•„μš”ν•œ κΈ°λŠ₯(YAGNI)을 미리 κ΅¬ν˜„ν•˜μ§€ μ•ŠμŒμœΌλ‘œμ¨ μœ μ§€λ³΄μˆ˜ν•΄μ•Ό ν•  뢀채 자체λ₯Ό μƒμ„±ν•˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€ [8, 12]. - 이 κ°œλ…μ„ 톡해 더 깊게 이해할 수 μžˆλŠ” λΆ€λΆ„: μ• μžμΌ ν™˜κ²½μ—μ„œ 사μž₯λ˜λŠ” μ½”λ“œ(Dead code)λ₯Ό 쀄이고 μ§€λ‚˜μΉœ 좔상화λ₯Ό ν”Όν•˜λŠ” 방법 [12]. #### [μ½”λ“œ μœ μ§€λ³΄μˆ˜ 및 관리] - [[Refactoring]] - μ—°κ²° 이유: λˆ„μ λœ 기술 뢀채λ₯Ό ν•΄κ²°ν•˜κ³  μ½”λ“œλ² μ΄μŠ€λ₯Ό κ±΄κ°•ν•˜κ²Œ μœ μ§€ν•˜κΈ° μœ„ν•œ 직접적이고 ν•„μˆ˜μ μΈ μ‹€μ²œ 방식이기 λ•Œλ¬Έμž…λ‹ˆλ‹€ [3]. - 이 κ°œλ…μ„ 톡해 더 깊게 이해할 수 μžˆλŠ” λΆ€λΆ„: μ»€μŠ€ν…€ ν›…(Custom hook)을 λ‹¨μœ„λ‘œ λΉ„μ¦ˆλ‹ˆμŠ€ 둜직과 UIλ₯Ό κ²©λ¦¬ν•˜λŠ” 기술 및 점진적 λ§ˆμ΄κ·Έλ ˆμ΄μ…˜(Incremental migration) μ „λž΅ [3, 7]. ### Deeper Research Questions - μ™„μ „ν•œ μž¬μž‘μ„±(rewrite)의 μœ„ν—˜μ„±μ„ ν”Όν•˜κΈ° μœ„ν•΄ 점진적 λ§ˆμ΄κ·Έλ ˆμ΄μ…˜(incremental migration)을 톡해 기술 뢀채λ₯Ό ν•΄κ²°ν•˜λŠ” ꡬ체적인 싀무적 μ ˆμ°¨λŠ” μ–΄λ– ν•œκ°€? - DRY(Don't Repeat Yourself) μ›μΉ™μ˜ κ³Όλ„ν•œ 적용이 였히렀 μ½”λ“œ λ³΅μž‘μ„±μ„ μ¦κ°€μ‹œν‚€κ³  μƒˆλ‘œμš΄ 기술 뢀채λ₯Ό μƒμ„±ν•˜λŠ” 경계선은 어디인가? - μ»΄ν¬λ„ŒνŠΈμ˜ 크기가 컀짐에 따라 단일 μ±…μž„ 원칙(SRP)을 μ μš©ν•΄ 기술 뢀채λ₯Ό μ‹λ³„ν•˜κ³  λΆ„λ¦¬ν•˜λŠ” 효과적인 기쀀은 무엇인가? - λŒ€κ·œλͺ¨ ν”„λ‘œμ νŠΈμ—μ„œ μ—„κ²©ν•œ 폴더 계측과 파일 λͺ…λͺ… κ·œμΉ™(Naming Conventions)이 기술 뢀채 κ°μ†Œμ— κΈ°μ—¬ν•˜λŠ” λ©”μ»€λ‹ˆμ¦˜μ€ 무엇인가? - "λͺ¨λ“  μ½”λ“œλŠ” 기술 뢀채닀"λΌλŠ” κ΄€μ μ—μ„œ, μœ μ§€λ³΄μˆ˜ 츑면의 뢀채λ₯Ό 쀄이기 μœ„ν•΄ μ œκ±°ν•΄μ•Ό ν•  μž‰μ—¬ μ½”λ“œ(Surplus code)λ₯Ό μ‹λ³„ν•˜λŠ” 방법은 무엇인가? ### Practical Application Contexts - **Implementation:** νŒŒμΌμ΄λ‚˜ μ»΄ν¬λ„ŒνŠΈλ₯Ό λ§Œλ“€ λ•Œ 단기적인 개발 속도λ₯Ό μœ„ν•΄ ꡬ쑰 없이 λ°°μΉ˜ν•˜λŠ” 것을 μ§€μ–‘ν•˜κ³ , μΌκ΄€λœ λͺ…λͺ… κ·œμΉ™κ³Ό 폴더 ꡬ쑰λ₯Ό μ² μ €νžˆ μ§€μΌœ μΆ”ν›„ λ°œμƒν•˜λŠ” 뢀채λ₯Ό μ˜ˆλ°©ν•©λ‹ˆλ‹€ [1, 4]. μž‰μ—¬ μ½”λ“œλŠ” λΆ€μ±„μ΄λ―€λ‘œ μ‹λ³„ν•˜μ—¬ μ œκ±°ν•©λ‹ˆλ‹€ [2]. - **System Design:** Feature-Sliced Designκ³Ό 같은 κΈ°λŠ₯/도메인 μ€‘μ‹¬μ˜ κ³„μΈ΅ν˜• μ•„ν‚€ν…μ²˜λ₯Ό λ„μž…ν•˜μ—¬, 각 κΈ°λŠ₯ λ‹¨μœ„κ°€ μ„œλ‘œ 암묡적인 κ²°ν•© 없이 λ…λ¦½μ μœΌλ‘œ λ¦¬νŒ©ν† λ§λ  수 μžˆλ„λ‘ μ‹œμŠ€ν…œμ„ κ΅¬μ„±ν•©λ‹ˆλ‹€ [6, 13]. - **Operation / Maintenance:** λ ˆκ±°μ‹œ μ½”λ“œλ₯Ό μ΅œμ‹  μƒνƒœλ‘œ 관리할 λ•Œ μ‹œμŠ€ν…œ 전체λ₯Ό μ—ŽλŠ” λŒ€μ‹ (Rewrite μ§€μ–‘), 둜컬 μƒνƒœλΆ€ν„° κΈ€λ‘œλ²Œ μƒνƒœ κ΄€λ¦¬κΉŒμ§€ ν•œ λ²ˆμ— ν•˜λ‚˜μ˜ μŠ€ν† μ–΄λ‚˜ λͺ¨λ“ˆμ”© μ μ§„μ μœΌλ‘œ μ΄λ™ν•˜λŠ” λ¦¬νŒ©ν† λ§μ„ μˆ˜ν–‰ν•©λ‹ˆλ‹€ [3, 7]. - **Learning Path:** Reactλ₯Ό ν•™μŠ΅ν•  λ•Œ λ‹¨μˆœνžˆ μ»΄ν¬λ„ŒνŠΈλ₯Ό λ Œλ”λ§ν•˜λŠ” 것을 λ„˜μ–΄ SOLID, DRY, KISS, YAGNI와 같은 μ†Œν”„νŠΈμ›¨μ–΄ μ—”μ§€λ‹ˆμ–΄λ§ 원칙을 μ ‘λͺ©ν•˜μ—¬, 읽기 쉽고 뢀채가 적은 Clean Code μž‘μ„±λ²•μ„ ν›ˆλ ¨ν•©λ‹ˆλ‹€ [14, 15]. - **My Project Relevance:** React μ½”λ“œλ² μ΄μŠ€λ₯Ό κ΄€λ¦¬ν•˜κ±°λ‚˜ λ„˜κ²¨λ°›μ•„ λ¦¬νŒ©ν† λ§ν•  λ•Œ, κ°€μž₯ λ¨Όμ € κ±°λŒ€ν•œ μ»΄ν¬λ„ŒνŠΈμ—μ„œ λΉ„μ¦ˆλ‹ˆμŠ€ λ‘œμ§μ„ μΆ”μΆœν•΄ Custom Hooks둜 λΆ„λ¦¬ν•˜μ—¬ μœ μ§€λ³΄μˆ˜μ„±κ³Ό ν…ŒμŠ€νŠΈ κ°€λŠ₯성을 λ†’μ΄λŠ” μž‘μ—…λΆ€ν„° μ°©μˆ˜ν•©λ‹ˆλ‹€ [7]. ### Adjacent Topics - [[Automated Governance]] - ν™•μž₯ λ°©ν–₯: ESLint, Prettier, Husky와 같은 μžλ™ν™” νˆ΄μ„ 톡해 νŒ€μ›λ“€μ˜ μ‹€μˆ˜λ‚˜ μž„μ˜μ μΈ μ½”λ“œ ꡬ쑰 변경을 막아 기술 뢀채가 μΆ•μ λ˜λŠ” 것을 μ‹œμŠ€ν…œμ μœΌλ‘œ λ°©μ§€ν•˜λŠ” λ°©λ²•μœΌλ‘œ 지식을 ν™•μž₯ν•  수 μžˆμŠ΅λ‹ˆλ‹€ [16]. --- *Last updated: 2026-04-30*