# [[Legacy React Codebase Refactoring]] ## πŸ“Œ Brief Summary λ ˆκ±°μ‹œ React μ½”λ“œλ² μ΄μŠ€ λ¦¬νŒ©ν† λ§μ€ κΈ°μ‘΄ μ†Œν”„νŠΈμ›¨μ–΄μ˜ λ™μž‘μ„ μ˜¨μ „νžˆ λ³΄μ‘΄ν•˜λ©΄μ„œ, μ½”λ“œμ˜ 가독성, μœ μ§€λ³΄μˆ˜μ„±, ν™•μž₯성을 κ°œμ„ ν•˜κΈ° μœ„ν•΄ λ‚΄λΆ€ ꡬ쑰λ₯Ό μž¬μ„€κ³„ν•˜λŠ” κ³Όμ •μž…λ‹ˆλ‹€ [1]. 이 과정은 νšŒκ·€ 였λ₯˜λ₯Ό 막기 μœ„ν•œ λ‹¨μœ„ ν…ŒμŠ€νŠΈ(Unit Test) μž‘μ„±λΆ€ν„° μ‹œμž‘ν•˜μ—¬, 클래슀 기반 μ»΄ν¬λ„ŒνŠΈλ₯Ό ν•¨μˆ˜ν˜• 및 ν›…(Hooks)으둜 μ „ν™˜ν•˜κ³ , μƒνƒœ 관리 도ꡬλ₯Ό ν˜„λŒ€ν™”(예: Reduxμ—μ„œ TanStack Queryλ‚˜ Zustand둜 λ§ˆμ΄κ·Έλ ˆμ΄μ…˜)ν•˜λŠ” μž‘μ—…μ„ ν¬ν•¨ν•©λ‹ˆλ‹€ [2, 3]. 성곡적인 λ¦¬νŒ©ν† λ§μ€ 전체λ₯Ό ν•œ λ²ˆμ— κ°ˆμ•„μ—ŽλŠ” μž¬μž‘μ„±(Rewrite)을 ν”Όν•˜κ³ , μ»€μŠ€ν…€ 훅을 톡해 UI와 λΉ„μ¦ˆλ‹ˆμŠ€ λ‘œμ§μ„ λΆ„λ¦¬ν•˜λŠ” λ“± 점진적(Incremental)인 μ΅œμ ν™”λ₯Ό μˆ˜ν–‰ν•˜λŠ” 데 μ΄ˆμ μ„ 맞μΆ₯λ‹ˆλ‹€ [1, 4]. ## πŸ“– Core Content * **λΉ„μ¦ˆλ‹ˆμŠ€ 둜직 νŒŒμ•… 및 λ‹¨μœ„ ν…ŒμŠ€νŠΈ μ„ ν–‰:** λ ˆκ±°μ‹œ λ¦¬νŒ©ν† λ§μ˜ μ²«κ±ΈμŒμ€ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ λΉ„μ¦ˆλ‹ˆμŠ€ 둜직과 μ „μ—­ UI μŠ€ν† μ–΄μ— λ³΄κ΄€λœ 데이터λ₯Ό νŒŒμ•…ν•˜μ—¬ λ©˜νƒˆ λͺ¨λΈ(Mental model)을 κ·Έλ¦¬λŠ” κ²ƒμž…λ‹ˆλ‹€ [5]. μ½”λ“œλ₯Ό μˆ˜μ •ν•˜κΈ° μ „ λ‹¨μœ„ ν…ŒμŠ€νŠΈ(Unit tests)λ‚˜ UI ν…ŒμŠ€νŠΈ μ œν’ˆκ΅°μ„ λ¨Όμ € μž‘μ„±ν•˜μ—¬, λ¦¬νŒ©ν† λ§ κ³Όμ •(TS λ³€ν™˜, ν›… μ „ν™˜, 라이브러리 μ—…κ·Έλ ˆμ΄λ“œ λ“±)μ—μ„œ κΈ°μ‘΄ κΈ°λŠ₯이 μ†μƒλ˜μ§€ μ•Šμ•˜μŒμ„ 검증해야 ν•©λ‹ˆλ‹€ [2, 6, 7]. * **λͺ¨λ˜ React νŒ¨λŸ¬λ‹€μž„μœΌλ‘œμ˜ μ „ν™˜:** κΈ°μ‘΄ μ½”λ“œλ² μ΄μŠ€μ— μ‘΄μž¬ν•˜λŠ” ν΄λž˜μŠ€ν˜• μ»΄ν¬λ„ŒνŠΈλ₯Ό ν•¨μˆ˜ν˜• μ»΄ν¬λ„ŒνŠΈμ™€ ν›…μœΌλ‘œ λ§ˆμ΄κ·Έλ ˆμ΄μ…˜ν•©λ‹ˆλ‹€ [3]. ν”„λ‘œμ νŠΈκ°€ JavaScript둜만 이루어져 μžˆλ‹€λ©΄ TypeScript둜 μ μ§„μ μœΌλ‘œ μ „ν™˜ν•˜κ³ , μ˜€λž˜λ˜κ±°λ‚˜ μ‚¬μš© 쀑단(deprecated)된 라이브러리λ₯Ό μ—…λ°μ΄νŠΈν•©λ‹ˆλ‹€ [3]. λ˜ν•œ, λΆˆν•„μš”ν•œ `useEffect` μ‚¬μš©μ„ λͺ¨λ‘ μ œκ±°ν•˜κ³ , μ½”λ“œμ— ν˜Όμž¬λ˜μ–΄ μžˆλŠ” CSS μŠ€νƒ€μΌλ§ 방식(μ™ΈλΆ€ CSS, 인라인 style, sx λ“±)을 ν•œλ‘ κ°€μ§€μ˜ ν‘œμ€€ 방식(예: CSS modules)으둜 ν†΅μΌν•©λ‹ˆλ‹€ [3, 8, 9]. * **μƒνƒœ 관리 λ„κ΅¬μ˜ μ±…μž„ 뢄리:** κ³Όκ±° 단일 μ „μ—­ μŠ€ν† μ–΄(예: Redux)에 λ­‰μ³μžˆλ˜ μƒνƒœλ“€μ„ λΆ„λ¦¬ν•©λ‹ˆλ‹€. μ„œλ²„ μƒνƒœ(Server state) 관리λ₯Ό μœ„ν•΄μ„œλŠ” TanStack Queryλ₯Ό μΆ”κ°€ν•˜μ—¬ Redux μ˜μ‘΄λ„λ₯Ό 쀄이고, ν΄λΌμ΄μ–ΈνŠΈ μΈ‘ μ „μ—­ μƒνƒœλŠ” Context APIλ‚˜ Zustand둜 κ΄€λ¦¬ν•˜λ©°, μ§€μ—­ μƒνƒœ(Local state)λŠ” 가급적 각 μ»΄ν¬λ„ŒνŠΈ λ‚΄λΆ€λ‘œ κ²©λ¦¬ν•˜λŠ” 것이 λͺ¨λ²” μ‚¬λ‘€μž…λ‹ˆλ‹€ [3]. * **점진적 λ§ˆμ΄κ·Έλ ˆμ΄μ…˜(Incremental Migration)κ³Ό μ»€μŠ€ν…€ ν›…:** λ¦¬νŒ©ν† λ§ μ‹œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 전체λ₯Ό ν•œ λ²ˆμ— μž¬μž‘μ„±(rewrite)ν•˜λŠ” 것은 맀우 μœ„ν—˜ν•©λ‹ˆλ‹€. "μž¬μž‘μ„±μ΄ μ•„λ‹Œ λ¦¬νŒ©ν† λ§(refactor, do not rewrite)" 철학에 따라, ν•˜λ‚˜μ˜ μŠ€ν† μ–΄λ‚˜ λ‹¨μˆœν•œ κΈ°λŠ₯(예: μ•Œλ¦Ό)λΆ€ν„° μ‹œμž‘ν•΄ 결제 흐름과 같은 λ³΅μž‘ν•œ λ„λ©”μΈμœΌλ‘œ ν•˜λ‚˜μ”© 점진적 λ§ˆμ΄κ·Έλ ˆμ΄μ…˜μ„ μ§„ν–‰ν•΄μ•Ό ν•©λ‹ˆλ‹€ [1]. 이 κ³Όμ •μ—μ„œ 'μ»€μŠ€ν…€ ν›…'을 μ£Όμš” λ¦¬νŒ©ν† λ§ λ‹¨μœ„λ‘œ μ‚¬μš©ν•˜μ—¬, κ±°λŒ€ν•œ μ»΄ν¬λ„ŒνŠΈμ—μ„œ 데이터 νŽ˜μΉ­μ΄λ‚˜ 폼 μ²˜λ¦¬μ™€ 같은 λΉ„μ¦ˆλ‹ˆμŠ€ λ‘œμ§μ„ 뢄리해 λͺ¨λ“ˆμ„±κ³Ό ν…ŒμŠ€νŠΈ μš©μ΄μ„±μ„ λ†’μž…λ‹ˆλ‹€ [4]. * **κ·œμΉ™ 기반의 관리 및 μžλ™ν™”:** ESLint(eslint-plugin-react, eslint-plugin-react-hooks λ“±)λ₯Ό λ„μž…ν•˜μ—¬ μ½”λ“œ μŠ€νƒ€μΌκ³Ό λͺ¨λ²” 사둀λ₯Ό κ°•μ œν•˜κ³ , νŒ€ μ°¨μ›μ˜ μΌκ΄€λœ μ½”λ“œ ν’ˆμ§ˆμ„ μœ μ§€ν•©λ‹ˆλ‹€ [10]. 더 λ‚˜μ•„κ°€ Claude Code 같은 AI 도ꡬλ₯Ό ν™œμš©ν•΄ μ½”λ“œλ² μ΄μŠ€λ₯Ό 평가받고 μž‘μ€ λ‹¨μœ„μ˜ PR(Pull Request)을 μƒμ„±ν•˜κ²Œ ν•¨μœΌλ‘œμ¨ λ¦¬νŒ©ν† λ§ μ‹œκ°„μ„ 단좕할 수 μžˆμŠ΅λ‹ˆλ‹€ [11, 12]. ## βš–οΈ Trade-offs & Caveats * **μ „λ©΄ μž¬μž‘μ„±(Rewrite) vs 점진적 λ¦¬νŒ©ν† λ§:** κΈ°μ‘΄ μ•±μ˜ 규λͺ¨κ°€ 맀우 μž‘λ‹€λ©΄ 였히렀 λ°”λ‹₯λΆ€ν„° μƒˆ 앱을 μž‘μ„±ν•˜λŠ” 것이 λ¦¬νŒ©ν† λ§λ³΄λ‹€ 쉽고 λΉ λ₯Ό 수 μžˆμŠ΅λ‹ˆλ‹€ [6]. κ·ΈλŸ¬λ‚˜ 규λͺ¨κ°€ 큰 μ•±μ˜ 경우 μž¬μž‘μ„±μ€ λ¦¬μŠ€ν¬κ°€ λ„ˆλ¬΄ ν¬λ―€λ‘œ, κΈ°λŠ₯ κ°œλ°œμ„ λ©ˆμΆ”μ§€ μ•Šμ€ μƒνƒœμ—μ„œ μ•„ν‚€ν…μ²˜λ₯Ό ν˜„λŒ€ν™”ν•˜λŠ” '점진적 λ§ˆμ΄κ·Έλ ˆμ΄μ…˜' 방식을 택해야 ν•©λ‹ˆλ‹€ [1]. * **좔상화와 λ‹¨μˆœμ„±μ˜ 좩돌 (DRY vs KISS):** DRY(Don't Repeat Yourself) 원칙에 따라 쀑볡 μ½”λ“œλ₯Ό μΆ”μΆœν•˜λŠ” 것은 μ’‹μ§€λ§Œ, κ³Όλ„ν•œ μΆ”μƒν™”λŠ” 원본 μ½”λ“œλ₯Ό μ—¬λŸ¬ 번 λ°˜λ³΅ν•˜λŠ” 것보닀 였히렀 디버깅과 이해λ₯Ό 더 μ–΄λ ΅κ²Œ λ§Œλ“€μ–΄ KISS(Keep It Simple, Stupid) 원칙을 μœ„λ°°ν•˜κ²Œ 될 λΆ€μž‘μš©μ΄ μžˆμŠ΅λ‹ˆλ‹€ [13]. λ”°λΌμ„œ νŒ¨ν„΄μ΄ μ΅œμ†Œ μ„Έ 번 이상 반볡되기 μ „κΉŒμ§€λŠ” μ‘°κΈ° μ΅œμ ν™”λ‚˜ λ³΅μž‘ν•œ 좔상화λ₯Ό ν”Όν•˜λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€ [13]. * **μƒˆλ‘œμš΄ 도ꡬ(TypeScript λ“±) λ„μž…μ˜ μ˜€λ²„ν—€λ“œ:** νƒ€μž…μŠ€ν¬λ¦½νŠΈλ₯Ό μΆ”κ°€ν•˜κ±°λ‚˜ μƒˆλ‘œμš΄ μƒνƒœ 관리 νŒ¨ν„΄μ„ μž…νžˆλŠ” 것은 μ•ˆμ „μ„±μ„ λ†’μ΄μ§€λ§Œ, μ½”λ“œλ² μ΄μŠ€μ— λ³΅μž‘μ„±μ„ λ”ν•˜κ³  νŒ€μ›λ“€μ—κ²Œ 인지적 λΆ€ν•˜λ₯Ό μ€λ‹ˆλ‹€ [14]. λ”°λΌμ„œ κ°œλ°œμžλ“€μ˜ μˆ™λ ¨λ„λ₯Ό κ³ λ €ν•˜μ—¬ JS νŒŒμΌμ„ TS 파일둜 ν•œ κ°œμ”© μ μ§„μ μœΌλ‘œ λ³€ν™˜ν•˜λŠ” μ‹μ˜ 접근이 ꢌμž₯λ©λ‹ˆλ‹€ [14]. ## πŸ”— Knowledge Connections ### Related Concepts #### [관계 μœ ν˜• A (μ•„ν‚€ν…μ²˜/기반 기술)] - [[Feature-Sliced Design]] - μ—°κ²° 이유: λ ˆκ±°μ‹œ μ½”λ“œμ˜ λ‚œν•΄ν•œ 폴더 ꡬ쑰λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄, μ½”λ“œλ₯Ό 기술적 계측이 μ•„λ‹Œ λΉ„μ¦ˆλ‹ˆμŠ€ κΈ°λŠ₯(Feature)κ³Ό μ±…μž„ λ²”μœ„μ— 따라 λΆ„ν• ν•˜λŠ” μ΅œμ‹  μ•„ν‚€ν…μ²˜ 방법둠이기 λ•Œλ¬Έμž…λ‹ˆλ‹€ [15, 16]. - 이 κ°œλ…μ„ 톡해 더 깊게 이해할 수 μžˆλŠ” λΆ€λΆ„: κ±°λŒ€ν•˜κ³  κ°•ν•˜κ²Œ κ²°ν•©λœ μ»΄ν¬λ„ŒνŠΈλ“€μ„ 응집도 높은 λͺ¨λ“ˆλ‘œ μͺΌκ°œλŠ” κΈ°μ€€κ³Ό 단방ν–₯ μ˜μ‘΄μ„± ꡬ쑰λ₯Ό μ„€κ³„ν•˜λŠ” 방법 [16]. - [[SOLID Principles]] - μ—°κ²° 이유: 단일 μ±…μž„ 원칙(SRP) 등은 λ³΅μž‘ν•˜κ²Œ μ–½νžŒ μ»΄ν¬λ„ŒνŠΈ λ‘œμ§μ„ 더 μž‘κ³  ν•œ κ°€μ§€ 일만 ν•˜λŠ” μ»΄ν¬λ„ŒνŠΈλ‘œ λ¦¬νŒ©ν† λ§ν•˜λŠ” 데 핡심적인 κ°€μ΄λ“œλΌμΈμ„ μ œκ³΅ν•©λ‹ˆλ‹€ [17]. - 이 κ°œλ…μ„ 톡해 더 깊게 이해할 수 μžˆλŠ” λΆ€λΆ„: κ±°λŒ€ν•œ μ»΄ν¬λ„ŒνŠΈκ°€ μ–Έμ œ, 그리고 μ™œ ν›…κ³Ό ν•˜μœ„ μ»΄ν¬λ„ŒνŠΈλ‘œ λΆ„λ¦¬λ˜μ–΄μ•Ό ν•˜λŠ”μ§€μ— λŒ€ν•œ 객관적 νŒλ‹¨ κΈ°μ€€ [11, 17]. #### [관계 μœ ν˜• B (κ΅¬ν˜„/ν™œμš© 도ꡬ)] - [[Unit Testing]] - μ—°κ²° 이유: μ½”λ“œλ₯Ό λ¦¬νŒ©ν† λ§ν•  λ•Œ κΈ°μ‘΄ 둜직이 망가지지 μ•Šμ•˜μŒμ„ 보μž₯ν•˜κΈ° μœ„ν•΄ μ„ ν–‰λ˜μ–΄μ•Ό ν•˜λŠ” κ°€μž₯ μ€‘μš”ν•œ 싀무 도ꡬ이기 λ•Œλ¬Έμž…λ‹ˆλ‹€ [2, 7]. - 이 κ°œλ…μ„ 톡해 더 깊게 이해할 수 μžˆλŠ” λΆ€λΆ„: μ½”λ“œλ² μ΄μŠ€λ₯Ό μ•ˆμ „ν•˜κ²Œ ν•΄μ²΄ν•˜κ³  λͺ¨λ“ˆν™”ν•˜κΈ° μœ„ν•œ ν…ŒμŠ€νŠΈ 기반 접근법과 νšŒκ·€ 버그 λ°©μ–΄ μ „λž΅ [7]. - [[Zustand]] - μ—°κ²° 이유: κΈ°μ‘΄ λ ˆκ±°μ‹œ μ•±μ—μ„œ ν”νžˆ λ°œμƒν•˜λŠ” Context API의 λΆˆν•„μš”ν•œ λ Œλ”λ§ λ¬Έμ œλ‚˜, 무겁고 λ³΅μž‘ν•œ Redux μ½”λ“œλ₯Ό λ¦¬νŒ©ν† λ§ν•  λ•Œ κ°€μž₯ ꢌμž₯λ˜λŠ” κ²½λŸ‰ μƒνƒœ 관리 라이브러리이기 λ•Œλ¬Έμž…λ‹ˆλ‹€ [3, 18, 19]. - 이 κ°œλ…μ„ 톡해 더 깊게 이해할 수 μžˆλŠ” λΆ€λΆ„: μƒνƒœλ₯Ό λΆ„λ¦¬ν•˜κ³  μ…€λ ‰ν„°(Selector) νŒ¨ν„΄μ„ μ μš©ν•˜μ—¬ κΈ€λ‘œλ²Œ μƒνƒœ λ³€κ²½ μ‹œ λ°œμƒν•˜λŠ” μ„±λŠ₯ 병λͺ©μ„ ν•΄κ²°ν•˜λŠ” 원리 [20, 21]. ### Deeper Research Questions - λ ˆκ±°μ‹œ ν΄λž˜μŠ€ν˜• μ»΄ν¬λ„ŒνŠΈμ˜ 라이프사이클 λ©”μ„œλ“œ(`componentDidMount`, `componentDidUpdate` λ“±)λ₯Ό ν•¨μˆ˜ν˜• μ»΄ν¬λ„ŒνŠΈμ˜ ν›…(`useEffect` λ“±)으둜 λ³€ν™˜ν•  λ•Œ, 논리적 였λ₯˜ 없이 1:1둜 λ§€ν•‘ν•˜κ±°λ‚˜ ꡬ쑰λ₯Ό κ°œμ„ ν•˜λŠ” ꡬ체적인 νŒ¨ν„΄μ€ 무엇인가? - 점진적 λ§ˆμ΄κ·Έλ ˆμ΄μ…˜μ„ μ§„ν–‰ν•  λ•Œ, λ ˆκ±°μ‹œ μ‹œμŠ€ν…œμ˜ Redux μŠ€ν† μ–΄μ™€ μƒˆλ‘œμš΄ μ‹œμŠ€ν…œμ˜ Zustand/TanStack Query μƒνƒœλ₯Ό μ‹œμŠ€ν…œ μž₯μ• λ‚˜ 좩돌 없이 κ³΅μ‘΄μ‹œν‚€λŠ” 방법은 무엇인가? - UI λ¦¬νŒ©ν† λ§ κ³Όμ •μ—μ„œ λ ˆμ΄μ•„μ›ƒμ΄λ‚˜ 색상 λ“± μ˜λ„μΉ˜ μ•Šμ€ μ‹œκ°μ  νšŒκ·€(Visual regression)λ₯Ό λ°©μ§€ν•˜κΈ° μœ„ν•΄ Storybook 및 Chromaticκ³Ό 같은 도ꡬλ₯Ό μ–΄λ–»κ²Œ CI νŒŒμ΄ν”„λΌμΈμ— 톡합할 수 μžˆλŠ”κ°€? - FSD(Feature-Sliced Design) μ•„ν‚€ν…μ²˜λ₯Ό κΈ°μ‘΄ λ ˆκ±°μ‹œ μ½”λ“œλ² μ΄μŠ€μ— μ μš©ν•˜λ € ν•  λ•Œ, μ—¬λŸ¬ κΈ°λŠ₯(Feature) 간에 κ΅μ°¨ν•˜μ—¬ μ‚¬μš©λ˜λŠ” νš‘λ‹¨ 관심사(Cross-cutting concerns)λŠ” 어디에 μ–΄λ–»κ²Œ λ°°μΉ˜ν•΄μ•Ό ν•˜λŠ”κ°€? - React μ½”λ“œλ² μ΄μŠ€μ—μ„œ `useEffect`의 였용이 λŒ€ν‘œμ μΈ μ•ˆν‹°νŒ¨ν„΄μœΌλ‘œ κΌ½νžˆλŠ” μ΄μœ λŠ” 무엇이며, 이λ₯Ό 식별해 λ‚΄κ³  λŒ€μ²΄ νŒ¨ν„΄(νŒŒμƒ μƒνƒœ, 이벀트 ν•Έλ“€λŸ¬ λ“±)으둜 λ¦¬νŒ©ν† λ§ν•˜λŠ” 기쀀은 무엇인가? ### Practical Application Contexts - **Implementation:** κ±°λŒ€ν•œ 단일 파일둜 μž‘μ„±λœ μ»΄ν¬λ„ŒνŠΈ(300쀄 이상)λ‚˜ 혼재된 μŠ€νƒ€μΌ(인라인, μ™ΈλΆ€ 파일)을 κ°€μ§„ λ ˆκ±°μ‹œ μ½”λ“œλ₯Ό μ‹λ³„ν•œ ν›„, ESLint λ¦°ν„°λ₯Ό μΆ”κ°€ν•΄ κ·œμΉ™μ„ μ„Έμš°κ³  곡톡 λ‘œμ§μ„ μ»€μŠ€ν…€ ν›…μœΌλ‘œ λΆ„λ¦¬ν•˜λŠ” μž‘μ—…μ— μ¦‰μ‹œ μ μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. - **System Design:** ν”„λ‘œμ νŠΈμ˜ 폴더 ꡬ쑰λ₯Ό 기쑴의 기술 쀑심(components, hooks, styles) κ΅¬μ‘°μ—μ„œ 도메인 및 κΈ°λŠ₯ 쀑심(features 내뢀에 각 도메인 배치) ꡬ쑰둜 μž¬νŽΈμ„±ν•˜μ—¬ ν™•μž₯성을 κ°–μΆ˜ μ•„ν‚€ν…μ²˜λ‘œ νƒˆλ°”κΏˆμ‹œν‚΅λ‹ˆλ‹€. - **Operation / Maintenance:** κΈ°λŠ₯ 배포λ₯Ό μ€‘λ‹¨ν•˜μ§€ μ•Šκ³  운영 쀑인 μ‹œμŠ€ν…œμ—μ„œ "ν•œ λ²ˆμ— ν•˜λ‚˜μ˜ μŠ€ν† μ–΄" λ‹¨μœ„λ‘œ μ½”λ“œλ₯Ό μ μ§„μ μœΌλ‘œ λ¦¬νŒ©ν† λ§ν•˜λ©°, λ³€κ²½ 사항에 λŒ€ν•΄ CI/CD ν™˜κ²½μ—μ„œ ν…ŒμŠ€νŠΈ 톡과 μ—¬λΆ€λ₯Ό κ²€μ¦ν•©λ‹ˆλ‹€. - **Learning Path:** React 기초 μž₯λ‚œκ° μ•±(Toy app)을 직접 λ§Œλ“€μ–΄ μƒνƒœκ³„λ₯Ό μ΄ν•΄ν•œ λ’€, SOLID 및 DRY 원칙을 ν•™μŠ΅ν•˜κ³ , μ»€μŠ€ν…€ ν›…κ³Ό ν…ŒμŠ€νŠΈ μž‘μ„±λ²•μ„ 읡힌 ν›„ μ‹€μ œ λ ˆκ±°μ‹œ μ½”λ“œλ₯Ό κ°œμ„ ν•˜λŠ” λ°©ν–₯으둜 ν•™μŠ΅ λ‘œλ“œλ§΅μ„ μ„€κ³„ν•©λ‹ˆλ‹€. - **My Project Relevance:** λ‹€λ₯Έ κ°œλ°œμžλ“€μ΄ μž‘μ„±ν•œ 였래된 μ½”λ“œλ₯Ό μΈμˆ˜λ°›μ•„ μœ μ§€λ³΄μˆ˜ν•΄μ•Ό ν•  λ•Œ, μ½”λ“œλ₯Ό λ¬΄μž‘μ • λœ―μ–΄κ³ μΉ˜λŠ” λŒ€μ‹  λΉ„μ¦ˆλ‹ˆμŠ€ λ‘œμ§μ„ μš°μ„  λ§€ν•‘ν•˜κ³  λ‹¨μœ„ ν…ŒμŠ€νŠΈλ₯Ό 짜며 AI λ„κ΅¬μ˜ 도움을 λ°›μ•„ μ μ§„μ μœΌλ‘œ ꡬ쑰λ₯Ό μ •λˆν•˜λŠ” 싀무 μ§€μΉ¨μœΌλ‘œ ν™œμš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. ### Adjacent Topics - [[TanStack Query (React Query)]] - ν™•μž₯ λ°©ν–₯: 기쑴의 μ „μ—­ μƒνƒœ 관리 도ꡬ(Redux)μ—μ„œ κ΄€λ¦¬ν•˜λ˜ 'μ„œλ²„ μƒνƒœ'λ₯Ό λ–Όμ–΄λ‚΄μ–΄, μ–΄λ–»κ²Œ 효율적으둜 데이터 페칭(fetching), 캐싱, 그리고 동기화 처리λ₯Ό μžλ™ν™”ν•  수 μžˆλŠ”μ§€ νƒκ΅¬ν•©λ‹ˆλ‹€. - [[React Performance Optimization]] - ν™•μž₯ λ°©ν–₯: μ½”λ“œλ₯Ό λ¦¬νŒ©ν† λ§ν•˜λŠ” κ³Όμ •μ—μ„œ `React.memo`, `useMemo`, `useCallback`κ³Ό 같은 λ©”λͺ¨μ΄μ œμ΄μ…˜ 기법을 μ μž¬μ μ†Œμ— λ°°μΉ˜ν•΄ μ»΄ν¬λ„ŒνŠΈμ˜ λ Œλ”λ§ μ„±λŠ₯을 κ·ΉλŒ€ν™”ν•˜λŠ” λ°©μ•ˆμœΌλ‘œ 이해λ₯Ό λ„“νž™λ‹ˆλ‹€. --- *Last updated: 2026-04-30*