# [[React Development]] ## ๐Ÿ“Œ Brief ์†Œ์Šค Summary React Development๋Š” ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌ์ถ•ํ•˜๊ธฐ ์œ„ํ•œ ํšจ์œจ์ ์ด๊ณ  ์œ ์—ฐํ•œ JavaScript ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํ™œ์šฉ ๊ธฐ์ˆ ์ด๋‹ค [1]. ์ตœ๊ทผ์˜ ํ”„๋ก ํŠธ์—”๋“œ ์—”์ง€๋‹ˆ์–ด๋ง์—์„œ๋Š” ์ปดํฌ๋„ŒํŠธ ์ตœ์ ํ™”, ์ƒํƒœ ๊ด€๋ฆฌ ๋ฉ”์ปค๋‹ˆ์ฆ˜, ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ์•„ํ‚คํ…์ฒ˜(Feature-Sliced Design) ๋ฐ ์ž๋™ ๋ฉ”๋ชจ์ด์ œ์ด์…˜ ๋„๊ตฌ(React Compiler)๋ฅผ ๊ฒฐํ•ฉํ•˜์—ฌ ๋ณต์žกํ•œ ๋Œ€๊ทœ๋ชจ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ตฌ์ถ•ํ•˜๋Š” ๋ฐฉํ–ฅ์œผ๋กœ ๋ฐœ์ „ํ•˜๊ณ  ์žˆ๋‹ค [2-4]. ํšจ๊ณผ์ ์ธ ๊ฐœ๋ฐœ๊ณผ ํ™•์žฅ์„ ์œ„ํ•ด์„œ๋Š” ๊ด€์‹ฌ์‚ฌ์˜ ๋ช…ํ™•ํ•œ ๋ถ„๋ฆฌ, ์—„๊ฒฉํ•œ ๋„ค์ด๋ฐ ๊ทœ์น™, ๊ทธ๋ฆฌ๊ณ  ์„ฑ๋Šฅ ์ตœ์ ํ™”์— ๋Œ€ํ•œ ์ฒด๊ณ„์ ์ธ ์ ‘๊ทผ์ด ํ•„์ˆ˜์ ์ด๋‹ค [5-8]. ## ๐Ÿ“– Core Content * **์•„ํ‚คํ…์ฒ˜ ๋ฐ ํด๋” ๊ตฌ์กฐ**: ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ทœ๋ชจ๊ฐ€ ์ปค์ง์— ๋”ฐ๋ผ ํŒŒ์ผ ์œ ํ˜•๋ณ„ ๋ถ„๋ฆฌ๋ณด๋‹ค ๋„๋ฉ”์ธ์ด๋‚˜ ๊ธฐ๋Šฅ(Feature) ์ค‘์‹ฌ์œผ๋กœ ํด๋”๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๊ฒƒ์ด ๊ถŒ์žฅ๋œ๋‹ค [9, 10]. ํ˜„๋Œ€์ ์ธ ๊ตฌ์กฐ๋ก ์ธ Feature-Sliced Design(FSD)์€ ์•ฑ์„ App, Pages, Widgets, Features, Entities, Shared ๋“ฑ์˜ ๋ ˆ์ด์–ด๋กœ ๋‚˜๋ˆ„๊ณ , ์ƒ์œ„ ๋ ˆ์ด์–ด๊ฐ€ ํ•˜์œ„ ๋ ˆ์ด์–ด์—๋งŒ ์˜์กดํ•˜๋„๋ก ๋‹จ๋ฐฉํ–ฅ ๊ทœ์น™์„ ๊ฐ•์ œํ•œ๋‹ค [11-13]. * **์ƒํƒœ ๊ด€๋ฆฌ ๋ฉ”์ปค๋‹ˆ์ฆ˜**: ์ƒํƒœ์˜ ๋นˆ๋„์™€ ๋ณต์žก์„ฑ์— ๋”ฐ๋ผ ๋„๊ตฌ๋ฅผ ๋ถ„๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ์ถ”์„ธ๋‹ค [14]. ํ…Œ๋งˆ๋‚˜ ๋กœ์ผ€์ผ์ฒ˜๋Ÿผ ์ž์ฃผ ๋ณ€ํ•˜์ง€ ์•Š๋Š” ๊ธ€๋กœ๋ฒŒ ์ƒํƒœ๋Š” ๋‚ด์žฅ Context API๋ฅผ ์‚ฌ์šฉํ•˜๊ณ , ์ž์ฃผ ๋ณ€๊ฒฝ๋˜์–ด ๋ถˆํ•„์š”ํ•œ ๋ฆฌ๋ Œ๋”๋ง์„ ๋ง‰์•„์•ผ ํ•˜๋Š” ์ƒํƒœ๋Š” ์„ ํƒ์ž(selector)๋ฅผ ์ œ๊ณตํ•˜๋Š” Zustand ๊ฐ™์€ ๊ฒฝ๋Ÿ‰ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค [15-18]. ๊ฑฐ๋Œ€ํ•œ ํŒ€๊ณผ ๋ณต์žกํ•œ ๋น„๋™๊ธฐ ๋กœ์ง์ด ์–ฝํ˜€ ์žˆ๋Š” ๊ฒฝ์šฐ Redux๊ฐ€ ๊ตฌ์กฐํ™”๋ฅผ ๋•๊ณ , ์„œ๋ฒ„ API ์ƒํƒœ ๋™๊ธฐํ™”๋Š” TanStack Query(React Query)๊ฐ€ ๋‹ด๋‹นํ•œ๋‹ค [19-21]. * **์„ฑ๋Šฅ ๋ฐ ๋ Œ๋”๋ง ์ตœ์ ํ™”**: 2025๋…„ ๊ธฐ์ค€ ๋„์ž…๋œ React Compiler๋Š” ๋นŒ๋“œ ํƒ€์ž„์— AST๋ฅผ ๋ถ„์„ํ•˜์—ฌ `useMemo`, `useCallback`, `React.memo` ๋“ฑ ์ˆ˜๋™ ๋ฉ”๋ชจ์ด์ œ์ด์…˜์„ ์ž๋™์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๊ณ  ๋ถˆํ•„์š”ํ•œ ๋ Œ๋”๋ง์„ ๋ฐฉ์ง€ํ•œ๋‹ค [3, 22, 23]. ๋Ÿฐํƒ€์ž„ ์„ฑ๋Šฅ์„ ์œ„ํ•ด์„œ๋Š” `React.lazy`์™€ `Suspense`๋ฅผ ํ™œ์šฉํ•œ ์ฝ”๋“œ ์Šคํ”Œ๋ฆฌํŒ…์„ ์ ์šฉํ•˜๋ฉฐ, Vite ํ™˜๊ฒฝ์—์„œ๋Š” `manualChunks`๋ฅผ ํ†ตํ•ด ๋ฒค๋”(vendor) ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋ถ„ํ• ํ•˜์—ฌ ๋ฒˆ๋“ค ํฌ๊ธฐ๋ฅผ ์ตœ์ ํ™”ํ•œ๋‹ค [24-26]. * **์—๋Ÿฌ ์ฒ˜๋ฆฌ์™€ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ**: ํ•˜์œ„ ์ปดํฌ๋„ŒํŠธ ํŠธ๋ฆฌ์˜ ๋ Œ๋”๋ง ์—๋Ÿฌ๋กœ ์ธํ•ด ์•ฑ ์ „์ฒด๊ฐ€ ํ•˜์–—๊ฒŒ ์งˆ๋ฆฌ๋Š” ํ˜„์ƒ์„ ๋ง‰๊ธฐ ์œ„ํ•ด Error Boundary๋ฅผ ์‚ฌ์šฉํ•ด Fallback UI๋ฅผ ๋ณด์—ฌ์ฃผ๊ณ  ๊ฒฉ๋ฆฌํ•œ๋‹ค [27, 28]. ๋Ÿฐํƒ€์ž„ ์ค‘์˜ ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜(์˜ˆ: ํด๋กœ์ €์— ๋ฌถ์ธ ์ฐธ์กฐ, ๋ถ„๋ฆฌ๋œ DOM ๋…ธ๋“œ ๋“ฑ)๋Š” Chrome DevTools์˜ Heap Snapshot ๋ฐ Allocation Timeline์„ ํ™œ์šฉํ•ด ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๊ณ  ์ˆ˜์ •ํ•œ๋‹ค [29-31]. * **์ปจ๋ฒค์…˜ ๋ฐ ์†Œํ”„ํŠธ์›จ์–ด ๊ณตํ•™ ์›์น™**: React ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ์—๋„ SOLID(ํŠนํžˆ ๋‹จ์ผ ์ฑ…์ž„ ์›์น™, SRP)์™€ DRY, KISS, YAGNI ์›์น™์„ ์ ์šฉํ•ด ๊ฑฐ๋Œ€ํ•œ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ถ„๋ฆฌํ•ด์•ผ ํ•œ๋‹ค [32-34]. ํŒŒ์ผ๋ช…์€ OS ํ˜ธํ™˜์„ฑ์„ ๊ณ ๋ คํ•ด `kebab-case`๋ฅผ, ์ปดํฌ๋„ŒํŠธ ์ด๋ฆ„์€ `PascalCase`๋ฅผ, ํ•จ์ˆ˜์™€ ํ›…์€ `camelCase`๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ํ‘œ์ค€ ๋„ค์ด๋ฐ ์ปจ๋ฒค์…˜์ด๋‹ค [5, 35-37]. ## โš–๏ธ Trade-offs & Caveats * **React Compiler์˜ ๋งน์ **: React Compiler๊ฐ€ ์ˆ˜๋™ ๋ฉ”๋ชจ์ด์ œ์ด์…˜์˜ ์ˆ˜๊ณ ๋ฅผ ๋œ์–ด์ฃผ์ง€๋งŒ, TanStack Query๋‚˜ React Router์™€ ๊ฐ™์ด ๋ Œ๋”๋ง๋งˆ๋‹ค ๋ถˆ์•ˆ์ •ํ•œ ๊ฐ์ฒด ์ฐธ์กฐ๋ฅผ ์˜๋„์ ์œผ๋กœ ๋ฐ˜ํ™˜ํ•˜๋Š” ์„œ๋“œํŒŒํ‹ฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ ์ตœ์ ํ™” ์ฒด์ธ์ด ๊นจ์ ธ ๋ฆฌ๋ Œ๋”๋ง์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค [38, 39]. ๋˜ํ•œ ์ตœ์ ํ™” ๊ณผ์ •์ด ๋ธ”๋ž™๋ฐ•์Šค ํ˜•ํƒœ์ด๋ฏ€๋กœ, ๋ Œ๋”๋ง ์„ฑ๋Šฅ ์ด์Šˆ ๋ฐœ์ƒ ์‹œ ์ฝ”๋“œ์— ๋ช…์‹œ๋œ ํ›…์„ ํ™•์ธํ•˜๋Š” ๋Œ€์‹  React Profiler๋ฅผ ํŒŒํ—ค์ณ์•ผ ํ•˜๋Š” ๋“ฑ ๋””๋ฒ„๊น…์ด ๋” ๊นŒ๋‹ค๋กœ์›Œ์ง„๋‹ค [40]. * **Context API vs ์™ธ๋ถ€ ์ƒํƒœ ๊ด€๋ฆฌ**: Context API๋Š” React ๋‚ด์žฅ ๊ธฐ๋Šฅ์œผ๋กœ ์˜์กด์„ฑ ์ถ”๊ฐ€ ์—†์ด 'Prop-drilling'์„ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์œผ๋‚˜, ์ปจํ…์ŠคํŠธ ๊ฐ’์ด ๋ณ€๊ฒฝ๋  ๋•Œ ๊ฐ’์„ ์‚ฌ์šฉํ•˜๋Š” ๋ชจ๋“  ํ•˜์œ„ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ฌด์กฐ๊ฑด ๋ฆฌ๋ Œ๋”๋ง์‹œํ‚ค๋Š” ์„ฑ๋Šฅ์  ๋‹จ์ ์ด ์žˆ๋‹ค [16, 18]. ๋ฐ˜๋ฉด Zustand ๊ฐ™์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ๋ Œ๋”๋ง ์„ฑ๋Šฅ ์ตœ์ ํ™”์—๋Š” ํƒ์›”ํ•˜์ง€๋งŒ, ์•„ํ‚คํ…์ฒ˜๊ฐ€ ๋„ˆ๋ฌด ์œ ์—ฐํ•˜์—ฌ ๋Œ€๊ทœ๋ชจ ํŒ€์—์„œ๋Š” ํŒจํ„ด์ด ํŒŒํŽธํ™”๋  ์ˆ˜ ์žˆ๋Š” ์œ„ํ—˜์„ฑ์„ ๋™๋ฐ˜ํ•œ๋‹ค [17, 41]. * **Error Boundary์˜ ํฌ์ฐฉ ํ•œ๊ณ„**: Error Boundary๋Š” ์ปดํฌ๋„ŒํŠธ์˜ ๋ Œ๋”๋ง ๋ฐ ์ƒ๋ช…์ฃผ๊ธฐ ๋‚ด๋ถ€์˜ ์—๋Ÿฌ๋Š” ํ›Œ๋ฅญํ•˜๊ฒŒ ์žก์•„๋‚ด์ง€๋งŒ, ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ(`onClick` ๋“ฑ) ๋‚ด๋ถ€์˜ ๋กœ์ง, ๋น„๋™๊ธฐ ์ฝœ๋ฐฑ(`setTimeout`), ํ˜น์€ ์„œ๋ฒ„ ์‚ฌ์ด๋“œ ๋ Œ๋”๋ง(SSR) ์ค‘ ๋ฐœ์ƒํ•˜๋Š” ์—๋Ÿฌ๋Š” ํฌ์ฐฉํ•˜์ง€ ๋ชปํ•œ๋‹ค [42, 43]. ๋”ฐ๋ผ์„œ ๋ณ„๋„์˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ `try/catch`๊ฐ€ ๋ณ‘ํ–‰๋˜์–ด์•ผ ํ•œ๋‹ค [44]. * **Feature-Sliced Design ๋„์ž…์˜ ๋ถ€์ž‘์šฉ**: ๋„๋ฉ”์ธ ์ค‘์‹ฌ์œผ๋กœ ํŒŒ์ผ์„ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ์‹์€ ๋Œ€๊ทœ๋ชจ ์‹œ์Šคํ…œ์—์„œ ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ๊ทน๋Œ€ํ™”ํ•˜์ง€๋งŒ, ์ž‘์€ ๊ทœ๋ชจ์˜ ์•ฑ์ด๋‚˜ ํŒ€์—์„œ๋Š” ๋„ˆ๋ฌด ๋งŽ์€ ํด๋” ๋ށ์Šค์™€ ๊ตฌ์กฐ์  ๊ทœ์น™์ด ๊ณผ๋„ํ•œ ์—”์ง€๋‹ˆ์–ด๋ง(Over-engineering)์œผ๋กœ ์ด์–ด์ ธ ์ดˆ๊ธฐ ๊ฐœ๋ฐœ ์†๋„๋ฅผ ๋Šฆ์ถœ ์ˆ˜ ์žˆ๋‹ค [45, 46]. ## ๐Ÿ”— Knowledge Connections ### Related Concepts #### [์•„ํ‚คํ…์ฒ˜ ๋ฐ ํด๋” ์„ค๊ณ„] - [[Feature-Sliced Design]] - ์—ฐ๊ฒฐ ์ด์œ : ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋‹จ์ˆœ ํŒŒ์ผ ์œ ํ˜•์ด ์•„๋‹Œ ๋„๋ฉ”์ธ/๊ธฐ๋Šฅ ์Šค์ฝ”ํ”„์— ๋”ฐ๋ผ ๋ถ„๋ฆฌํ•˜๊ณ  ๋ ˆ์ด์–ด ๊ฐ„ ์˜์กด์„ฑ ๋ฐฉํ–ฅ์„ ๊ฐ•์ œํ•˜์—ฌ React ์•ฑ์˜ ๋Œ€๊ทœ๋ชจ ํ™•์žฅ์„ฑ์„ ํ™•๋ณดํ•˜๋Š” ์•„ํ‚คํ…์ฒ˜ ๋ฐฉ๋ฒ•๋ก ์ด๊ธฐ ๋•Œ๋ฌธ [11, 47]. - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๊ฑฐ๋Œ€ํ•œ ํ”„๋ก ํŠธ์—”๋“œ ์‹œ์Šคํ…œ์—์„œ ์ปดํฌ๋„ŒํŠธ ๊ฐ„ ๊ฒฐํ•ฉ๋„๋ฅผ ๋‚ฎ์ถ”๊ณ  ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์˜ ์‘์ง‘๋„๋ฅผ ๋†’์ด๋Š” ์„ค๊ณ„ ์ฒ ํ•™. - [[SOLID Principles in React]] - ์—ฐ๊ฒฐ ์ด์œ : ๋‹จ์ผ ์ฑ…์ž„ ์›์น™(SRP)๊ณผ ์ธํ„ฐํŽ˜์ด์Šค ๋ถ„๋ฆฌ ์›์น™(ISP) ๋“ฑ ์ „ํ†ต์ ์ธ ๊ฐ์ฒด์ง€ํ–ฅ ์„ค๊ณ„ ์›์น™์„ React์˜ ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ์™€ ํ›…์— ์ ์šฉํ•˜์—ฌ ํด๋ฆฐ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ œ์‹œํ•˜๊ธฐ ๋•Œ๋ฌธ [32, 33]. - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๋„ˆ๋ฌด ๋งŽ์€ ์ฑ…์ž„์„ ์ง€๋Š” 300์ค„ ์ด์ƒ์˜ ๋น„๋Œ€ํ•ด์ง„ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๊ด€์‹ฌ์‚ฌ๋ณ„๋กœ ๋ถ„๋ฆฌํ•˜๋Š” ๊ธฐ์ค€. #### [์ƒํƒœ ๊ด€๋ฆฌ ๋ฐ ์ตœ์ ํ™” ๋„๊ตฌ] - [[React Compiler]] - ์—ฐ๊ฒฐ ์ด์œ : `useMemo`, `useCallback`๊ณผ ๊ฐ™์€ ์ˆ˜๋™ ์„ฑ๋Šฅ ์ตœ์ ํ™”๋ฅผ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ ์ž‘์„ฑํ•˜์ง€ ์•Š์•„๋„ ๋นŒ๋“œ ํƒ€์ž„์— AST๋ฅผ ๋ถ„์„ํ•ด ์ž๋™์œผ๋กœ JSX์™€ ๊ณ„์‚ฐ ๊ฒฐ๊ณผ๋ฅผ ๋ฉ”๋ชจ์ด์ œ์ด์…˜ํ•˜๋Š” 2025๋…„ ์ฃผ์š” ๋„๊ตฌ์ด๊ธฐ ๋•Œ๋ฌธ [3, 22, 23]. - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: React์˜ ๋ Œ๋”๋ง ์ฃผ๊ธฐ์—์„œ ๋ถˆํ•„์š”ํ•œ ๊ณ„์‚ฐ์ด ์–ด๋–ป๊ฒŒ ์บ์‹ฑ๋˜๊ณ  ์ปดํฌ๋„ŒํŠธ ํŠธ๋ฆฌ์˜ ์—…๋ฐ์ดํŠธ๋ฅผ ๋ฐฉ์ง€ํ•˜๋Š”์ง€์— ๋Œ€ํ•œ ๋นŒ๋“œ ๋‹จ๊ณ„ ์ตœ์ ํ™” ์›๋ฆฌ. - [[Zustand vs Context API]] - ์—ฐ๊ฒฐ ์ด์œ : Context API๊ฐ€ ์ดˆ๋ž˜ํ•˜๋Š” ๋ถˆํ•„์š”ํ•œ ์ „์—ญ ๋ Œ๋”๋ง(๋ฆฌ๋ Œ๋”๋ง ํญํฌ) ๋ฌธ์ œ๋ฅผ Zustand๊ฐ€ ๋…๋ฆฝ์ ์ธ ์Šคํ† ์–ด์™€ ์ƒํƒœ ์„ ํƒ์ž(Selector)๋ฅผ ํ†ตํ•ด ์–ด๋–ป๊ฒŒ ํ•ด๊ฒฐํ•˜๋Š”์ง€๋ฅผ ๋น„๊ตํ•˜๋Š” ํ•ต์‹ฌ ๊ฐœ๋…์ด๊ธฐ ๋•Œ๋ฌธ [16, 48]. - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ์ „์—ญ ์ƒํƒœ์˜ ๋ณ€๊ฒฝ ๋นˆ๋„์— ๋”ฐ๋ผ ์ ์ ˆํ•œ ์ƒํƒœ ๊ด€๋ฆฌ ๋„๊ตฌ๋ฅผ ์„ ํƒํ•˜๋Š” ๊ธฐ์ค€๊ณผ React ๋ Œ๋”๋ง ๋น„์šฉ์„ ์ค„์ด๋Š” ๋ฐฉ๋ฒ•. #### [๋””๋ฒ„๊น… ๋ฐ ์—๋Ÿฌ ์ œ์–ด] - [[Error Boundaries]] - ์—ฐ๊ฒฐ ์ด์œ : ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ํŠน์ • UI ์š”์†Œ์—์„œ ๋ฐœ์ƒํ•œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋Ÿฐํƒ€์ž„ ์—๋Ÿฌ๊ฐ€ ์ „์ฒด ํ™”๋ฉด์„ ์ค‘๋‹จ์‹œํ‚ค๋Š” ๊ฒƒ์„ ๋ง‰๊ธฐ ์œ„ํ•œ ๊ฐ€์žฅ ํ•ต์‹ฌ์ ์ธ ์ปดํฌ๋„ŒํŠธ ๊ธฐ๋ฐ˜ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ๋ฐฉ์‹์ด๊ธฐ ๋•Œ๋ฌธ [27, 28]. - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ์„ ์–ธ์  UI ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ ์˜ˆ์ธกํ•  ์ˆ˜ ์—†๋Š” ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ์ด๋ฅผ ์–ด๋–ป๊ฒŒ ๊ฒฉ๋ฆฌํ•˜๊ณ  Fallback ํ™”๋ฉด์„ ๋„์šธ ๊ฒƒ์ธ๊ฐ€์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ ํŒจํ„ด. ### Deeper Research Questions - React Compiler๊ฐ€ ๋นŒ๋“œ ์‹œ์ ์— ์ฝ”๋“œ๋ฅผ ์ž๋™ ๋ฉ”๋ชจ์ด์ œ์ด์…˜ํ•จ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ , ๊ฐœ๋ฐœ์ž๊ฐ€ `useMemo`๋‚˜ `useCallback`์„ ์˜๋„์ ์œผ๋กœ ์ˆ˜๋™ ๋ฐฐ์น˜ํ•ด์•ผ ํ•˜๋Š” ๊ตฌ์ฒด์ ์ธ ์—ฃ์ง€ ์ผ€์ด์Šค๋Š” ๋ฌด์—‡์ธ๊ฐ€? - ๋Œ€๊ทœ๋ชจ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ Feature-Sliced Design(FSD)์„ ์ ์šฉํ•  ๋•Œ, ์—ฌ๋Ÿฌ ๊ธฐ๋Šฅ(Feature) ๋„๋ฉ”์ธ์ด ๊ณตํ†ต์ ์œผ๋กœ ์ƒํ˜ธ์ž‘์šฉํ•ด์•ผ ํ•˜๋Š” ๊ต์ฐจ ๊ด€์‹ฌ์‚ฌ(Cross-cutting Concerns) ๋ฌธ์ œ๋Š” ์–ด๋–ป๊ฒŒ ํ•ด๊ฒฐํ•ด์•ผ ํ•˜๋Š”๊ฐ€? - ์ƒํƒœ ์—…๋ฐ์ดํŠธ ๋นˆ๋„๊ฐ€ ๋†’์€ ๋ฐ์ดํ„ฐ๋Š” Zustand๋กœ, ์ •์  ์„ค์ •์€ Context API๋กœ ๊ด€๋ฆฌํ•  ๋•Œ, ๋‘ ์ƒํƒœ ์‹œ์Šคํ…œ ๊ฐ„์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋™๊ธฐํ™”ํ•˜๊ฑฐ๋‚˜ ๊ฒฐํ•ฉํ•˜์—ฌ ์ปดํฌ๋„ŒํŠธ์— ์ฃผ์ž…ํ•˜๋Š” ๋ชจ๋ฒ”์ ์ธ ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ์•„ํ‚คํ…์ฒ˜๋Š” ๋ฌด์—‡์ธ๊ฐ€? - ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ์˜ ๋ฏธํ•ด์ œ๋‚˜ ํด๋กœ์ €๋กœ ์ธํ•ด ๋ฐœ์ƒํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜(Memory Leaks) ํ˜„์ƒ์„ Chrome DevTools์˜ ํž™ ์Šค๋ƒ…์ƒท(Heap Snapshot) ๊ธฐ๋Šฅ์œผ๋กœ ํƒ์ง€ํ•˜๊ณ  ๊ฐœ์„ ํ•˜๋Š” ๊ตฌ์ฒด์  ์ ˆ์ฐจ๋Š” ๋ฌด์—‡์ธ๊ฐ€? - Vite ๊ธฐ๋ฐ˜์˜ React ํ”„๋กœ์ ํŠธ์—์„œ `manualChunks`๋ฅผ ํ™œ์šฉํ•œ ์˜์กด์„ฑ ๋ถ„ํ• ์ด Core Web Vitals (LCP, INP) ๊ฐœ์„ ์— ๋ฏธ์น˜๋Š” ์˜ํ–ฅ์„ ์ธก์ •ํ•˜๊ณ  ๋ถ„์„ํ•˜๋Š” ์ตœ์ ํ™” ํ”„๋กœ์„ธ์Šค๋Š” ๋ฌด์—‡์ธ๊ฐ€? ### Practical Application Contexts - **Implementation:** React ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ์šด์˜์ฒด์ œ ๊ฐ„ ๋นŒ๋“œ ์˜ค๋ฅ˜๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ํŒŒ์ผ๊ณผ ํด๋”๋ช…์€ `kebab-case`(์˜ˆ: `user-profile.tsx`)๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์ปดํฌ๋„ŒํŠธ์™€ ์ธํ„ฐํŽ˜์ด์Šค ๋ช…์€ `PascalCase`๋ฅผ ๋”ฐ๋ฅธ๋‹ค. ๋„ˆ๋ฌด ๋งŽ์€ ์ฑ…์ž„์„ ๊ฐ–๋Š” ์ปดํฌ๋„ŒํŠธ๋Š” SRP์— ๋”ฐ๋ผ ๋ทฐ์™€ ๋กœ์ง์œผ๋กœ ๋ถ„๋ฆฌํ•œ๋‹ค [5, 33, 35, 36]. - **System Design:** ์ฝ”๋“œ๋ฅผ ํŒŒ์ผ ์œ ํ˜•(`components`, `hooks`)๋ณ„๋กœ ๋‹จ์ˆœ ๋‚˜์—ดํ•˜์ง€ ์•Š๊ณ  `features/auth/`์™€ ๊ฐ™์ด ๋น„์ฆˆ๋‹ˆ์Šค ๊ธฐ๋Šฅ๋ณ„ ๋ชจ๋“ˆ๋กœ ๋ฌถ์–ด ๊ฒฐํ•ฉ๋„๋ฅผ ๋‚ฎ์ถ”๋Š” Feature-Sliced Design ๊ตฌ์กฐ๋ฅผ ์ฑ„ํƒํ•œ๋‹ค. ๊ฐ ๊ธฐ๋Šฅ ํด๋”๋Š” `index.ts`๋ฅผ ํ†ตํ•œ Public API๋งŒ ๋…ธ์ถœํ•ด ์บก์Аํ™”๋ฅผ ๊ฐ•ํ™”ํ•œ๋‹ค [10, 11, 32, 49]. - **Operation / Maintenance:** ์ปดํฌ๋„ŒํŠธ ํฌ๋ž˜์‹œ๋ฅผ ๋Œ€๋น„ํ•˜์—ฌ ๋…๋ฆฝ์ ์ธ ๋‹จ์œ„(์˜ˆ: ์ฐจํŠธ, ํผ)๋งˆ๋‹ค Error Boundary๋ฅผ ์”Œ์›Œ ์žฅ์• ๋ฅผ ๊ฒฉ๋ฆฌํ•˜๊ณ , ์—๋Ÿฌ ๋ชจ๋‹ˆํ„ฐ๋ง ํ”Œ๋žซํผ(Sentry, LogRocket)์„ ์—ฐ๋™ํ•˜์—ฌ ๋Ÿฐํƒ€์ž„ ์•ˆ์ •์„ฑ์„ ํ™•๋ณดํ•œ๋‹ค. ๋˜ํ•œ ๋ฉ”๋ชจ๋ฆฌ ํ”„๋กœํŒŒ์ผ๋ง์œผ๋กœ Detached DOM Node๊ฐ€ ์žˆ๋Š”์ง€ ์ฃผ๊ธฐ์ ์œผ๋กœ ๊ฐ์‹œํ•œ๋‹ค [29, 50-52]. - **Learning Path:** React ๊ธฐ์ดˆ ๋™์ž‘๊ณผ ์ปดํฌ๋„ŒํŠธ ๋ถ„๋ฆฌ๋ฅผ ์ดํ•ดํ•œ ๋’ค โ†’ Context API๋ฅผ ์ด์šฉํ•ด ์ „์—ญ ์ƒํƒœ๋ฅผ ๋‹ค๋ฃจ๋‹ค๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๋ฆฌ๋ Œ๋”๋ง ์ด์Šˆ๋ฅผ ์ฒด๊ฐ โ†’ Zustand๋‚˜ Redux ๊ฐ™์€ ์ƒํƒœ ๋„๊ตฌ๋ฅผ ํ•™์Šต โ†’ ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜ ๋””๋ฒ„๊น… ๋ฐ React Compiler, FSD ๊ฐ™์€ ์‹œ์Šคํ…œ ์•„ํ‚คํ…์ฒ˜ ์Šค์ผ€์ผ์—… ์ˆœ์œผ๋กœ ์‹ฌํ™” ํ•™์Šตํ•œ๋‹ค [53]. - **My Project Relevance:** React ๋ ˆ๊ฑฐ์‹œ ์ฝ”๋“œ๋ฅผ ๋ฆฌํŒฉํ† ๋งํ•  ๊ฒฝ์šฐ, ์ œ์ผ ๋จผ์ € ๋ Œ๋”๋ง ๋น„์šฉ์„ ๋†’์ด๋Š” ๊ณผ๋„ํ•œ Context API๋ฅผ Zustand๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•˜๊ณ , ๊ฑฐ๋Œ€ํ•œ ์ปดํฌ๋„ŒํŠธ ํŠธ๋ฆฌ๋ฅผ ๋‹จ์ผ ์ฑ…์ž„ ์›์น™์— ๋งž์ถฐ ๋ถ„๋ฆฌํ•˜์—ฌ ํŒ€ ๋‹จ์œ„ ํ˜‘์—…๊ณผ ํ…Œ์ŠคํŠธ๊ฐ€ ์šฉ์ดํ•œ ์•„ํ‚คํ…์ฒ˜๋กœ ํƒˆ๋ฐ”๊ฟˆํ•  ์ˆ˜ ์žˆ๋‹ค. ### Adjacent Topics - [[Core Web Vitals & Web Performance]] - ํ™•์žฅ ๋ฐฉํ–ฅ: ํ”„๋ก ํŠธ์—”๋“œ์˜ ์„ฑ๋Šฅ ์ตœ์ ํ™”(์ฝ”๋“œ ์Šคํ”Œ๋ฆฌํŒ…, ๋ ˆ์ด์ง€ ๋กœ๋”ฉ)๊ฐ€ ์‹ค์ œ ์‚ฌ์šฉ์ž์˜ ํ™”๋ฉด ํ‘œ์ถœ ์†๋„(LCP)์™€ ์ƒํ˜ธ์ž‘์šฉ ์†๋„(INP) ๋“ฑ ๋ธŒ๋ผ์šฐ์ € ์ง€ํ‘œ์™€ ์–ด๋–ป๊ฒŒ ์ง๊ฒฐ๋˜๋Š”์ง€ ๋ชจ๋‹ˆํ„ฐ๋ง ๊ธฐ์ˆ ๊ณผ ์—ฐ๊ณ„ํ•˜์—ฌ ํƒ๊ตฌ [54, 55]. - [[Vite & Rollup Bundling Strategies]] - ํ™•์žฅ ๋ฐฉํ–ฅ: React ์ž‘์„ฑ ์ฝ”๋“œ๊ฐ€ ์šด์˜ ํ™˜๊ฒฝ์— ๋ฐฐํฌ๋˜๊ธฐ ์ „ Vite์™€ Rollup์„ ํ†ตํ•ด ์–ด๋–ป๊ฒŒ ES ๋ชจ๋“ˆ ํŒŒ์‹ฑ๊ณผ ์ฒญํฌ ๋ถ„ํ• (`manualChunks`)์ด ์ด๋ฃจ์–ด์ ธ ์บ์‹ฑ ํšจ์œจ์„ ๊ทน๋Œ€ํ™”ํ•˜๋Š”์ง€ ๋นŒ๋“œ ๋„๊ตฌ ๊ด€์ ์—์„œ ํƒ๊ตฌ [22, 25]. --- *Last updated: 2026-04-30*