# [[Technical Debt Management]] ## πŸ“Œ Brief Summary 기술 뢀채 관리(Technical Debt Management)λŠ” κ°œλ°œμžκ°€ μž₯기적인 μ½”λ“œ ꡬ쑰보닀 단기적인 개발 속도λ₯Ό μš°μ„ μ‹œν•  λ•Œ μΆ•μ λ˜λŠ” λΉ„νš¨μœ¨μ μΈ μ½”λ“œλ₯Ό μ˜ˆλ°©ν•˜κ³  μž¬κ΅¬μ„±ν•˜λŠ” 지속적인 κ³Όμ •μž…λ‹ˆλ‹€ [1]. μ΅œμ‹  ν”„λ‘ νŠΈμ—”λ“œ ν™˜κ²½μ—μ„œ 이λ₯Ό κ΄€λ¦¬ν•˜λ €λ©΄ μ—„κ²©ν•œ 폴더 μ•„ν‚€ν…μ²˜μ™€ λͺ…λͺ… κ·œμΉ™μ„ μ μš©ν•˜κ³ , μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ κΈ°μ‘΄ λ™μž‘μ„ μœ μ§€ν•˜λ©΄μ„œ ꡬ쑰λ₯Ό κ°œμ„ ν•˜λŠ” 점진적인 λ¦¬νŒ©ν† λ§ μ „λž΅μ„ 채택해야 ν•©λ‹ˆλ‹€ [1-3]. ꢁ극적으둜 μž‘μ„±λœ "λͺ¨λ“  μ½”λ“œλŠ” 기술 뢀채"λΌλŠ” 인식을 λ°”νƒ•μœΌλ‘œ, μž‰μ—¬ μ½”λ“œλ₯Ό μ œκ±°ν•˜κ³  ꡬ쑰λ₯Ό ν˜„λŒ€ν™”ν•˜λŠ” 데 μ§‘μ€‘ν•˜λŠ” 것이 ν•΅μ‹¬μž…λ‹ˆλ‹€ [4]. ## πŸ“– Core Content * **원인과 예방 (Causes and Prevention):** 기술 λΆ€μ±„λŠ” 개발 κ³Όμ •μ—μ„œ ꡬ쑰적 원칙을 λ¬΄μ‹œν•˜κ³  νŒŒμΌμ„ λ¬΄λΆ„λ³„ν•˜κ²Œ λ°°μΉ˜ν•  λ•Œ 쑰용히 μŠ€λ©°λ“€λ©°, μž₯기적으둜 μœ μ§€λ³΄μˆ˜μ˜ ν˜Όλž€μ„ μ΄ˆλž˜ν•©λ‹ˆλ‹€ [1]. 이λ₯Ό μ˜ˆλ°©ν•˜λ €λ©΄ 일관성 μžˆλŠ” 폴더 ꡬ쑰λ₯Ό κ°–μΆ”μ–΄ κ°œλ°œμžμ—κ²Œ κ·œμœ¨μ„ λΆ€μ—¬ν•˜κ³ , μΌκ΄€λœ λͺ…λͺ… κ·œμΉ™(Naming Conventions)을 μ μš©ν•˜μ—¬ μ‹œκ°„μ΄ 지남에 따라 μŒ“μ΄λŠ” 기술 뢀채λ₯Ό 쀄여야 ν•©λ‹ˆλ‹€ [1, 3]. * **점진적 λ¦¬νŒ©ν† λ§ μ „λž΅ (Incremental Refactoring Strategy):** μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ 였래될수둝 μ½”λ“œλ² μ΄μŠ€λ₯Ό κ±΄κ°•ν•˜κ²Œ μœ μ§€ν•˜κΈ° μœ„ν•΄ λ¦¬νŒ©ν† λ§μ΄ ν•„μˆ˜μ μž…λ‹ˆλ‹€ [2]. 전체 μ‹œμŠ€ν…œμ„ μ™„μ „νžˆ λ‹€μ‹œ μž‘μ„±(Complete rewrite)ν•˜λŠ” 것은 μœ„ν—˜λ„κ°€ 맀우 λ†’κΈ° λ•Œλ¬Έμ—, "μž¬μž‘μ„±μ΄ μ•„λ‹Œ λ¦¬νŒ©ν† λ§(refactor, do not rewrite)" 철학을 기반으둜 ν•œ λ²ˆμ— ν•˜λ‚˜μ˜ λͺ¨λ“ˆμ΄λ‚˜ μŠ€ν† μ–΄μ”© λ³€κ²½ν•˜λŠ” 점진적 λ§ˆμ΄κ·Έλ ˆμ΄μ…˜μ„ μˆ˜ν–‰ν•΄μ•Ό ν•©λ‹ˆλ‹€ [2]. * **μ»€μŠ€ν…€ 훅을 ν†΅ν•œ λͺ¨λ“ˆν™” (Custom Hooks as Refactoring Units):** React κ°œλ°œμ—μ„œ λ¦¬νŒ©ν† λ§μ˜ μ£Όμš” λ‹¨μœ„λŠ” μ»€μŠ€ν…€ ν›…(Custom Hook)μž…λ‹ˆλ‹€ [5]. λ³΅μž‘ν•œ μ»΄ν¬λ„ŒνŠΈμ—μ„œ 데이터 νŽ˜μΉ­μ΄λ‚˜ 폼 핸듀링 λ“±μ˜ λΉ„μ¦ˆλ‹ˆμŠ€ λ‘œμ§μ„ μΆ”μΆœν•˜μ—¬ ν›…μœΌλ‘œ λΆ„λ¦¬ν•˜λ©΄, UI와 둜직이 λΆ„λ¦¬λ˜μ–΄ μ½”λ“œλ₯Ό λ…λ¦½μ μœΌλ‘œ ν…ŒμŠ€νŠΈν•˜κΈ° μ‰¬μ›Œμ§€κ³  기술 뢀채가 μ™„ν™”λ©λ‹ˆλ‹€ [5]. * **μ•„ν‚€ν…μ²˜ 뢀채 관리 (Architectural Debt Management):** κΈ°λŠ₯ λΆ„ν•  섀계(Feature-Sliced Design, FSD)와 같은 μ•„ν‚€ν…μ²˜ 방법둠을 λ„μž…ν•˜λ©΄ 각 λͺ¨λ“ˆμ„ λ‹€λ₯Έ 뢀뢄에 λŒ€ν•œ λΆ€μž‘μš©(Side effects) 없이 λ…λ¦½μ μœΌλ‘œ μˆ˜μ •ν•˜κ±°λ‚˜ λ¦¬νŒ©ν† λ§ν•  수 μžˆμŠ΅λ‹ˆλ‹€ [6]. λͺ…ν™•ν•œ 경계와 단방ν–₯ μ˜μ‘΄μ„±μ„ κ°•μ œν•¨μœΌλ‘œμ¨, μƒˆλ‘œμš΄ κΈ°λŠ₯ μΆ”κ°€λ‚˜ μ„±λŠ₯ μ΅œμ ν™” μž‘μ—… μ‹œ μ•„ν‚€ν…μ²˜ 뢀채가 λˆ„μ λ˜λŠ” 것을 λ°©μ§€ν•©λ‹ˆλ‹€ [6, 7]. ## βš–οΈ Trade-offs & Caveats * **μ „λ©΄ μž¬μž‘μ„±(Complete Rewrite)의 μœ„ν—˜μ„±:** 였래된 κΈ°μˆ μ΄λ‚˜ ꡬ쑰λ₯Ό ν•œ λ²ˆμ— κ΅μ²΄ν•˜λŠ” 것은 λ§€λ ₯적으둜 보일 수 μžˆμœΌλ‚˜, 기쑴의 μ•ˆμ •μ„±μ„ 훼손할 μœ„ν—˜μ΄ μ»€μ„œ ꢌμž₯λ˜μ§€ μ•ŠμœΌλ©° λŠλ¦¬λ”λΌλ„ μ μ§„μ μœΌλ‘œ κ°œμ„ ν•΄μ•Ό ν•˜λŠ” μ œμ•½μ΄ λ”°λ¦…λ‹ˆλ‹€ [2]. * **κ³Όλ„ν•œ μΆ”μƒν™”μ˜ μ—­νš¨κ³Ό:** μ½”λ“œμ˜ 쀑볡을 쀄이기 μœ„ν•œ DRY(Don't Repeat Yourself) 원칙을 λ„ˆλ¬΄ 일찍 μ μš©ν•˜λ©΄, μ½”λ“œκ°€ μ§€λ‚˜μΉ˜κ²Œ λ³΅μž‘ν•΄μ§€λŠ” κ³Όλ„ν•œ μΆ”μƒν™”λΌλŠ” μƒˆλ‘œμš΄ 기술 뢀채λ₯Ό 낳을 수 μžˆμŠ΅λ‹ˆλ‹€ [8]. νŒ¨ν„΄μ΄ μ„Έ 번 반볡될 λ•ŒκΉŒμ§€ κΈ°λ‹€λ Έλ‹€κ°€ μΆ”μƒν™”ν•˜λŠ” 것이 μ‘°κΈ° μ΅œμ ν™”λ‘œ μΈν•œ λΆ€μž‘μš©μ„ λ§‰λŠ” λ°©λ²•μž…λ‹ˆλ‹€ [9]. * **λ‹¨μˆœμ„±(Simplicity) 쀑심 μ‘°κΈ° μ΅œμ ν™”μ˜ 함정:** 초기 개발 속도와 λ‹¨μˆœμ„±μ„ μœ„ν•΄ μ†μ‰¬μš΄ 도ꡬ(예: μ „μ—­ μƒνƒœμ— λ¬΄λΆ„λ³„ν•œ Context API μ‚¬μš©)λ₯Ό μ„ νƒν•˜λŠ” 것은, μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ μ»€μ‘Œμ„ λ•Œ κ³ ν†΅μŠ€λŸ¬μš΄ λŒ€κ·œλͺ¨ λ¦¬νŒ©ν† λ§μ„ μœ λ°œν•  수 μžˆμŠ΅λ‹ˆλ‹€ [10]. * **κΈ°λŠ₯ λΆ„ν•  μ„€κ³„μ˜ 초기 λ„μž… λΉ„μš©:** Feature-Sliced Design 같은 μ—„κ²©ν•œ κ΅¬μ‘°λŠ” λŒ€κ·œλͺ¨ μ•±μ˜ 뢀채λ₯Ό λ§‰λŠ” 데 νƒμ›”ν•˜μ§€λ§Œ, μ†Œκ·œλͺ¨ ν”„λ‘œμ νŠΈλ‚˜ κ²½ν—˜μ΄ 적은 νŒ€μ—κ²ŒλŠ” ν•™μŠ΅ 곑선이 κ°€νŒŒλ₯΄κ³  λΆˆν•„μš”ν•œ μ˜€λ²„ν—€λ“œλ‘œ μž‘μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€ [11, 12]. ## πŸ”— Knowledge Connections ### Related Concepts #### [μ•„ν‚€ν…μ²˜/기반 기술] - [[Feature-Sliced Design]] - μ—°κ²° 이유: ν”„λ‘œμ νŠΈλ₯Ό κΈ°λŠ₯κ³Ό 도메인 μŠ€μ½”ν”„μ— 따라 λΆ„ν• ν•˜μ—¬, μ½”λ“œλ₯Ό λ³€κ²½ν•  λ•Œ μ‹œμŠ€ν…œ μ „μ²΄λ‘œ νŒŒκΈ‰ νš¨κ³Όκ°€ νΌμ§€λŠ” 것을 막고 뢀채λ₯Ό κ΅­μ†Œν™”ν•©λ‹ˆλ‹€ [6, 13]. - 이 κ°œλ…μ„ 톡해 더 깊게 이해할 수 μžˆλŠ” λΆ€λΆ„: 예츑 κ°€λŠ₯ν•œ μ˜μ‘΄μ„± 경계λ₯Ό μ„€κ³„ν•˜μ—¬ μ–΄λ–»κ²Œ λŒ€κ·œλͺ¨ λ¦¬νŒ©ν† λ§μ„ μ•ˆμ „ν•˜κ²Œ μˆ˜ν–‰ν•  수 μžˆλŠ”μ§€ 이해할 수 μžˆμŠ΅λ‹ˆλ‹€. - [[Incremental Migration]] - μ—°κ²° 이유: λ ˆκ±°μ‹œ κΈ°μˆ μ„ ν˜„λŒ€ν™”ν•  λ•Œ 전체λ₯Ό νκΈ°ν•˜λŠ” λŒ€μ‹  μ μ§„μ μœΌλ‘œ 뢀채λ₯Ό μ²­μ‚°ν•΄ λ‚˜κ°€λŠ” κ°€μž₯ μ‹€μš©μ μ΄κ³  ꢌμž₯λ˜λŠ” λ°©μ‹μž…λ‹ˆλ‹€ [2]. - 이 κ°œλ…μ„ 톡해 더 깊게 이해할 수 μžˆλŠ” λΆ€λΆ„: μƒˆλ‘œμš΄ κΈ°λŠ₯ 개발과 기술 뢀채 μƒν™˜μ„ λ™μ‹œμ— μ§„ν–‰ν•˜λŠ” 싀무 μ „λž΅μ„ νŒŒμ•…ν•  수 μžˆμŠ΅λ‹ˆλ‹€. #### [κ΅¬ν˜„/μ½”λ“œ ν’ˆμ§ˆ 원칙] - [[DRY (Don't Repeat Yourself)]] - μ—°κ²° 이유: 쀑볡 μ½”λ“œ μ œκ±°λŠ” 뢀채 κ΄€λ¦¬μ˜ κΈ°λ³Έμ΄μ§€λ§Œ, λ§Ήλͺ©μ μΈ μ μš©μ€ μ½”λ“œλ₯Ό 'KISS' μ›μΉ™μ—μ„œ λ©€μ–΄μ§€κ²Œ ν•˜μ—¬ 였히렀 μœ μ§€λ³΄μˆ˜ 뢀채λ₯Ό μ¦κ°€μ‹œν‚΅λ‹ˆλ‹€ [8, 9]. - 이 κ°œλ…μ„ 톡해 더 깊게 이해할 수 μžˆλŠ” λΆ€λΆ„: μ˜¬λ°”λ₯Έ 좔상화 타이밍과 원칙 κ°„μ˜ 상좩 관계(Trade-off)λ₯Ό 배울 수 μžˆμŠ΅λ‹ˆλ‹€. - [[Custom Hooks]] - μ—°κ²° 이유: λš±λš±ν•΄μ§„ React μ»΄ν¬λ„ŒνŠΈλ₯Ό μž‘κ³  ν…ŒμŠ€νŠΈ κ°€λŠ₯ν•œ λ‹¨μœ„λ‘œ μͺΌκ°œλŠ” 핡심적인 λ¦¬νŒ©ν† λ§ λ„κ΅¬μž…λ‹ˆλ‹€ [5]. - 이 κ°œλ…μ„ 톡해 더 깊게 이해할 수 μžˆλŠ” λΆ€λΆ„: UI μ»΄ν¬λ„ŒνŠΈμ—μ„œ λΉ„μ¦ˆλ‹ˆμŠ€ 둜직과 μƒνƒœ 관리λ₯Ό λΆ„λ¦¬ν•˜λŠ” μ‹€μš©μ μΈ 기법을 배울 수 μžˆμŠ΅λ‹ˆλ‹€. ### Deeper Research Questions - 전체 μ‹œμŠ€ν…œμ„ μ μ§„μ μœΌλ‘œ λ§ˆμ΄κ·Έλ ˆμ΄μ…˜(Incremental Migration)ν•  λ•Œ, 신ꡬ μƒνƒœ 관리 도ꡬ(예: Context API와 Zustand) κ°„μ˜ 데이터 동기화 및 ν•˜μœ„ ν˜Έν™˜μ„±μ„ μ–΄λ–»κ²Œ μœ μ§€ν•  것인가? - λŒ€κ·œλͺ¨ λͺ¨λ†€λ¦¬μ‹(Monolithic) 폴더 ꡬ쑰λ₯Ό κ°€μ§„ λ ˆκ±°μ‹œ ν”„λ‘œμ νŠΈμ— [[Feature-Sliced Design]]을 λ„μž…ν•˜κΈ° μœ„ν•œ κ°€μž₯ μ•ˆμ „ν•˜κ³  효율적인 단계별 μ ˆμ°¨λŠ” 무엇인가? - "λͺ¨λ“  μ½”λ“œλŠ” 기술 뢀채닀"λΌλŠ” κ΄€μ μ—μ„œ, μ‚¬μš©λ˜μ§€ μ•ŠλŠ” λ°λ“œ μ½”λ“œ(Dead Code)λ‚˜ λΆˆν•„μš”ν•œ λ Œλ”λ§ μš”μ†Œλ₯Ό μžλ™ μ‹λ³„ν•˜μ—¬ μ œκ±°ν•˜κΈ° μœ„ν•΄ μ–΄λ–€ 뢄석 도ꡬ(Profiler λ“±)λ₯Ό ν™œμš©ν•  수 μžˆλŠ”κ°€? - 좔상화λ₯Ό μ μš©ν•˜λŠ” 기쀀이 λ˜λŠ” 'Rule of Three(μ„Έ 번 반볡 μ‹œ 좔상화)'λ₯Ό λ³΅μž‘ν•œ ν”„λ‘ νŠΈμ—”λ“œ λΉ„μ¦ˆλ‹ˆμŠ€ λ‘œμ§μ— μ μš©ν•  λ•Œ λ§ˆμ£ΌμΉ˜λŠ” ν•œκ³„μ™€ μ˜ˆμ™Έ μ‚¬λ‘€λŠ” 무엇인가? - 초기 μŠ€νƒ€νŠΈμ—… ν™˜κ²½μ—μ„œ μ‹œμž₯ μΆœμ‹œ 속도λ₯Ό 높이기 μœ„ν•΄ λ°œμƒν•˜λŠ” 'μ˜λ„μ μΈ 기술 뢀채'λ₯Ό μΆ”ν›„ μƒν™˜ν•˜κΈ° μœ„ν•΄ κ°œλ°œνŒ€μ΄ λ„μž…ν•΄μ•Ό ν•  ν”„λ‘œμ„ΈμŠ€λŠ” 무엇인가? ### Practical Application Contexts - **Implementation:** λΉ„λŒ€ν•΄μ§„ React μ»΄ν¬λ„ŒνŠΈ λ‚΄λΆ€μ—μ„œ μƒνƒœ κ΄€λ¦¬λ‚˜ API 호좜 λ‘œμ§μ„ λ°œκ²¬ν–ˆμ„ λ•Œ, 이λ₯Ό λ³„λ„μ˜ Custom Hook으둜 μΆ”μΆœν•˜μ—¬ UI λ‘œμ§μ„ λ‹¨μˆœν™”ν•˜κ³  ν…ŒμŠ€νŠΈ κ°€λŠ₯성을 λ†’μ΄λŠ” λ¦¬νŒ©ν† λ§μ„ μˆ˜ν–‰ν•©λ‹ˆλ‹€ [4, 5]. - **System Design:** ν”„λ‘œμ νŠΈ μ…‹μ—… λ‹¨κ³„μ—μ„œ 미리 λͺ…λͺ… κ·œμΉ™(Naming Convention)κ³Ό κΈ°λŠ₯ λ‹¨μœ„μ˜ 폴더 μ•„ν‚€ν…μ²˜λ₯Ό κ°•μ œν•˜μ—¬, κ°œλ°œμžλ“€μ΄ 아무 ν΄λ”μ—λ‚˜ νŒŒμΌμ„ μΆ”κ°€ν•˜μ—¬ λ°œμƒν•˜λŠ” ꡬ쑰적 뢀채λ₯Ό 사전에 μ°¨λ‹¨ν•©λ‹ˆλ‹€ [1, 3]. - **Operation / Maintenance:** μƒνƒœ 관리 라이브러리λ₯Ό λ§ˆμ΄κ·Έλ ˆμ΄μ…˜ν•  λ•Œ 전체 앱을 ν•œ λ²ˆμ— λ°”κΎΈμ§€ μ•Šκ³  μ•Œλ¦Ό(Notification) κΈ°λŠ₯ λ“± μž‘μ€ μœ ν‹Έλ¦¬ν‹°λΆ€ν„° μ‹œμž‘ν•˜μ—¬ 결제 흐름 같은 λ³΅μž‘ν•œ λ„λ©”μΈμœΌλ‘œ λ‹¨κ³„μ μœΌλ‘œ λ¦¬νŒ©ν† λ§μ„ μ§„ν–‰ν•©λ‹ˆλ‹€ [2]. - **Learning Path:** λ¦¬νŒ©ν† λ§μ„ ν•™μŠ΅ν•  λ•Œ λ¨Όμ € μ½”λ“œμ— λ‹¨μœ„ ν…ŒμŠ€νŠΈ(Unit Tests)λ₯Ό μž‘μ„±ν•˜μ—¬ 기쑴의 λ™μž‘μ„ 보μž₯ν•œ 뒀에, SOLID 원칙과 Clean Code 원칙을 염두에 두고 λ ˆκ±°μ‹œ μ½”λ“œλ₯Ό μž‘κ²Œ λΆ„ν• ν•΄ λ‚˜κ°€λŠ” 방법을 ν›ˆλ ¨ν•©λ‹ˆλ‹€ [14, 15]. - **My Project Relevance:** ν˜„μž¬ μœ μ§€λ³΄μˆ˜ν•˜κ±°λ‚˜ μΈμˆ˜λ°›μ€ 낑은 μ½”λ“œλ² μ΄μŠ€λ₯Ό κ°œμ„ ν•΄μ•Ό ν•œλ‹€λ©΄, μš°μ„  κΈ°λŠ₯λ³„λ‘œ μ½”λ“œλ₯Ό κ·Έλ£Ήν™”ν•˜κ³  쀑볡 μ½”λ“œλ₯Ό μ°Ύμ•„λ‚΄μ–΄ μ μ§„μ μœΌλ‘œ λœμ–΄λ‚΄λŠ” λ°©ν–₯(Remove surplus)으둜 μž‘μ—…μ„ μ„€κ³„ν•©λ‹ˆλ‹€ [4, 16]. ### Adjacent Topics - [[Automated Testing]] - ν™•μž₯ λ°©ν–₯: 기술 뢀채λ₯Ό λ¦¬νŒ©ν† λ§ν•˜λŠ” κ³Όμ •μ—μ„œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ λ™μž‘μ΄ κΉ¨μ§€μ§€ μ•Šμ•˜μŒμ„ μžλ™μœΌλ‘œ κ²€μ¦ν•˜μ—¬ λ¦¬νŒ©ν† λ§μ˜ μ•ˆμ •μ„±μ„ 보μž₯ν•˜λŠ” 방법. - [[Static Code Analysis (ESLint/Prettier)]] - ν™•μž₯ λ°©ν–₯: 정적 뢄석 도ꡬλ₯Ό CI/CD νŒŒμ΄ν”„λΌμΈμ— ν†΅ν•©ν•˜μ—¬ μ•„ν‚€ν…μ²˜ κ·œμΉ™κ³Ό 클린 μ½”λ“œ 원칙을 μžλ™ κ°•μ œν•¨μœΌλ‘œμ¨ 기술 λΆ€μ±„μ˜ μœ μž…μ„ μ›μ²œ μ°¨λ‹¨ν•˜λŠ” λ°©μ•ˆ. --- *Last updated: 2026-04-30*