# [[React Application Scaling|React Application Scaling]] ## ๐Ÿ“Œ Brief Summary ๋ฆฌ์•กํŠธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์Šค์ผ€์ผ๋ง(React Application Scaling)์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ํฌ๊ธฐ์™€ ๋ณต์žก์„ฑ์ด ์ฆ๊ฐ€ํ•จ์— ๋”ฐ๋ผ ๋ฐœ์ƒํ•˜๋Š” ์•„ํ‚คํ…์ฒ˜, ์„ฑ๋Šฅ, ์ƒํƒœ ๊ด€๋ฆฌ, ๊ทธ๋ฆฌ๊ณ  ํ˜‘์—… ๋ฌธ์ œ๋ฅผ ์ฒด๊ณ„์ ์œผ๋กœ ํ•ด๊ฒฐํ•˜๋Š” ๊ณผ์ •์ž…๋‹ˆ๋‹ค [1-3]. ์ด๋Š” ๋‹จ์ˆœํžˆ ๋ Œ๋”๋ง ์†๋„๋ฅผ ๋†’์ด๋Š” ๊ฒƒ์„ ๋„˜์–ด, ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง๊ณผ UI์˜ ๊ฒฐํ•ฉ์„ ๋ง‰๊ณ , ์˜ˆ์ธก ๊ฐ€๋Šฅํ•œ ํด๋” ๊ตฌ์กฐ๋ฅผ ๋„์ž…ํ•˜๋ฉฐ, ๋ถˆํ•„์š”ํ•œ ๋ฆฌ๋ Œ๋”๋ง๊ณผ ๋ฒˆ๋“ค ํฌ๊ธฐ๋ฅผ ์ตœ์ ํ™”ํ•˜๋Š” ๊ฒƒ์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค [2-5]. ๊ฒฐ๊ณผ์ ์œผ๋กœ ๋Œ€๊ทœ๋ชจ ํŒ€์ด ์•ˆ์ •์ ์ด๊ณ  ์œ ์ง€๋ณด์ˆ˜ํ•˜๊ธฐ ์‰ฌ์šด ํ”„๋ก ํŠธ์—”๋“œ ์‹œ์Šคํ…œ์„ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋•๋Š” ํ•ต์‹ฌ ์—”์ง€๋‹ˆ์–ด๋ง ํŒจ๋Ÿฌ๋‹ค์ž„์ž…๋‹ˆ๋‹ค [3, 6]. ## ๐Ÿ“– Core Content * **๊ตฌ์กฐ์  ์•„ํ‚คํ…์ฒ˜ ๋ฐ ํด๋” ๊ตฌ์„ฑ (Architectural Paradigms):** ์ดˆ๊ธฐ ๋ฆฌ์•กํŠธ ์•ฑ์€ ์ปดํฌ๋„ŒํŠธ๋‚˜ ํ›…์„ ๊ธฐ์ˆ ์  ํŒŒ์ผ ํƒ€์ž…(Type-Based)์œผ๋กœ ๋ถ„๋ฆฌํ•˜์ง€๋งŒ, ์•ฑ์ด ์ปค์ง€๋ฉด ๊ธฐ๋Šฅ ๊ธฐ๋ฐ˜(Feature-Based) ๋˜๋Š” ๋„๋ฉ”์ธ ์ฃผ๋„ ๊ตฌ์กฐ๋กœ ์ „ํ™˜ํ•ด์•ผ ํ™•์žฅ์„ฑ์„ ํ™•๋ณดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [7, 8]. ํŠนํžˆ **FSD(Feature-Sliced Design)**๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ `app`, `pages`, `widgets`, `features`, `entities`, `shared` ๋“ฑ์˜ ๊ณ„์ธตํ™”๋œ ์Šฌ๋ผ์ด์Šค๋กœ ๋‚˜๋ˆ„๊ณ , ํ•˜์œ„ ๊ณ„์ธต๋งŒ ์ฐธ์กฐํ•˜๋„๋ก ํ•˜๋Š” ๋‹จ๋ฐฉํ–ฅ ์˜์กด์„ฑ์„ ๊ฐ•์ œํ•˜์—ฌ ์ฝ”๋“œ ๊ฒฐํ•ฉ๋„๋ฅผ ๋‚ฎ์ถ”๊ณ  ๋ฆฌํŒฉํ† ๋ง์„ ์šฉ์ดํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค [9-11]. * **์ƒํƒœ ๊ด€๋ฆฌ ์•„ํ‚คํ…์ฒ˜ (State Management Evolution):** ๋‹จ์ผํ•œ ์ „์—ญ ์ƒํƒœ ๋„๊ตฌ์—์„œ ๋ฒ—์–ด๋‚˜ ๋ฐ์ดํ„ฐ ํŠน์„ฑ์— ๋งž๋Š” ๋„๊ตฌ๋ฅผ ์„ ํƒํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค [12]. ํ…Œ๋งˆ๋‚˜ ๋กœ์ผ€์ผ์ฒ˜๋Ÿผ ์ •์ ์ด๊ณ  ๋ณ€๊ฒฝ์ด ์ ์€ ๋ฐ์ดํ„ฐ๋Š” Context API๊ฐ€ ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค [13]. ๋ฐ˜๋ฉด ๋นˆ๋ฒˆํ•˜๊ฒŒ ๋ณ€๊ฒฝ๋˜๋Š” ๋™์  ์ƒํƒœ๋Š” ์„ ํƒ์ž(Selector) ํŒจํ„ด์„ ํ†ตํ•ด ๋ฆฌ๋ Œ๋”๋ง์„ ๋ฐฉ์ง€ํ•˜๋Š” Zustand๊ฐ€ ์œ ๋ฆฌํ•˜๋ฉฐ, ๋ณต์žกํ•œ ๋น„๋™๊ธฐ ๋กœ์ง๊ณผ ๋Œ€๊ทœ๋ชจ ํŒ€ ํ˜‘์—…์—๋Š” ๊ตฌ์กฐ๋ฅผ ๊ฐ•์ œํ•˜๋Š” Redux๊ฐ€ ๊ถŒ์žฅ๋ฉ๋‹ˆ๋‹ค [14-17]. ์„œ๋ฒ„ ์ƒํƒœ ์ฒ˜๋ฆฌ๋Š” TanStack Query์™€ ๊ฐ™์€ API ๊ณ„์ธต์šฉ ๋„๊ตฌ๋กœ ์™„์ „ํžˆ ๋ถ„๋ฆฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค [16, 18]. * **์„ฑ๋Šฅ ๋ฐ ๋ฒˆ๋“ค๋ง ์ตœ์ ํ™” (Performance & Bundling):** ๋ฆฌ์•กํŠธ๋Š” ์ƒํƒœ๋‚˜ ํ”„๋กญ์Šค๊ฐ€ ๋ณ€๊ฒฝ๋  ๋•Œ๋งˆ๋‹ค ํ•˜์œ„ ํŠธ๋ฆฌ๋ฅผ ๋ฆฌ๋ Œ๋”๋งํ•ฉ๋‹ˆ๋‹ค [19]. ์ด๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด `React.memo`, `useCallback`, `useMemo`๋ฅผ ์ „๋žต์ ์œผ๋กœ ์‚ฌ์šฉํ•˜์—ฌ ์ฐธ์กฐ ์•ˆ์ •์„ฑ(Reference Equality)์„ ์œ ์ง€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค [20, 21]. ์ดˆ๊ธฐ ๋กœ๋”ฉ ์†๋„ ๊ฐœ์„ ์„ ์œ„ํ•ด์„œ๋Š” `React.lazy`์™€ ๋ผ์šฐํŠธ ๋ ˆ๋ฒจ์˜ ์ฝ”๋“œ ์Šคํ”Œ๋ฆฌํŒ…์„ ์ ์šฉํ•˜๊ณ , Vite์˜ `manualChunks`๋ฅผ ํ™œ์šฉํ•ด React ์ฝ”์–ด ๋“ฑ ๋ฌด๊ฑฐ์šด ๋ฒค๋” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋ณ„๋„ ํŒŒ์ผ๋กœ ๋ถ„๋ฆฌํ•˜์—ฌ ์บ์‹ฑ ํšจ์œจ์„ ๋†’์ž…๋‹ˆ๋‹ค [22-25]. ์ตœ๊ทผ์—๋Š” React Compiler๋ฅผ ๋„์ž…ํ•ด ๋นŒ๋“œ ํƒ€์ž„์— ์ž๋™ ๋ฉ”๋ชจ์ด์ œ์ด์…˜์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ธฐ๋ฒ•๋„ ํ™œ์šฉ๋ฉ๋‹ˆ๋‹ค [26-29]. * **์ฝ”๋“œ ํ’ˆ์งˆ ๋ฐ ๋ณต์›๋ ฅ (Quality & Resilience):** SOLID, DRY, KISS, YAGNI ์›์น™์„ ์ค€์ˆ˜ํ•˜์—ฌ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋‹จ์ผ ์ฑ…์ž„(SRP)์„ ๊ฐ–๋„๋ก ๊ฐ„๊ฒฐํ•˜๊ฒŒ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค [30-32]. ํŒŒ์ผ๋ช…์€ ์šด์˜์ฒด์ œ ํ˜ธํ™˜์„ฑ์„ ์œ„ํ•ด `kebab-case`๋ฅผ, ๋ฆฌ์•กํŠธ ์ปดํฌ๋„ŒํŠธ๋Š” `PascalCase`๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋“ฑ ๋„ค์ด๋ฐ ์ปจ๋ฒค์…˜์„ ํ†ต์ผํ•ฉ๋‹ˆ๋‹ค [33-36]. ๋˜ํ•œ ํŠน์ • ์ปดํฌ๋„ŒํŠธ์˜ ๋ Œ๋”๋ง ์˜ค๋ฅ˜๊ฐ€ ์ „์ฒด ์•ฑ์„ ๋‹ค์šด์‹œํ‚ค๋Š” ๊ฒƒ์„ ๋ง‰๊ธฐ ์œ„ํ•ด ์—๋Ÿฌ ๋ฐ”์šด๋”๋ฆฌ(Error Boundaries)๋ฅผ ์ค‘์š” UI ์„น์…˜๋งˆ๋‹ค ๋ฐฐ์น˜ํ•˜์—ฌ Fallback UI๋ฅผ ์ œ๊ณตํ•˜๋Š” ๋ณต์›๋ ฅ ์žˆ๋Š” ์„ค๊ณ„๊ฐ€ ํ•„์ˆ˜์ ์ž…๋‹ˆ๋‹ค [37-39]. ## โš–๏ธ Trade-offs & Caveats * **๊ณผ๋„ํ•œ ์—”์ง€๋‹ˆ์–ด๋ง (Over-Engineering):** FSD๋‚˜ Redux์™€ ๊ฐ™์€ ๊ณ ๋„ํ™”๋œ ์•„ํ‚คํ…์ฒ˜์™€ ์ƒํƒœ ๊ด€๋ฆฌ ๋„๊ตฌ๋ฅผ ์†Œ๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ๋‚˜ ๊ฒฝํ—˜์ด ์ ์€ ํŒ€์— ๋„์ž…ํ•˜๋ฉด, ํ•™์Šต ๊ณก์„ ์ด ํฌ๊ฒŒ ์ƒ์Šนํ•˜๊ณ  ๋ถˆํ•„์š”ํ•œ ๋ณด์ผ๋Ÿฌํ”Œ๋ ˆ์ดํŠธ ์ฝ”๋“œ๊ฐ€ ์–‘์‚ฐ๋˜์–ด ์˜คํžˆ๋ ค ๊ฐœ๋ฐœ ์†๋„๋ฅผ ๋Šฆ์ถœ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [40-43]. * **๋ฉ”๋ชจ์ด์ œ์ด์…˜์˜ ์˜ค์šฉ์— ๋”ฐ๋ฅธ ์„ฑ๋Šฅ ์ €ํ•˜:** `React.memo`๋‚˜ `useMemo`๋ฅผ ๋ฌด๋ถ„๋ณ„ํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๋ฉด, ์ด์ „ props ๋ฐ ์ƒํƒœ๋ฅผ ๋น„๊ตํ•˜๋Š” ๊ณผ์ •์—์„œ ๋ฐœ์ƒํ•˜๋Š” ์—ฐ์‚ฐ ๋น„์šฉ์ด ๋ Œ๋”๋ง ๋น„์šฉ ์ž์ฒด๋ฅผ ์ดˆ๊ณผํ•˜์—ฌ ์˜คํžˆ๋ ค ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์„ฑ๋Šฅ์„ ์•…ํ™”์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [44, 45]. * **React Compiler์˜ ๊ฐ€์‹œ์„ฑ ์ €ํ•˜ ๋ฐ ํ˜ธํ™˜์„ฑ ์ œ์•ฝ:** ์ž๋™ํ™”๋œ ์ตœ์ ํ™” ๋„๊ตฌ์ธ React Compiler๋Š” ๋ธ”๋ž™๋ฐ•์Šค์ฒ˜๋Ÿผ ์ž‘๋™ํ•˜๋ฏ€๋กœ ์„ฑ๋Šฅ ๋ณ‘๋ชฉ ๋ฐœ์ƒ ์‹œ ๋””๋ฒ„๊น…์ด ๋” ๊นŒ๋‹ค๋กœ์›Œ์ง‘๋‹ˆ๋‹ค [46]. ๋˜ํ•œ ๋งค ๋ Œ๋”๋ง ์‹œ ์˜๋„์ ์œผ๋กœ ๋ถˆ์•ˆ์ •ํ•œ ์ฐธ์กฐ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ์„œ๋“œํŒŒํ‹ฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(์˜ˆ: React Router, TanStack Query ์ผ๋ถ€ ํ›…)์™€๋Š” ์ตœ์ ํ™” ํ˜ธํ™˜์ด ๊นจ์งˆ ์ˆ˜ ์žˆ์œผ๋ฉฐ, React ๊ทœ์น™์„ ์ง€ํ‚ค์ง€ ์•Š์€ ๋ ˆ๊ฑฐ์‹œ ์ฝ”๋“œ๋ฒ ์ด์Šค์—์„œ๋Š” ์ ์šฉ์ด ์–ด๋ ต์Šต๋‹ˆ๋‹ค [47, 48]. * **Context API์˜ ๋ฆฌ๋ Œ๋”๋ง ํญํ’ (Re-render Storm):** Context API๋ฅผ ๋นˆ๋ฒˆํ•˜๊ฒŒ ๋ณ€ํ•˜๋Š” ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ์— ์‚ฌ์šฉํ•˜๋ฉด, ๋ฐ์ดํ„ฐ ์ค‘ ์ผ๋ถ€๋ถ„๋งŒ ๋ณ€๊ฒฝ๋˜๋”๋ผ๋„ ํ•ด๋‹น ์ปจํ…์ŠคํŠธ๋ฅผ ๊ตฌ๋…ํ•˜๋Š” ๋ชจ๋“  ํ•˜์œ„ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ถˆํ•„์š”ํ•˜๊ฒŒ ๋ฆฌ๋ Œ๋”๋ง๋˜๋Š” ์น˜๋ช…์ ์ธ ์„ฑ๋Šฅ ๋ณ‘๋ชฉ ํ˜„์ƒ์„ ์œ ๋ฐœํ•ฉ๋‹ˆ๋‹ค [49, 50]. ## ๐Ÿ”— Knowledge Connections ### Related Concepts #### [์•„ํ‚คํ…์ฒ˜ ๋ฐ ํด๋” ๊ตฌ์กฐ (Architecture & Structure)] - [[Feature-Sliced Design (FSD)|Feature-Sliced Design (FSD)]] - ์—ฐ๊ฒฐ ์ด์œ : ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ๋ฆฌ์•กํŠธ ์•ฑ์„ ๊ตฌ์ถ•ํ•˜๊ธฐ ์œ„ํ•œ ํ•ต์‹ฌ ๋„๋ฉ”์ธ ์ฃผ๋„ ์•„ํ‚คํ…์ฒ˜ ๋ฐฉ๋ฒ•๋ก ์ž…๋‹ˆ๋‹ค. - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๊ธฐ๋Šฅ, ์œ„์ ฏ, ์—”ํ‹ฐํ‹ฐ๋ฅผ ๋ถ„๋ฆฌํ•˜๊ณ  ๋‹จ๋ฐฉํ–ฅ ์˜์กด์„ฑ ๊ทœ์น™์„ ๊ฐ•์ œํ•˜์—ฌ ๊ฒฐ