# [[React Scalability|React Scalability]] ## ๐Ÿ“Œ Brief Summary React Scalability(React ํ™•์žฅ์„ฑ)๋Š” ๊ธฐ๋Šฅ, ํŒ€ ๊ทœ๋ชจ, ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์˜ ๋ณต์žก์„ฑ์ด ์ฆ๊ฐ€ํ•จ์— ๋”ฐ๋ผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์„ฑ๋Šฅ, ์œ ์ง€๋ณด์ˆ˜์„ฑ, ์˜ˆ์ธก ๊ฐ€๋Šฅํ•œ ์„ฑ์žฅ์„ ์œ ์ง€ํ•˜๋Š” ๋Šฅ๋ ฅ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ๋‹จ์ˆœํžˆ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ Œ๋”๋งํ•˜๋Š” ๊ฒƒ์„ ๋„˜์–ด, ๊ฒฐํ•ฉ๋„๋ฅผ ๋‚ฎ์ถ”๊ณ  ์‘์ง‘๋„๋ฅผ ๋†’์ด๋Š” ์•„ํ‚คํ…์ฒ˜ ์„ค๊ณ„, ์ƒํƒœ ๊ด€๋ฆฌ์˜ ์ตœ์ ํ™”, ๊ทธ๋ฆฌ๊ณ  ์ฝ”๋“œ ์Šคํ”Œ๋ฆฌํŒ…๊ณผ ๋ Œ๋”๋ง ์„ฑ๋Šฅ ์ตœ์ ํ™”๋ฅผ ํฌ๊ด„ํ•ฉ๋‹ˆ๋‹ค. ํ™•์žฅ ๊ฐ€๋Šฅํ•œ React ์‹œ์Šคํ…œ์€ ๋ช…ํ™•ํ•œ ํด๋” ๊ตฌ์กฐ(์˜ˆ: Feature-Sliced Design)์™€ ์—„๊ฒฉํ•œ ๊ด€์‹ฌ์‚ฌ ๋ถ„๋ฆฌ๋ฅผ ํ†ตํ•ด ์ฝ”๋“œ๋ฒ ์ด์Šค๊ฐ€ ์ž์ฒด์ ์ธ ๋ฌด๊ฒŒ๋กœ ์ธํ•ด ๋ถ•๊ดด๋˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค. [1-4] ## ๐Ÿ“– Core Content - **์•„ํ‚คํ…์ฒ˜ ๋ฐ ํด๋” ๊ตฌ์กฐ์˜ ์ง„ํ™”:** React๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์•„ํ‚คํ…์ฒ˜๋ฅผ ๊ฐ•์ œํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์—, ํ”„๋กœ์ ํŠธ๊ฐ€ ์ปค์ง€๋ฉด ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์ด UI์— ์Šค๋ฉฐ๋“ค๊ณ  ์˜์กด์„ฑ์ด ์—‰ํ‚ค๋Š” ์•„ํ‚คํ…์ฒ˜ ๋ถ•๊ดด๊ฐ€ ๋ฐœ์ƒํ•˜๊ธฐ ์‰ฝ์Šต๋‹ˆ๋‹ค [2]. ๊ณผ๊ฑฐ์˜ ํŒŒ์ผ ์œ ํ˜•๋ณ„ ํด๋” ๊ตฌ์กฐ(components, hooks, styles ๋“ฑ)๋Š” ๊ทœ๋ชจ๊ฐ€ ์ปค์งˆ์ˆ˜๋ก ์œ ์ง€๋ณด์ˆ˜๋ฅผ ์–ด๋ ต๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค [5, 6]. ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์œ„ํ•ด์„œ๋Š” ๋„๋ฉ”์ธ/๊ธฐ๋Šฅ ์ค‘์‹ฌ์œผ๋กœ ์ฝ”๋“œ๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” Feature-Based ๊ตฌ์กฐ ๋˜๋Š” **Feature-Sliced Design(FSD)**๊ณผ ๊ฐ™์€ ๋ฐฉ๋ฒ•๋ก ์ด ํ•„์ˆ˜์ ์ž…๋‹ˆ๋‹ค. FSD๋Š” ์•ฑ์„ layers(app, pages, widgets, features, entities, shared)๋กœ ๋‚˜๋ˆ„๊ณ  ๋‹จ๋ฐฉํ–ฅ ์˜์กด์„ฑ ๊ทœ์น™๊ณผ ํผ๋ธ”๋ฆญ API ์บก์Аํ™”๋ฅผ ๊ฐ•์ œํ•˜์—ฌ ๋ชจ๋“ˆ์˜ ๋…๋ฆฝ์„ฑ์„ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค [7-11]. - **ํด๋ฆฐ ์ฝ”๋“œ์™€ ์†Œํ”„ํŠธ์›จ์–ด ์—”์ง€๋‹ˆ์–ด๋ง ์›์น™:** ๋Œ€๊ทœ๋ชจ React ์‹œ์Šคํ…œ์—์„œ๋Š” SOLID, DRY, KISS, YAGNI์™€ ๊ฐ™์€ ์›์น™์ด ์ ์šฉ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋‹จ์ผ ์ฑ…์ž„ ์›์น™(SRP)์— ๋”ฐ๋ผ ๊ฑฐ๋Œ€ํ•œ ์ปดํฌ๋„ŒํŠธ๋Š” ์ž‘๊ณ  ์ง‘์ค‘๋œ ์ปดํฌ๋„ŒํŠธ๋กœ ๋ถ„๋ฆฌ๋˜์–ด์•ผ ํ•˜๋ฉฐ [12], DRY ์›์น™์„ ํ†ตํ•ด ๊ณตํ†ต ๋กœ์ง์€ ์ปค์Šคํ…€ ํ›…์œผ๋กœ ์ถ”์ถœํ•˜์—ฌ ์žฌ์‚ฌ์šฉ์„ฑ์„ ๋†’์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค [13]. ๋”๋ถˆ์–ด ํŒŒ์ผ ๋ฐ ์ปดํฌ๋„ŒํŠธ ๋ช…๋ช… ๊ทœ์น™(์˜ˆ: ํŒŒ์ผ์€ kebab-case, ์ปดํฌ๋„ŒํŠธ๋Š” PascalCase)์„ ์ผ๊ด€๋˜๊ฒŒ ์œ ์ง€ํ•˜๊ณ  ESLint๋ฅผ ํ†ตํ•ด ์•„ํ‚คํ…์ฒ˜ ๊ฒฝ๊ณ„๋ฅผ ๊ฐ•์ œํ•˜๋Š” ๊ฒƒ์ด ๋Œ€๊ทœ๋ชจ ํŒ€ ํ˜‘์—…์— ํ•„์ˆ˜์ ์ž…๋‹ˆ๋‹ค [14, 15]. - **๊ทœ๋ชจ์— ๋”ฐ๋ฅธ ์ƒํƒœ ๊ด€๋ฆฌ ์ „๋žต:** ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์ปค์ง€๋ฉด ๋‹จ์ผ ์ „์—ญ ์ƒํƒœ๋งŒ์œผ๋กœ๋Š” ๋ถ€์กฑํ•˜๋ฉฐ ์ƒํƒœ์˜ ์—ญํ• ์— ๋”ฐ๋ผ ๋„๊ตฌ๊ฐ€ ๋ถ„๋ฆฌ๋ฉ๋‹ˆ๋‹ค [16]. React์˜ Context API๋Š” ๊ฐ’์ด ๋ณ€๊ฒฝ๋  ๋•Œ๋งˆ๋‹ค ํ•˜์œ„ ์ปดํฌ๋„ŒํŠธ ์ „์ฒด๋ฅผ ๋ฆฌ๋ Œ๋”๋ง์‹œํ‚ค๋ฏ€๋กœ ์—…๋ฐ์ดํŠธ๊ฐ€ ์žฆ์€ ์ƒํƒœ ๊ด€๋ฆฌ์—๋Š” ์ ํ•ฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค [17, 18]. ์ค‘๊ฐ„ ๊ทœ๋ชจ์˜ ์•ฑ์—์„œ๋Š” Selector ํŒจํ„ด์„ ํ†ตํ•ด ๋ถˆํ•„์š”ํ•œ ๋ฆฌ๋ Œ๋”๋ง์„ ๋ง‰๋Š” Zustand๊ฐ€ ์œ ์šฉํ•˜๋ฉฐ [19-21], 500๊ฐœ ์ด์ƒ์˜ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์žˆ๋Š” ๋Œ€๊ทœ๋ชจ ์•ฑ์ด๋‚˜ ๋น„๋™๊ธฐ ์ž‘์—…์ด ๋ณต์žกํ•œ ๊ฒฝ์šฐ ์ผ๊ด€๋œ ํŒจํ„ด๊ณผ ๊ฐ•๋ ฅํ•œ ๋””๋ฒ„๊น…์„ ์ œ๊ณตํ•˜๋Š” Redux๊ฐ€ ์‚ฐ์—… ํ‘œ์ค€์œผ๋กœ ์ž‘์šฉํ•ฉ๋‹ˆ๋‹ค [22, 23]. ์„œ๋ฒ„ ์ƒํƒœ ๊ด€๋ฆฌ๋Š” TanStack Query(React Query) ๋“ฑ์œผ๋กœ ํด๋ผ์ด์–ธํŠธ ์ƒํƒœ์™€ ๋ถ„๋ฆฌํ•˜์—ฌ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค [20, 24]. - **์„ฑ๋Šฅ ์—”์ง€๋‹ˆ์–ด๋ง (Performance Optimization):** ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ์•ฑ์€ ๋Ÿฐํƒ€์ž„ ์„ฑ๋Šฅ๊ณผ ๋กœ๋”ฉ ์†๋„ ์ตœ์ ํ™”๊ฐ€ ํ•„์ˆ˜์ ์ž…๋‹ˆ๋‹ค. `React.lazy`์™€ ๋™์  ์ž„ํฌํŠธ(Dynamic Imports)๋ฅผ ํ™œ์šฉํ•œ ๋ผ์šฐํŠธ ๋ฐ ์ปดํฌ๋„ŒํŠธ ๋ ˆ๋ฒจ์˜ ์ฝ”๋“œ ์Šคํ”Œ๋ฆฌํŒ…์€ ์ดˆ๊ธฐ ๋ฒˆ๋“ค ํฌ๊ธฐ๋ฅผ ํš๊ธฐ์ ์œผ๋กœ ์ค„์—ฌ์ค๋‹ˆ๋‹ค [25-27]. ๋˜ํ•œ Vite์˜ `manualChunks`๋ฅผ ์ด์šฉํ•ด ์ž์ฃผ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š๋Š” Vendor ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋ถ„๋ฆฌํ•˜์—ฌ ์บ์‹ฑ ํšจ์œจ์„ ๋†’์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค [28-30]. ๋Ÿฐํƒ€์ž„ ์‹œ์—๋Š” ๋Œ€๊ทœ๋ชจ ๋ฆฌ์ŠคํŠธ๋ฅผ ์œ„ํ•œ Virtualization(๊ฐ€์ƒํ™”) ์ฒ˜๋ฆฌ, ์•ˆ์ •์ ์ธ ์ฐธ์กฐ ์œ ์ง€๋ฅผ ์œ„ํ•œ `useCallback`๊ณผ `useMemo` ์‚ฌ์šฉ, ๊ทธ๋ฆฌ๊ณ  React 18์˜ ๋™์‹œ์„ฑ ๊ธฐ๋Šฅ(`useTransition`, `useDeferredValue`)์„ ํ™œ์šฉํ•ด ๋ฉ”์ธ ์Šค๋ ˆ๋“œ์˜ ์‘๋‹ต์„ฑ์„ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค [31-34]. ## โš–๏ธ Trade-offs & Caveats - **์•„ํ‚คํ…์ฒ˜์˜ ์˜ค๋ฒ„ํ—ค๋“œ:** Feature-Sliced Design์ด๋‚˜ ๋„๋ฉ”์ธ ๊ธฐ๋ฐ˜ ๊ตฌ์กฐ๋ฅผ ๋„์ž…ํ•˜๋ฉด ์ปดํฌ๋„ŒํŠธ๊ฐ€ '๊ธฐ๋Šฅ'์ธ์ง€ '์œ„์ ฏ'์ธ์ง€ ๊ตฌ๋ถ„ํ•˜๊ธฐ ์œ„ํ•œ ์˜๋ฏธ๋ก ์  ๋…ผ์˜๊ฐ€ ํ•„์š”ํ•ด์ง€๋Š” ๋“ฑ ์ดˆ๊ธฐ ํ•™์Šต ๊ณก์„ ๊ณผ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค [35, 36]. ์†Œ๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ์ด๋Ÿฌํ•œ ๊ตฌ์กฐ๊ฐ€ ์˜คํžˆ๋ ค ๊ณผ๋„ํ•œ ๋ณต์žก์„ฑ(Overkill)์„ ์ดˆ๋ž˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [37]. - **๋ฉ”๋ชจ์ด์ œ์ด์…˜์˜ ๋น„์šฉ:** `React.memo`, `useMemo`, `useCallback`์„ ๋‚จ์šฉํ•˜๋ฉด ์˜คํžˆ๋ ค ์„ฑ๋Šฅ์ด ์ €ํ•˜๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. React๊ฐ€ ์ด์ „ props๋ฅผ ์ €์žฅํ•˜๊ณ  ๋น„๊ตํ•˜๋Š” ์ž‘์—…์— ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉฐ, ์ปดํฌ๋„ŒํŠธ ๋ Œ๋”๋ง ๋น„์šฉ์ด ๋งค์šฐ ์ž‘์€ ๊ฒฝ์šฐ ์ด ๋น„๊ต ์ž‘์—…์ด ๋ Œ๋”๋ง ์ž์ฒด๋ณด๋‹ค ๋” ๋งŽ์€ ๋น„์šฉ์„ ์†Œ๋ชจํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [38, 39]. - **์ƒํƒœ ๊ด€๋ฆฌ ๋„๊ตฌ์˜ ์œ ์—ฐ์„ฑ vs ๋ณด์ผ๋Ÿฌํ”Œ๋ ˆ์ดํŠธ:** Zustand์˜ ๊ทน๋‹จ์ ์ธ ์œ ์—ฐ์„ฑ์€ ๊ทœ์œจ ์—†์ด ์‚ฌ์šฉ๋  ๊ฒฝ์šฐ ํŒ€์›๋งˆ๋‹ค ์„œ๋กœ ๋‹ค๋ฅธ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ ํŒจํ„ด์„ ์ž‘์„ฑํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ๋“ฑ ํ˜ผ๋ž€์„ ์•ผ๊ธฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [19, 40]. ๋ฐ˜๋ฉด Redux๋Š” ์ดˆ๊ธฐ์— ์ž‘์„ฑํ•ด์•ผ ํ•˜๋Š” ๋ณด์ผ๋Ÿฌํ”Œ๋ ˆ์ดํŠธ๊ฐ€ ๋งค์šฐ ๋งŽ์•„ ๊ฐœ๋ฐœ ์†๋„๋ฅผ ๋Šฆ์ถ”์ง€๋งŒ, ๋Œ€๊ทœ๋ชจ ํŒ€์—์„œ๋Š” ์˜คํžˆ๋ ค ์ด ๊ตฌ์กฐ๊ฐ€ ๋ฒ„๊ทธ๋ฅผ ๋ฐฉ์ง€ํ•˜๋Š” ๊ธฐ๋Šฅ์œผ๋กœ ์ž‘์šฉํ•ฉ๋‹ˆ๋‹ค [22, 41]. - **React Compiler์™€ ์„œ๋“œํŒŒํ‹ฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํ˜ธํ™˜์„ฑ:** React Compiler๋ฅผ ๋„์ž…ํ•˜๋ฉด ์ˆ˜๋™ ๋ฉ”๋ชจ์ด์ œ์ด์…˜์˜ ํ•„์š”์„ฑ์„ ํฌ๊ฒŒ ์ค„์ผ ์ˆ˜ ์žˆ์ง€๋งŒ, `useMutation`์ด๋‚˜ `useLocation`์ฒ˜๋Ÿผ ๋ Œ๋”๋ง ์‹œ๋งˆ๋‹ค ์˜๋„์ ์œผ๋กœ ์ƒˆ๋กœ์šด ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ์„œ๋“œํŒŒํ‹ฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํ›…๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ ์บ์‹ฑ ์ฒด์ธ์ด ๋Š์–ด์ง€๊ณ  ๋ฆฌ๋ Œ๋”๋ง์ด ๋ฐœ์ƒํ•˜๋Š” ํ•œ๊ณ„๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค [42, 43]. ## ๐Ÿ”— Knowledge Connections ### Related Concepts #### [์•„ํ‚คํ…์ฒ˜/๊ธฐ๋ฐ˜ ๊ธฐ์ˆ ] - [[Feature-Sliced Design|Feature-Sliced Design]] - ์—ฐ๊ฒฐ ์ด์œ : React์˜ ํ•œ๊ณ„์ธ ๊ตฌ์ฒด์ ์ธ ์•„ํ‚คํ…์ฒ˜ ๋ถ€์žฌ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์„ค๊ณ„๋œ ๋Œ€๊ทœ๋ชจ ํ”„๋ก ํŠธ์—”๋“œ ๋ฐฉ๋ฒ•๋ก ์ž…๋‹ˆ๋‹ค. - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๋ ˆ์ด์–ด(Layer) ๊ฐ„์˜ ๋‹จ๋ฐฉํ–ฅ ์˜์กด์„ฑ ์›์น™๊ณผ Public API๋ฅผ ํ™œ์šฉํ•œ ๋ชจ๋“ˆ์˜ ์บก์Аํ™” ๋ฐ ๊ฒฐํ•ฉ๋„ ์ตœ์†Œํ™” ๋ฐฉ๋ฒ•. - [[SOLID Principles|SOLID Principles]] - ์—ฐ๊ฒฐ ์ด์œ : ํ™•์žฅ ๊ฐ€๋Šฅํ•˜๊ณ  ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์‰ฌ์šด React ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ธฐ ์œ„ํ•œ ํ•ต์‹ฌ ์†Œํ”„ํŠธ์›จ์–ด ์—”์ง€๋‹ˆ์–ด๋ง ์›์น™์ž…๋‹ˆ๋‹ค. - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๊ฑฐ๋Œ€ํ•œ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋‹จ์ผ ์ฑ…์ž„ ์›์น™(SRP)์— ๋”ฐ๋ผ ์ž‘์€ ๊ธฐ๋Šฅ์œผ๋กœ ๋ถ„๋ฆฌํ•˜๊ณ , ์ปค์Šคํ…€ ํ›…์„ ํ™œ์šฉํ•˜์—ฌ ๋กœ์ง์„ ์žฌ์‚ฌ์šฉํ•˜๋Š” ๊ตฌ์กฐ์  ์‚ฌ๊ณ . #### [๊ตฌํ˜„/ํ™œ์šฉ ๋„๊ตฌ] - State Management Libraries (Redux, Zustand, Context API) - ์—ฐ๊ฒฐ ์ด์œ : ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ํฌ๊ธฐ์™€ ์ƒํƒœ ์—…๋ฐ์ดํŠธ ๋นˆ๋„์— ๋”ฐ๋ผ ์ ์ ˆํ•œ ๋„๊ตฌ๋ฅผ ์„ ํƒํ•˜๋Š” ๊ฒƒ์€ ํ™•์žฅ์„ฑ์— ์ง€๋Œ€ํ•œ ์˜ํ–ฅ์„ ๋ฏธ์นฉ๋‹ˆ๋‹ค. - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๋ถˆํ•„์š”ํ•œ ๋ฆฌ๋ Œ๋”๋ง ๋ฐฉ์ง€๋ฅผ ์œ„ํ•œ Selector ํŒจํ„ด์˜ ๋™์ž‘ ์›๋ฆฌ์™€, ๋Œ€๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ์—์„œ ๊ฐ•์ œ๋˜๋Š” ์ƒํƒœ ๊ด€๋ฆฌ ์•„ํ‚คํ…์ฒ˜์˜ ์ค‘์š”์„ฑ. - Code Splitting & Lazy Loading - ์—ฐ๊ฒฐ ์ด์œ : ์ฝ”๋“œ๊ฐ€ ๋น„๋Œ€ํ•ด์ง์— ๋”ฐ๋ผ ๋ฐœ์ƒํ•˜๋Š” ์„ฑ๋Šฅ ์ €ํ•˜(๋ฒˆ๋“ค ํฌ๊ธฐ ์ฆ๊ฐ€)๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ํ•ต์‹ฌ ๋Ÿฐํƒ€์ž„ ์ตœ์ ํ™” ๊ธฐ๋ฒ•์ž…๋‹ˆ๋‹ค. - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: `React.lazy`์™€ Vite์˜ `manualChunks`๋ฅผ ์ด์šฉํ•œ ๋ฒˆ๋“ค ํฌ๊ธฐ ์ถ•์†Œ ๋ฐ ๋ธŒ๋ผ์šฐ์ € ์บ์‹ฑ ์ „๋žต. - React Error Boundaries - ์—ฐ๊ฒฐ ์ด์œ : ๋Œ€๊ทœ๋ชจ ์•ฑ์—์„œ ํ•˜๋‚˜์˜ ๊ฒฐํ•จ ์žˆ๋Š” ์ปดํฌ๋„ŒํŠธ๋กœ ์ธํ•ด ์ „์ฒด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋ถ•๊ดด๋˜๋Š” ๊ฒƒ์„ ๋ง‰์•„์ฃผ๋Š” ์•ˆ์ „ ์žฅ์น˜์ž…๋‹ˆ๋‹ค. - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๋Ÿฐํƒ€์ž„ ๋ Œ๋”๋ง ์—๋Ÿฌ๋ฅผ ๊ฒฉ๋ฆฌ(Isolate)ํ•˜๊ณ  ํด๋ฐฑ(Fallback) UI๋ฅผ ์ œ๊ณตํ•˜์—ฌ ์‹œ์Šคํ…œ ๋ณต์›๋ ฅ์„ ๋†’์ด๋Š” ๋ฐฉ๋ฒ•. ### Deeper Research Questions - ๋Œ€๊ทœ๋ชจ ํŒ€ ํ™˜๊ฒฝ์—์„œ Feature-Sliced Design์„ ์ ์šฉํ•  ๋•Œ, 'Shared' ๋ ˆ์ด์–ด๊ฐ€ ๋น„๋Œ€ํ•ด์ง€๊ณ  ๊ธฐ๋Šฅ ๊ฐ„ ๊ต์ฐจ ๊ด€์‹ฌ์‚ฌ(Cross-cutting concerns)๊ฐ€ ์–ฝํžˆ๋Š” ๋ฌธ์ œ๋ฅผ ์–ด๋–ป๊ฒŒ ๊ด€๋ฆฌํ•ด์•ผ ํ•˜๋Š”๊ฐ€? - React Context API์—์„œ ๋ฐœ์ƒํ•˜๋Š” ๋ฆฌ๋ Œ๋”๋ง ํญํฌ(Re-render storm) ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด Zustand์˜ Selector ํŒจํ„ด์€ ๋‚ด๋ถ€์ ์œผ๋กœ ๊ตฌ๋…(Subscription) ๋ชจ๋ธ์„ ์–ด๋–ป๊ฒŒ ๋‹ค๋ฅด๊ฒŒ ์ฒ˜๋ฆฌํ•˜๋Š”๊ฐ€? - React Compiler์˜ ์ž๋™ ๋ฉ”๋ชจ์ด์ œ์ด์…˜ ๊ธฐ๋Šฅ์ด ๋„์ž…๋จ์— ๋”ฐ๋ผ ๊ธฐ์กด ๋ ˆ๊ฑฐ์‹œ ์ฝ”๋“œ๋ฒ ์ด์Šค์˜ ๊ธฐ์ˆ  ๋ถ€์ฑ„(์˜ˆ: Rules of React ์œ„๋ฐ˜ ์‚ฌํ•ญ)๋Š” ์ปดํŒŒ์ผ ์ตœ์ ํ™” ๊ณผ์ •์—์„œ ์–ด๋– ํ•œ ๋ถ€์ž‘์šฉ์„ ์ผ์œผํ‚ฌ ์ˆ˜ ์žˆ๋Š”๊ฐ€? - Vite์˜ `manualChunks`๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฑฐ๋Œ€ํ•œ ๋ฒˆ๋“ค์„ ๋ถ„๋ฆฌํ•  ๋•Œ, ๋ฒค๋” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(React core, UI Kits ๋“ฑ)์˜ ํŠน์„ฑ์— ๋”ฐ๋ฅธ ์ตœ์ ์˜ ์ฒญํฌ ๋ถ„ํ•  ๋ฐ ๋ธŒ๋ผ์šฐ์ € ์บ์‹ฑ ์ „๋žต์€ ๋ฌด์—‡์ธ๊ฐ€? - ๋Œ€๊ทœ๋ชจ ๋ฆฌ์ŠคํŠธ ๋ฐ์ดํ„ฐ๋ฅผ ๋ Œ๋”๋งํ•  ๋•Œ ๊ฐ€์ƒํ™”(Virtualization)๋ฅผ ์ ์šฉํ•˜์ง€ ์•Š์œผ๋ฉด ๋ธŒ๋ผ์šฐ์ € ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น(Detached DOM nodes ๋“ฑ) ์ธก๋ฉด์—์„œ ์–ด๋–ค ์น˜๋ช…์ ์ธ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š”๊ฐ€? ### Practical Application Contexts - **Implementation:** ํ”„๋กœ์ ํŠธ ์ดˆ๊ธฐ ์„ค์ • ์‹œ ๊ธฐ์ˆ  ํŒŒ์ผ ๋‹จ์œ„(components, hooks) ๊ตฌ์กฐ๋ฅผ ํ”ผํ•˜๊ณ , ๋„๋ฉ”์ธ/๊ธฐ๋Šฅ ์ค‘์‹ฌ์˜ ํด๋” ๊ตฌ์กฐ๋ฅผ ์„ค๊ณ„ํ•ฉ๋‹ˆ๋‹ค. ํŒŒ์ผ๋ช…์€ ์šด์˜์ฒด์ œ ๊ฐ„ ์ถฉ๋Œ ๋ฐฉ์ง€๋ฅผ ์œ„ํ•ด kebab-case๋กœ, ์ปดํฌ๋„ŒํŠธ๋Š” PascalCase๋กœ ์ผ๊ด€๋˜๊ฒŒ ๋ช…๋ช…ํ•ฉ๋‹ˆ๋‹ค. - **System Design:** ์ „์—ญ ์ƒํƒœ(Zustand/Redux), ์„œ๋ฒ„ ์ƒํƒœ(TanStack Query), ๋กœ์ปฌ ์ƒํƒœ(useState)์˜ ์ฑ…์ž„์„ ๋ช…ํ™•ํžˆ ๋ถ„๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์žฆ์€ ์—…๋ฐ์ดํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ์ƒํƒœ๋Š” ์ปดํฌ๋„ŒํŠธ ํŠธ๋ฆฌ์˜ ์ตœ์ƒ๋‹จ Context์— ๋‘๋Š” ๊ฒƒ์„ ํ”ผํ•ฉ๋‹ˆ๋‹ค. - **Operation / Maintenance:** Sentry๋‚˜ LogRocket๊ณผ ๊ฐ™์€ ํ”„๋ก ํŠธ์—”๋“œ ๋ชจ๋‹ˆํ„ฐ๋ง ๋„๊ตฌ์™€ React Error Boundaries๋ฅผ ๊ฒฐํ•ฉํ•˜์—ฌ, ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ์—์„œ ๋ฐœ์ƒํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ ๋ Œ๋”๋ง ์—๋Ÿฌ๋ฅผ ์บก์ฒ˜ํ•˜๊ณ  ์•ฑ์˜ ํฌ๋ž˜์‹œ๋ฅผ ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค. - **Learning Path:** ๋‹จ์ˆœํ•œ React ๋ฌธ๋ฒ• ํ•™์Šต์„ ๋„˜์–ด, ์ƒํƒœ ๊ด€๋ฆฌ ๋„๊ตฌ๋ณ„ ๋ Œ๋”๋ง ์ตœ์ ํ™” ์ฐจ์ด๋ฅผ ๋ถ„์„ํ•˜๊ณ  Chrome DevTools ํ”„๋กœํŒŒ์ผ๋Ÿฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ Œ๋”๋ง ๋ณ‘๋ชฉ์„ ํ™•์ธํ•˜๋Š” ์Šต๊ด€์„ ๊ธธ๋Ÿฌ ์•„ํ‚คํ…ํŠธ ์ˆ˜์ค€์œผ๋กœ ์„ฑ์žฅํ•ฉ๋‹ˆ๋‹ค. - **My Project Relevance:** ํ˜„์žฌ ์œ ์ง€๋ณด์ˆ˜ ์ค‘์ธ React ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๋ฌด๊ฑฐ์šด ์„œ๋“œํŒŒํ‹ฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ์ธํ•ด ๋ฉ”์ธ ๋ฒˆ๋“ค ํฌ๊ธฐ๊ฐ€ ๋น„๋Œ€ํ•ด์ง„ ์ƒํ™ฉ์ด๋ผ๋ฉด, `React.lazy` ๊ธฐ๋ฐ˜์˜ ๋ผ์šฐํŠธ ๋ ˆ๋ฒจ ์Šคํ”Œ๋ฆฌํŒ…๊ณผ Vite `manualChunks` ์ ์šฉ์„ ๊ฒ€ํ† ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ### Adjacent Topics - Server Components (Next.js) - ํ™•์žฅ ๋ฐฉํ–ฅ: ํด๋ผ์ด์–ธํŠธ ์ธก์œผ๋กœ ์ „์†ก๋˜๋Š” JavaScript ๋ฒˆ๋“ค ์ž์ฒด๋ฅผ ์ œ๊ฑฐํ•˜์—ฌ ํ•˜์ด๋“œ๋ ˆ์ด์…˜(Hydration) ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ์ค„์ด๊ณ  ํ™•์žฅ์„ฑ๊ณผ ์„ฑ๋Šฅ์„ ๋™์‹œ์— ์žก๋Š” ์ตœ์‹  ๋ Œ๋”๋ง ํŒจ๋Ÿฌ๋‹ค์ž„. - Memory Leak Detection in JavaScript - ํ™•์žฅ ๋ฐฉํ–ฅ: ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์žฅ์‹œ๊ฐ„ ์‚ฌ์šฉ ์‹œ ์„ฑ๋Šฅ์„ ์ €ํ•˜์‹œํ‚ค๋Š” Detached DOM Nodes๋‚˜ ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ ๋ˆ„์ˆ˜ ๋“ฑ์„ Chrome DevTools Heap Snapshot์„ ํ†ตํ•ด ๋””๋ฒ„๊น…ํ•˜๋Š” ๋ฐฉ๋ฒ•. - Git Branching Workflows for Small & Large Teams - ํ™•์žฅ ๋ฐฉํ–ฅ: ๊ทœ๋ชจ๊ฐ€ ํ™•์žฅ๋˜๋Š” ํ”„๋ก ํŠธ์—”๋“œ ํŒ€์ด ์ถฉ๋Œ ์—†์ด ์ฝ”๋“œ๋ฅผ ํ†ตํ•ฉํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” GitHub Flow, Trunk-Based Development ๋ฐ PR(Pull Request) ๋ฆฌ๋ทฐ ์—ํ‹ฐ์ผ“. --- *Last updated: 2026-04-30*