# [[Refactoring Legacy React Codebases]] ## πŸ“Œ Brief Summary λ ˆκ±°μ‹œ React μ½”λ“œλ² μ΄μŠ€ λ¦¬νŒ©ν† λ§μ€ κΈ°μ‘΄ μ•±μ˜ λ™μž‘μ„ λ³€κ²½ν•˜μ§€ μ•ŠμœΌλ©΄μ„œ 였래되고 λ³΅μž‘ν•œ μ½”λ“œλ₯Ό μœ μ§€λ³΄μˆ˜μ™€ ν™•μž₯이 μ‰¬μš΄ ν˜„λŒ€μ μΈ ꡬ쑰둜 κ°œμ„ ν•˜λŠ” μž‘μ—…μž…λ‹ˆλ‹€ [1-3]. 이 과정은 ν΄λž˜μŠ€ν˜• μ»΄ν¬λ„ŒνŠΈμ˜ μ „ν™˜, νƒ€μž…μŠ€ν¬λ¦½νŠΈ(TypeScript) λ„μž…, μ΅œμ‹  라이브러리 μ—…λ°μ΄νŠΈ 및 μƒνƒœ 관리 μ΅œμ ν™”λ₯Ό 톡해 μ½”λ“œμ˜ ν’ˆμ§ˆμ„ λ†’μ΄λŠ” 것을 λͺ©ν‘œλ‘œ ν•©λ‹ˆλ‹€ [4]. 성곡적인 λ¦¬νŒ©ν† λ§μ„ μœ„ν•΄μ„œλŠ” 사전에 λΉ„μ¦ˆλ‹ˆμŠ€ λ‘œμ§μ„ μ™„λ²½νžˆ νŒŒμ•…ν•˜κ³  ν…ŒμŠ€νŠΈ μ½”λ“œλ₯Ό μž‘μ„±ν•˜μ—¬ νšŒκ·€(regression)λ₯Ό λ°©μ§€ν•˜λŠ” 것이 ν•„μˆ˜μ μž…λ‹ˆλ‹€ [5, 6]. ## πŸ“– Core Content * **사전 뢄석 및 λ‹¨μœ„ ν…ŒμŠ€νŠΈ λ„μž…** λ¦¬νŒ©ν† λ§μ„ μ‹œμž‘ν•˜κΈ° μ „, μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ λΉ„μ¦ˆλ‹ˆμŠ€ 둜직, λΌμš°νŒ…, 인증 및 API 호좜 방식을 μ™„μ „νžˆ 이해해야 ν•©λ‹ˆλ‹€ [6, 7]. μ½”λ“œλ₯Ό μˆ˜μ •ν•˜λ©΄μ„œ κΈ°μ‘΄ κΈ°λŠ₯이 λ§κ°€μ§€λŠ” 것을 λ°©μ§€ν•˜κΈ° μœ„ν•΄ κ°€μž₯ λ¨Όμ € λ‹¨μœ„ ν…ŒμŠ€νŠΈ(Unit Test)λ₯Ό μž‘μ„±ν•˜λŠ” 것이 κ°•λ ₯히 ꢌμž₯λ©λ‹ˆλ‹€ [5, 8, 9]. `testing-library` 등을 ν™œμš©ν•˜μ—¬ ν…ŒμŠ€νŠΈλ₯Ό μž‘μ„±ν•˜λ©΄ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ λ™μž‘ 방식을 κ°•μ œλ‘œ ν•™μŠ΅ν•˜κ²Œ λ˜λŠ” 이점도 μžˆμŠ΅λ‹ˆλ‹€ [8]. * **μ»΄ν¬λ„ŒνŠΈ 및 μ½”λ“œ 베이슀 ν˜„λŒ€ν™”** μ½”λ“œλ² μ΄μŠ€κ°€ JavaScript둜 μž‘μ„±λ˜μ—ˆλ‹€λ©΄ TypeScript둜 μ—…λ°μ΄νŠΈν•˜λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€ [4]. λ˜ν•œ, 였래된 클래슀 기반 μ»΄ν¬λ„ŒνŠΈλ₯Ό ν•¨μˆ˜ν˜• μ»΄ν¬λ„ŒνŠΈμ™€ ν›…(Hooks)으둜 μ „ν™˜ν•˜κ³ , μ‚¬μš©μ΄ μ€‘λ‹¨λœ 라이브러리 및 React 버전을 μ΅œμ‹ μœΌλ‘œ μ—…λ°μ΄νŠΈν•΄μ•Ό ν•©λ‹ˆλ‹€ [4]. μ—¬λŸ¬ νŒŒμΌμ— ν˜Όμž¬λ˜μ–΄ μžˆλŠ” CSS μŠ€νƒ€μΌλ§ 방식(예: μ™ΈλΆ€ CSS, sx, style νƒœκ·Έ λ“±)은 ν•˜λ‚˜λ‘œ ν†΅μΌν•˜μ—¬ ν‘œμ€€ν™”ν•΄μ•Ό ν•©λ‹ˆλ‹€ [10-12]. * **μƒνƒœ 관리 μ΅œμ ν™” 및 점진적 λ§ˆμ΄κ·Έλ ˆμ΄μ…˜** λΆˆν•„μš”ν•œ `useEffect` μ‚¬μš©μ„ λͺ¨λ‘ μ œκ±°ν•˜μ—¬ μ„±λŠ₯을 μ΅œμ ν™”ν•΄μ•Ό ν•©λ‹ˆλ‹€ [4]. 기쑴의 무거운 μ „μ—­ μƒνƒœ 관리(예: Redux)λ₯Ό λœμ–΄λ‚΄κ³ , μ„œλ²„ μƒνƒœ κ΄€λ¦¬λŠ” TanStack Query둜, μ „μ—­ ν΄λΌμ΄μ–ΈνŠΈ μƒνƒœλŠ” Contextλ‚˜ Zustand둜, 둜컬 μƒνƒœλŠ” μ»΄ν¬λ„ŒνŠΈ λ‚΄λΆ€λ‘œ μœ„μΉ˜μ‹œν‚€λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€ [4]. ꡬ쑰λ₯Ό λ³€κ²½ν•  λ•ŒλŠ” "μ „λ©΄ μž¬μž‘μ„±(Rewrite)"이 μ•„λ‹Œ, ν•œ λ²ˆμ— ν•˜λ‚˜μ˜ μŠ€ν† μ–΄λ‚˜ μœ ν‹Έλ¦¬ν‹°μ”© λ³€κ²½ν•˜λŠ” "점진적 λ§ˆμ΄κ·Έλ ˆμ΄μ…˜" μ „λž΅μ„ μ·¨ν•΄μ•Ό ν•©λ‹ˆλ‹€ [1]. * **클린 μ½”λ“œ 및 μ—”μ§€λ‹ˆμ–΄λ§ 원칙 적용** ν•˜λ‚˜μ˜ μ»΄ν¬λ„ŒνŠΈμ— 혼재된 μ—¬λŸ¬ μ±…μž„λ“€μ„ λΆ„λ¦¬ν•˜μ—¬ μ»΄ν¬λ„ŒνŠΈμ˜ 크기λ₯Ό 쀄여야 ν•©λ‹ˆλ‹€ [13]. λ³΅μž‘ν•œ 데이터 νŽ˜μΉ­μ΄λ‚˜ 폼 핸듀링 같은 λΉ„μ¦ˆλ‹ˆμŠ€ λ‘œμ§μ€ μ»€μŠ€ν…€ ν›…(Custom Hooks)으둜 μΆ”μΆœν•˜μ—¬ λͺ¨λ“ˆμ„±κ³Ό ν…ŒμŠ€νŠΈ κ°€λŠ₯성을 λ†’μ—¬μ•Ό ν•©λ‹ˆλ‹€ [14]. λ˜ν•œ, ESLintλ₯Ό λ„μž…ν•˜μ—¬ λͺ¨λ²” 사둀와 μŠ€νƒ€μΌμ„ κ°•μ œν•˜κ³ , DRY(Don't Repeat Yourself) 및 YAGNI(You Aren't Gonna Need It) 원칙을 μ μš©ν•΄ λΆˆν•„μš”ν•œ μ½”λ“œλ₯Ό μ •λ¦¬ν•˜λŠ” 것이 μ€‘μš”ν•©λ‹ˆλ‹€ [15, 16]. ## πŸ”— Knowledge Connections - **Related Topics:** [[Clean Code Principles]], [[State Management]], [[Software Engineering Principles]], [[Unit Testing]] - **Projects/Contexts:** [[React Frontend Development]], [[Legacy System Migration]] - **Contradictions/Notes:** μ•±μ˜ 규λͺ¨κ°€ μž‘μ„ 경우, κΈ°μ‘΄ μ½”λ“œλ₯Ό λ¦¬νŒ©ν† λ§ν•˜λŠ” 것보닀 차라리 μ²˜μŒλΆ€ν„° μƒˆλ‘œμš΄ 앱을 λ‹€μ‹œ μž‘μ„±ν•˜λŠ” 것이 더 μ‰¬μšΈ μˆ˜λ„ μžˆλ‹€λŠ” μ˜κ²¬λ„ μ‘΄μž¬ν•©λ‹ˆλ‹€ [17]. λ˜ν•œ μ½”λ“œλ₯Ό μ „λ©΄ μž¬μž‘μ„±(Rewrite)ν•˜κΈ°λ³΄λ‹€λŠ” μ•ˆμ „ν•œ 점진적 λ¦¬νŒ©ν† λ§(Incremental Migration)을 μˆ˜ν–‰ν•˜λŠ” 것이 μ‹œμŠ€ν…œ μ•ˆμ •μ„± μΈ‘λ©΄μ—μ„œ ꢌμž₯λ©λ‹ˆλ‹€ [1]. --- *Last updated: 2026-04-26*