# [[Scalable React Applications]] ## ๐Ÿ“Œ Brief ์‹œ Summary ํ™•์žฅ์„ฑ ์žˆ๋Š” ๋ฆฌ์•กํŠธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜(Scalable React Applications)์€ ์ฝ”๋“œ๋ฒ ์ด์Šค์™€ ํŒ€์˜ ๊ทœ๋ชจ๊ฐ€ ์ปค์ง€๋”๋ผ๋„ ์œ ์ง€๋ณด์ˆ˜์„ฑ, ์„ฑ๋Šฅ, ๋ช…ํ™•ํ•œ ์•„ํ‚คํ…์ฒ˜ ๊ฒฝ๊ณ„๋ฅผ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค๊ณ„๋œ ํ”„๋ก ํŠธ์—”๋“œ ์‹œ์Šคํ…œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค [1, 2]. ์ด๋ฅผ ๋‹ฌ์„ฑํ•˜๊ธฐ ์œ„ํ•ด ๊ฐœ๋ฐœ์ž๋“ค์€ ๋‹จ์ˆœํ•œ ํŒŒ์ผ ์œ ํ˜•๋ณ„ ํด๋” ๊ตฌ์กฐ๋ฅผ ๋„˜์–ด ๋น„์ฆˆ๋‹ˆ์Šค ๊ธฐ๋Šฅ(Feature) ์ค‘์‹ฌ์˜ ๋ชจ๋“ˆ์‹ ์•„ํ‚คํ…์ฒ˜๋ฅผ ์ฑ„ํƒํ•˜๋ฉฐ [3, 4], ์—„๊ฒฉํ•œ ๋ช…๋ช… ๊ทœ์น™๊ณผ ํด๋ฆฐ ์ฝ”๋“œ ์›์น™(SOLID, DRY)์„ ์ค€์ˆ˜ํ•ฉ๋‹ˆ๋‹ค [5, 6]. ๋˜ํ•œ ์ƒํƒœ ๊ด€๋ฆฌ(State Management) ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ์ ์ ˆํ•œ ์„ ํƒ๊ณผ ๋ Œ๋”๋ง ์ตœ์ ํ™” ๊ธฐ์ˆ ์„ ํ†ตํ•ด ๋ณต์žกํ•œ UI์—์„œ๋„ ์„ฑ๋Šฅ ์ €ํ•˜๋ฅผ ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค [7, 8]. ## ๐Ÿ“– Core Content * **์•„ํ‚คํ…์ฒ˜ ๋ฐ ํด๋” ๊ตฌ์กฐ (Architecture & Folder Structure)** ๋ฆฌ์•กํŠธ๋Š” ๊ตฌ์กฐ์— ๋Œ€ํ•œ ๊ฐ•์ œ์„ฑ์ด ์—†๊ธฐ ๋•Œ๋ฌธ์—, ์•ฑ์ด ํ™•์žฅ๋  ๋•Œ ์•„ํ‚คํ…์ฒ˜๊ฐ€ ๋ถ•๊ดด๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋นˆ๋ฒˆํ•ฉ๋‹ˆ๋‹ค [1]. ์ž‘์€ ๊ทœ๋ชจ์—์„œ๋Š” ์ปดํฌ๋„ŒํŠธ๋‚˜ ํ›…์„ ํŒŒ์ผ ์œ ํ˜•๋ณ„๋กœ ๋ชจ์œผ๋Š” ํ‰๋ฉด์ ์ธ ๊ตฌ์กฐ(Flat Structure)๊ฐ€ ์ž‘๋™ํ•˜์ง€๋งŒ, ์•ฑ์ด ์ปค์ง€๋ฉด ๊ธฐ๋Šฅ(Feature) ๋‹จ์œ„๋กœ ๊ตฌ์กฐ๋ฅผ ๋ฌถ๋Š” ๊ฒƒ์ด ํ•„์ˆ˜์ ์ž…๋‹ˆ๋‹ค [9, 10]. ํŠนํžˆ 2025๋…„ ํ”„๋ก ํŠธ์—”๋“œ ์ƒํƒœ๊ณ„์—์„œ๋Š” ๋ชจ๋“ˆ๊ฐ„์˜ ๊ฒฐํ•ฉ๋„๋ฅผ ๋‚ฎ์ถ”๋Š” **Feature-Sliced Design (FSD)**์ด ๊ฐ•๋ ฅํ•œ ํ•ด๊ฒฐ์ฑ…์œผ๋กœ ์ œ์‹œ๋ฉ๋‹ˆ๋‹ค [11, 12]. FSD๋Š” ์•ฑ์„ `app`, `pages`, `widgets`, `features`, `entities`, `shared`์˜ ๊ณ„์ธต์œผ๋กœ ๋‚˜๋ˆ„๊ณ , ์ƒ์œ„ ๊ณ„์ธต์—์„œ ํ•˜์œ„ ๊ณ„์ธต์œผ๋กœ๋งŒ ์˜์กดํ•˜๋„๋ก ๋‹จ๋ฐฉํ–ฅ ์˜์กด์„ฑ ๊ทœ์น™์„ ๊ฐ•์ œํ•˜์—ฌ ์šฐ๋ฐœ์ ์ธ ์ฝ”๋“œ ๊ฒฐํ•ฉ์„ ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค [13, 14]. * **ํšจ์œจ์ ์ธ ์ƒํƒœ ๊ด€๋ฆฌ (State Management)** ์ƒํƒœ ๊ด€๋ฆฌ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ํฌ๊ธฐ์— ๋”ฐ๋ผ ๋„๊ตฌ๋ฅผ ์‹ ์ค‘ํžˆ ์„ ํƒํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. React์— ๋‚ด์žฅ๋œ Context API๋Š” ํ…Œ๋งˆ๋‚˜ ๋‹ค๊ตญ์–ด ์„ค์ •์ฒ˜๋Ÿผ ์ž์ฃผ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š๋Š” ์ •์  ๋ฐ์ดํ„ฐ ๊ณต์œ ์—๋Š” ํƒ์›”ํ•˜์ง€๋งŒ, ๊ฐ’์ด ๋ณ€๊ฒฝ๋  ๋•Œ๋งˆ๋‹ค ํ•˜์œ„์˜ ๋ชจ๋“  ๊ตฌ๋… ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ฆฌ๋ Œ๋”๋ง์‹œํ‚ค๋Š” ์น˜๋ช…์ ์ธ ๋‹จ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค [15-17]. ๋ฐ˜๋ฉด Zustand๋Š” ์„ ํƒ์ž(Selector) ํŒจํ„ด์„ ํ†ตํ•ด ํ•„์š”ํ•œ ์ƒํƒœ ์กฐ๊ฐ๋งŒ ๊ตฌ๋…ํ•  ์ˆ˜ ์žˆ์–ด ๋ฆฌ๋ Œ๋”๋ง์„ ๋ฐฉ์ง€ํ•˜๋ฉฐ, ์ค‘๋Œ€ํ˜• ํ”„๋กœ์ ํŠธ์—์„œ ํ›Œ๋ฅญํ•œ ๋Œ€์•ˆ์ด ๋ฉ๋‹ˆ๋‹ค [16, 18, 19]. 10๋ช… ์ด์ƒ์˜ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ฐธ์—ฌํ•˜๊ฑฐ๋‚˜ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ ๋กœ์ง์ด ์–ฝํžŒ ๊ฑฐ๋Œ€ํ•œ ์•ฑ์—์„œ๋Š” ๋ณด์ผ๋Ÿฌํ”Œ๋ ˆ์ดํŠธ๊ฐ€ ์žˆ๋”๋ผ๋„ ์˜ˆ์ธก ๊ฐ€๋Šฅ์„ฑ์„ ๊ฐ•์ œํ•˜๋Š” Redux(๋ฐ RTK Query)๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์˜ค๋ฅ˜๋ฅผ ๋ฐฉ์ง€ํ•˜๋Š” ํ‘œ์ค€์ ์ธ ์ ‘๊ทผ์ž…๋‹ˆ๋‹ค [20-22]. ๋˜ํ•œ, ์„œ๋ฒ„ ์ƒํƒœ๋Š” TanStack Query๋ฅผ ํ™œ์šฉํ•˜์—ฌ ํด๋ผ์ด์–ธํŠธ ์ƒํƒœ์™€ ๋ถ„๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ๊ถŒ์žฅ๋ฉ๋‹ˆ๋‹ค [16]. * **์„ฑ๋Šฅ ์ตœ์ ํ™” ์ „๋žต (Performance Optimization)** ํ˜„๋Œ€์˜ ํ™•์žฅ์„ฑ ์žˆ๋Š” ์•ฑ์€ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜(UX)๊ณผ ์ง๊ฒฐ๋˜๋Š” ์ดˆ๊ธฐ ๋กœ๋”ฉ ๋ฐ ๋Ÿฐํƒ€์ž„ ์„ฑ๋Šฅ ์ตœ์ ํ™”๊ฐ€ ํ•„์ˆ˜์ž…๋‹ˆ๋‹ค [23, 24]. ์ดˆ๊ธฐ ๋ฒˆ๋“ค ํฌ๊ธฐ๋ฅผ ์ค„์ด๊ธฐ ์œ„ํ•ด `React.lazy`์™€ `Suspense`๋ฅผ ํ™œ์šฉํ•œ ๋ผ์šฐํŠธ ๋ฐ ์ปดํฌ๋„ŒํŠธ ๋‹จ์œ„์˜ ์ฝ”๋“œ ์Šคํ”Œ๋ฆฌํŒ…์„ ์ ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค [25-28]. ๋Ÿฐํƒ€์ž„ ์ตœ์ ํ™”๋ฅผ ์œ„ํ•ด์„œ๋Š” ๋ฌด๋ถ„๋ณ„ํ•œ ๋ฆฌ๋ Œ๋”๋ง์„ ๋ง‰๊ธฐ ์œ„ํ•ด `React.memo`, `useCallback`, `useMemo`๋ฅผ ์ „๋žต์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋˜, ์ฐธ์กฐ ์•ˆ์ •์„ฑ(Reference Stability)์„ ํ•ด์น˜๋Š” JSX ๋‚ด ์ต๋ช… ํ•จ์ˆ˜ ์‚ฌ์šฉ์„ ์ง€์–‘ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค [29-31]. ๋˜ํ•œ ๋ฐฉ๋Œ€ํ•œ ๋ชฉ๋ก์„ ๋ Œ๋”๋งํ•  ๋•Œ๋Š” DOM ํŒฝ์ฐฝ์„ ๋ง‰๊ธฐ ์œ„ํ•ด ๊ฐ€์ƒํ™”(Windowing/Virtualization) ๊ธฐ๋ฒ•์„ ์‚ฌ์šฉํ•˜๋ฉฐ, ๋ฆฌ์ŠคํŠธ ๋ Œ๋”๋ง ์‹œ์—๋Š” ๊ณ ์œ ํ•˜๊ณ  ์•ˆ์ •์ ์ธ `key` ๊ฐ’์„ ์ œ๊ณตํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค [24, 32, 33]. * **ํด๋ฆฐ ์ฝ”๋“œ ์›์น™ ๋ฐ ๋ช…๋ช… ๊ทœ์น™ (Clean Code & Naming Conventions)** ๋ฆฌ์•กํŠธ ์ปดํฌ๋„ŒํŠธ๋Š” ๋‹จ์ผ ์ฑ…์ž„ ์›์น™(SRP)์„ ์ค€์ˆ˜ํ•ด ํ•œ ๊ฐ€์ง€ ์ผ๋งŒ ํ•˜๋„๋ก 300์ค„ ์ดํ•˜๋กœ ์ž‘๊ฒŒ ์œ ์ง€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค [34]. ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์ด ์ค‘๋ณต๋˜๋ฉด Custom Hook์œผ๋กœ ์ถ”์ถœํ•˜์—ฌ DRY(Don't Repeat Yourself) ์›์น™์„ ์ง€ํ‚ค๋˜, ์˜ค๋ฒ„์—”์ง€๋‹ˆ์–ด๋ง(KISS, YAGNI ์›์น™ ์œ„๋ฐฐ)์€ ํ”ผํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค [35, 36]. ํŒŒ์ผ ๋ช…๋ช… ๊ทœ์น™ ์—ญ์‹œ ํ˜‘์—… ์‹œ ๋งค์šฐ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ์šด์˜์ฒด์ œ ๊ฐ„์˜ ๋Œ€์†Œ๋ฌธ์ž ๊ตฌ๋ถ„ ์ถฉ๋Œ์„ ๋ง‰๊ธฐ ์œ„ํ•ด ํŒŒ์ผ๋ช…๊ณผ ํด๋”๋ช…์€ `kebab-case`๋ฅผ ์ฃผ๋กœ ์‚ฌ์šฉํ•˜๊ณ  [37-39], ๋ฆฌ์•กํŠธ ์ปดํฌ๋„ŒํŠธ๋ช…์€ `PascalCase` [39, 40], ๋ณ€์ˆ˜์™€ Props, ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ(`handle`, `on` ์ ‘๋‘์‚ฌ ์‚ฌ์šฉ)๋Š” `camelCase`๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ๊ณผ ์ผ๊ด€์„ฑ์„ ํ™•๋ณดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [41, 42]. ## ๐Ÿ”— Knowledge Connections - **Related Topics:** `[[Feature-Sliced Design (FSD)]]`, `[[State Management (Context API, Zustand, Redux)]]`, `[[Performance Optimization (Memoization, Code Splitting)]]`, `[[Clean Code Principles (SOLID, DRY, KISS, YAGNI)]]` - **Projects/Contexts:** `[[Modern Frontend Engineering 2025]]`, `[[Scalable React Folder Structure]]` - **Contradictions/Notes:** ์†Œ์Šค์— ๋”ฐ๋ฅด๋ฉด "Context API"๋Š” ์ƒํƒœ ๊ด€๋ฆฌ ๋„๊ตฌ๋ผ๊ธฐ๋ณด๋‹ค๋Š” ๋ฐ์ดํ„ฐ ์ „๋‹ฌ(Transport) ๋ฉ”์ปค๋‹ˆ์ฆ˜์— ๊ฐ€๊น๊ณ , ์ƒํƒœ๊ฐ€ ๋นˆ๋ฒˆํ•˜๊ฒŒ ์—…๋ฐ์ดํŠธ๋˜๋Š” ๊ทœ๋ชจ์—์„œ๋Š” ์ „์ฒด ๋ฆฌ๋ Œ๋”๋ง(re-render storm) ๋ฌธ์ œ๋ฅผ ์•ผ๊ธฐํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์šฉํ•  ๋•Œ ์ฃผ์˜๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค [43-45]. ๋˜ํ•œ, ์†Œ์Šค๋“ค์€ "Zustand"๊ฐ€ ์œ ์—ฐํ•˜๊ณ  ๊ฐ€๋ฒผ์›Œ ์Šคํƒ€ํŠธ์—…์ด๋‚˜ ์ค‘ํ˜• ํ”„๋กœ์ ํŠธ์— ๊ฐ€์žฅ ์ ํ•ฉํ•œ ์˜ต์…˜์ž„์„ ๊ฐ•์กฐํ•˜์ง€๋งŒ, ํŒ€ ๊ทœ๋ชจ๊ฐ€ ์ปค์ง€๊ณ  ๋งค์šฐ ๋ณต์žกํ•œ ์•ฑ(1000๊ฐœ ์ด์ƒ์˜ ์ปดํฌ๋„ŒํŠธ)์„ ๋‹ค๋ฃฐ ๊ฒฝ์šฐ์—๋Š” ์—„๊ฒฉํ•œ ํŒจํ„ด์„ ๊ฐ•์ œํ•˜๋Š” Redux๊ฐ€ ๋” ๋‚˜์€ ๋Œ€์•ˆ์ด ๋  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์กฐ์–ธํ•ฉ๋‹ˆ๋‹ค [46-49]. --- *Last updated: 2026-04-26*