## ๐Ÿ“Œ Brief Summary React Refactoring์€ ๊ธฐ์กด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์™ธ๋ถ€ ๋™์ž‘์„ ์œ ์ง€ํ•˜๋ฉด์„œ ๋‚ด๋ถ€ ๊ตฌ์กฐ, ๊ฐ€๋…์„ฑ, ๋ชจ๋“ˆ์„ฑ์„ ํ˜„๋Œ€์  ํ‘œ์ค€์— ๋งž๊ฒŒ ๊ฐœ์„ ํ•˜๋Š” ์ž‘์—…์ด๋‹ค. ํด๋ž˜์Šคํ˜• ์ปดํฌ๋„ŒํŠธ์˜ ํ˜„๋Œ€ํ™”, ๋น„๋Œ€ํ•œ ์ปดํฌ๋„ŒํŠธ์˜ ๋ถ„๋ฆฌ, ์ตœ์‹  ์ƒํƒœ ๊ด€๋ฆฌ ์Šคํƒ(Zustand, Query) ๋„์ž…์„ ํ†ตํ•ด ๊ธฐ์ˆ  ๋ถ€์ฑ„๋ฅผ ์ƒํ™˜ํ•˜๊ณ  ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ์‹œ์Šคํ…œ์œผ๋กœ ์ง„ํ™”์‹œํ‚ค๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ•œ๋‹ค. ## ๐Ÿ“– Core Content 1. **์•ˆ์ „๋ง ํ™•๋ณด (Testing First)** - ๋ฆฌํŒฉํ† ๋ง ์ „ ๊ธฐ๋Šฅ ๊นจ์ง์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ๋‹จ์œ„ ํ…Œ์ŠคํŠธ์™€ UI ํ…Œ์ŠคํŠธ ์ˆ˜ํŠธ๋ฅผ ๋จผ์ € ๊ตฌ์ถ•ํ•œ๋‹ค. 2. **ํ˜„๋Œ€์  ํŒจ๋Ÿฌ๋‹ค์ž„ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜** - ํด๋ž˜์Šค ์ปดํฌ๋„ŒํŠธ๋ฅผ ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ์™€ ํ›…์œผ๋กœ ์ „ํ™˜ํ•˜๊ณ , ๋ถˆํ•„์š”ํ•œ `useEffect`๋ฅผ ์ œ๊ฑฐํ•œ๋‹ค. - JavaScript ์ฝ”๋“œ๋ฅผ TypeScript๋กœ ์ ์ง„์ ์œผ๋กœ ์ „ํ™˜ํ•˜์—ฌ ์ •์  ์•ˆ์ •์„ฑ์„ ํ™•๋ณดํ•œ๋‹ค. 3. **์ปค์Šคํ…€ ํ›…์„ ํ†ตํ•œ ๋กœ์ง ๋ถ„๋ฆฌ (SRP)** - 300์ค„ ์ด์ƒ์˜ ์ปดํฌ๋„ŒํŠธ์—์„œ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง(๋ฐ์ดํ„ฐ ํŒจ์นญ, ํผ ์ฒ˜๋ฆฌ ๋“ฑ)์„ ์ถ”์ถœํ•˜์—ฌ ์ปค์Šคํ…€ ํ›…์œผ๋กœ ์บก์Аํ™”ํ•œ๋‹ค. 4. **์ƒํƒœ ๊ด€๋ฆฌ ์ตœ์‹ ํ™”** - ๋ฌด๊ฑฐ์šด ๋‹จ์ผ ์Šคํ† ์–ด(Redux ๋“ฑ)๋ฅผ ๊ฑท์–ด๋‚ด๊ณ  ์„œ๋ฒ„ ์ƒํƒœ(TanStack Query)์™€ ํด๋ผ์ด์–ธํŠธ ์ „์—ญ ์ƒํƒœ(Zustand/Context)๋กœ ๋ถ„๋ฆฌํ•œ๋‹ค. 5. **์ ์ง„์  ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ์ „๋žต** - ์ „์ฒด ์žฌ์ž‘์„ฑ๋ณด๋‹ค๋Š” "Refactor, do not rewrite" ์ฒ ํ•™์„ ๋ฐ”ํƒ•์œผ๋กœ ๊ธฐ๋Šฅ ๋‹จ์œ„์˜ ๋‹จ๊ณ„์  ์ „ํ™˜์„ ์ˆ˜ํ–‰ํ•œ๋‹ค. ## โš–๏ธ Trade-offs & Caveats - **์ผ์‹œ์  ์ฝ”๋“œ ์ค‘๋ณต**: ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๊ณผ๋„๊ธฐ์—๋Š” ๊ตฌํ˜• ๋กœ์ง๊ณผ ์‹ ๊ทœ ๋กœ์ง์ด ๊ณต์กดํ•˜์—ฌ ์ฝ”๋“œ๋ฒ ์ด์Šค๊ฐ€ ์ผ์‹œ์ ์œผ๋กœ ์ง€์ €๋ถ„ํ•ด์งˆ ์ˆ˜ ์žˆ๋‹ค. - **์„ฑ๋Šฅ ํšŒ๊ท€ ์œ„ํ—˜**: ํด๋ž˜์Šค ์ƒ๋ช…์ฃผ๊ธฐ๋ฅผ `useEffect`๋กœ ์˜ฎ๊ธฐ๋Š” ๊ณผ์ •์—์„œ ์˜๋„์น˜ ์•Š์€ ๋ฌดํ•œ ๋ฃจํ”„๋‚˜ ๋ถˆํ•„์š”ํ•œ ๋ Œ๋”๋ง์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๋ฉด๋ฐ€ํ•œ ๊ฒ€์ฆ์ด ํ•„์š”ํ•˜๋‹ค. - **๋ฆฌํŒฉํ† ๋ง ๋น„์šฉ**: ๋‹น์žฅ์˜ ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ๋ณด๋‹ค ์‹œ๊ฐ„์ด ๋งŽ์ด ์†Œ์š”๋  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, ๋น„์ฆˆ๋‹ˆ์Šค ๊ฐ€์น˜์™€ ์šฐ์„ ์ˆœ์œ„๋ฅผ ๊ณ ๋ คํ•œ ๋ฆฌํŒฉํ† ๋ง ๋ฒ”์œ„ ์„ค์ •์ด ์ค‘์š”ํ•˜๋‹ค. ## ๐Ÿ”— Knowledge Connections ### Related Concepts (Auto-Linked) * [[Custom_Hooks]] * [[Frontend]] * [[JavaScript]] * [[Legacy System Migration]] * [[Observability]] * [[Principles]] * [[React]] * [[Redux]] * [[Refactoring]] * [[Research]] * [[SOLID_Principles]] * [[Testing]] * [[_system]] ### Related Concepts - **Custom Hooks**: ๋กœ์ง ๋ถ„๋ฆฌ์˜ ํ•ต์‹ฌ ๋‹จ์œ„ (๊ด€๊ณ„: ์‹ค์ฒœ ๋„๊ตฌ) - **SOLID Principles**: ๊ตฌ์กฐ ๊ฐœ์„ ์˜ ์„ค๊ณ„ ๊ธฐ์ค€ (๊ด€๊ณ„: ์ด๋ก ์  ๊ทผ๊ฑฐ) - **TanStack Query**: ์„œ๋ฒ„ ์ƒํƒœ ๊ด€๋ฆฌ์— ์ตœ์ ํ™”๋œ ๋ฆฌํŒฉํ† ๋ง ๋Œ€์ƒ (๊ด€๊ณ„: ์ฃผ์š” ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ์Šคํƒ) ### Deeper Research Questions 1. ๋Œ€๊ทœ๋ชจ ๋ฆฌํŒฉํ† ๋ง ์‹œ ์‹ /๊ตฌ ์ƒํƒœ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ ๊ฐ„์˜ ๋ฐ์ดํ„ฐ ๋™๊ธฐํ™”๋ฅผ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•œ 'Adapter' ํŒจํ„ด์˜ ์ ์šฉ ๋ฐฉ์•ˆ์€? 2. `useEffect`๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ์ƒํƒœ ์—…๋ฐ์ดํŠธ ๋กœ์ง์„ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๋‚˜ ํ›… ๋‚ด๋ถ€๋กœ ์˜ฎ๊ธธ ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ๋™๊ธฐํ™” ์‹œ์  ์ฐจ์ด ๋ฌธ์ œ ํ•ด๊ฒฐ๋ฒ•์€? 3. FSD ์•„ํ‚คํ…์ฒ˜๋กœ ๋ฆฌํŒฉํ† ๋ง ์‹œ, ๊ธฐ์กด์— ์–ฝํ˜€์žˆ๋˜ ๊ต์ฐจ ๊ด€์‹ฌ์‚ฌ(Cross-cutting concerns)๋ฅผ ์–ด๋–ป๊ฒŒ ์•ˆ์ „ํ•˜๊ฒŒ ๋ถ„๋ฆฌํ•  ๊ฒƒ์ธ๊ฐ€? 4. ๋ฆฌํŒฉํ† ๋ง ๊ณผ์ •์—์„œ ๋ฐœ์ƒํ•˜๋Š” 'Breaking Changes'๋ฅผ ํŒ€์›๋“ค์—๊ฒŒ ๊ณต์œ ํ•˜๊ณ  ์ฝ”๋“œ ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•œ ์ž๋™ํ™”๋œ ๋ฌธ์„œํ™” ๋ฐฉ์•ˆ์€? 5. TypeScript ์ „ํ™˜ ์‹œ 'Any' ํƒ€์ž…์„ ์ ์ง„์ ์œผ๋กœ ์ œ๊ฑฐํ•˜๊ธฐ ์œ„ํ•œ ์ •์  ๋ถ„์„ ๋„๊ตฌ ํ™œ์šฉ ์ „๋žต์€? ### Practical Application Contexts - **๋ ˆ๊ฑฐ์‹œ React ์•ฑ ํ˜„๋Œ€ํ™”**: ์˜ค๋ž˜๋œ ํด๋ž˜์Šค ์ปดํฌ๋„ŒํŠธ ๊ธฐ๋ฐ˜ ํ”„๋กœ์ ํŠธ๋ฅผ ์ตœ์‹  ํ›… ๋ฐ ์ƒํƒœ ๊ด€๋ฆฌ ์ฒด๊ณ„๋กœ ๊ฐœ์„ . - **์„ฑ๋Šฅ ๋ฐ ์œ ์ง€๋ณด์ˆ˜์„ฑ ๊ฐ•ํ™”**: ๋ณต์žกํ•˜๊ฒŒ ์–ฝํžŒ ์ปดํฌ๋„ŒํŠธ๋“ค์„ SRP ์›์น™์— ๋”ฐ๋ผ ์ž‘๊ณ  ๋ช…ํ™•ํ•œ ๋‹จ์œ„๋กœ ๋ถ„ํ•ด. ### Adjacent Topics - **Legacy System Migration** - **Clean Code & Refactoring Patterns** - **Frontend Observability**