# [[Scalable React Architecture]] ## ๐Ÿ“Œ Brief Summary ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ๋ฆฌ์•กํŠธ ์•„ํ‚คํ…์ฒ˜(Scalable React Architecture)๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ณต์žก์„ฑ ์ฆ๊ฐ€, ํŒ€์˜ ํ™•์žฅ, ์žฅ๊ธฐ์ ์ธ ์œ ์ง€๋ณด์ˆ˜ ์š”๊ตฌ๋ฅผ ์›ํ™œํ•˜๊ฒŒ ์ˆ˜์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ”„๋ก ํŠธ์—”๋“œ ์‹œ์Šคํ…œ์„ ์„ค๊ณ„ํ•˜๋Š” ๋ฐฉ๋ฒ•๋ก ์ž…๋‹ˆ๋‹ค [1-4]. ๋‹จ์ˆœํ•œ ํŒŒ์ผ ์œ ํ˜•๋ณ„ ํด๋” ๊ตฌ์„ฑ์„ ๋„˜์–ด ๊ธฐ๋Šฅ(Feature) ๋˜๋Š” ๋„๋ฉ”์ธ ๊ธฐ๋ฐ˜์˜ ๊ตฌ์กฐ์ธ ๊ธฐ๋Šฅ ๋ถ„ํ•  ์„ค๊ณ„(Feature-Sliced Design)๋ฅผ ์ฑ„ํƒํ•˜๋Š” ๋ฐฉํ–ฅ์œผ๋กœ ์ง„ํ™”ํ•ด ์™”์Šต๋‹ˆ๋‹ค [5, 6]. ์ด ์•„ํ‚คํ…์ฒ˜๋Š” ๋ช…์‹œ์ ์ธ ๊ฒฝ๊ณ„ ์„ค์ •, ๊ฒฐํ•ฉ๋„ ๊ฐ์†Œ, ์ผ๊ด€๋œ ๋ช…๋ช… ๊ทœ์น™ ์ ์šฉ ๋ฐ ์ ์ ˆํ•œ ์ƒํƒœ ๊ด€๋ฆฌ๋ฅผ ํ†ตํ•ด ๋†’์€ ์„ฑ๋Šฅ๊ณผ ๊ฐœ๋ฐœ ์†๋„๋ฅผ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ•ฉ๋‹ˆ๋‹ค [3, 6-12]. ## ๐Ÿ“– Core Content * **์•„ํ‚คํ…์ฒ˜์˜ ํ•„์š”์„ฑ๊ณผ ์‹คํŒจ ์š”์ธ:** ๋ฆฌ์•กํŠธ ์•ฑ์ด ์ปค์งˆ์ˆ˜๋ก ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์ด UI ์ปดํฌ๋„ŒํŠธ๋กœ ์ƒˆ์–ด๋‚˜๊ฐ€๊ฑฐ๋‚˜, ์ƒํƒœ ์†Œ์œ ๊ถŒ์ด ๋ถˆ๋ถ„๋ช…ํ•ด์ง€๊ณ , ๊ธฐ๋Šฅ ๊ฐ„ ์•”๋ฌต์ ์ธ ์˜์กด์„ฑ์ด ์ƒ๊ธฐ๋Š” ๋ฌธ์ œ๊ฐ€ ํ”ํžˆ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค [2, 13]. ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ์•„ํ‚คํ…์ฒ˜๋Š” ๊ฒฐํ•ฉ๋„(Coupling)๋ฅผ ๋‚ฎ์ถ”๊ณ  ์‘์ง‘๋„(Cohesion)๋ฅผ ๋†’์ด๋ฉฐ, ๋ชจ๋“ˆ๊ณผ ํผ๋ธ”๋ฆญ API์˜ ๋ช…ํ™•ํ•œ ๊ฒฝ๊ณ„๋ฅผ ์„ค์ •ํ•˜์—ฌ ์ธ์ง€ ๋ถ€ํ•˜๋ฅผ ์ค„์ด๊ณ  ์•ˆ์ „ํ•œ ์„ฑ์žฅ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค [3]. * **ํด๋” ๊ตฌ์กฐ์˜ ์ง„ํ™” (์œ ํ˜• ๊ธฐ๋ฐ˜์—์„œ ๊ธฐ๋Šฅ ๊ธฐ๋ฐ˜์œผ๋กœ):** ์ปดํฌ๋„ŒํŠธ, ํ›…, ์„œ๋น„์Šค๋ฅผ ๊ฐ๊ฐ์˜ ํด๋”๋กœ ๋ชจ์•„๋‘๋Š” ์ „ํ†ต์ ์ธ ํŒŒ์ผ ์œ ํ˜• ๊ธฐ๋ฐ˜ ๊ตฌ์กฐ๋Š” ๋‹จ์ผ ๊ธฐ๋Šฅ์„ ์ˆ˜์ •ํ•  ๋•Œ ์—ฌ๋Ÿฌ ํด๋”๋ฅผ ์˜ค๊ฐ€์•ผ ํ•˜๋ฏ€๋กœ ๋Œ€๊ทœ๋ชจ ํ™•์žฅ์— ๋ถˆ๋ฆฌํ•ฉ๋‹ˆ๋‹ค [7, 14-16]. 2025๋…„ ๊ธฐ์ค€์˜ ๋ชจ๋˜ ๋ฆฌ์•กํŠธ ํ”„๋กœ์ ํŠธ๋Š” ์—ฐ๊ด€๋œ ์ปดํฌ๋„ŒํŠธ, ํ›…, ๋กœ์ง, ํƒ€์ž…์„ ํ•˜๋‚˜์˜ ๋„๋ฉ”์ธ/๊ธฐ๋Šฅ ํด๋” ๋‚ด์— ๋ฐฐ์น˜ํ•˜๋Š” ๊ธฐ๋Šฅ ๊ธฐ๋ฐ˜(Feature-Based) ๊ตฌ์กฐ๋ฅผ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค [6, 16, 17]. * **๊ธฐ๋Šฅ ๋ถ„ํ•  ์„ค๊ณ„ (Feature-Sliced Design, FSD):** FSD๋Š” ํ”„๋ก ํŠธ์—”๋“œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์œ„ํ•ด ์„ค๊ณ„๋œ ์•„ํ‚คํ…์ฒ˜ ๋ฐฉ๋ฒ•๋ก ์œผ๋กœ, ์ฝ”๋“œ๋ฅผ ๊ธฐ์ˆ ์  ์œ ํ˜•์ด ์•„๋‹Œ ๋ฒ”์œ„(Scope)์™€ ์ฑ…์ž„(Responsibility)์— ๋”ฐ๋ผ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค [5, 18, 19]. ์•ฑ(app) -> ํŽ˜์ด์ง€(pages) -> ์œ„์ ฏ(widgets) -> ๊ธฐ๋Šฅ(features) -> ์—”ํ‹ฐํ‹ฐ(entities) -> ๊ณต์œ (shared)๋กœ ์ด์–ด์ง€๋Š” ๊ณ„์ธต ๋ชจ๋ธ์„ ๊ฐ€์ง€๋ฉฐ, ์ƒ์œ„ ๊ณ„์ธต์ด ํ•˜์œ„ ๊ณ„์ธต์—๋งŒ ์˜์กดํ•  ์ˆ˜ ์žˆ๋Š” ๋‹จ๋ฐฉํ–ฅ ์˜์กด์„ฑ ๊ทœ์น™์„ ์—„๊ฒฉํžˆ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค [8, 9, 18]. ๋˜ํ•œ ๊ฐ ์Šฌ๋ผ์ด์Šค๋Š” ๋‹จ์ผ ์ง„์ž…์ (`index.ts`)๋งŒ์„ ๋…ธ์ถœํ•˜๋Š” 'ํผ๋ธ”๋ฆญ API ๊ทœ์น™'์„ ํ†ตํ•ด ๋‚ด๋ถ€ ๊ตฌํ˜„์„ ์บก์Аํ™”ํ•ฉ๋‹ˆ๋‹ค [20-22]. * **ํด๋ฆฐ ์ฝ”๋“œ ๋ฐ SOLID ์›์น™ ์ ์šฉ:** ๋ฆฌ์•กํŠธ ์ปดํฌ๋„ŒํŠธ์˜ ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ๋†’์ด๋ ค๋ฉด SOLID, DRY, KISS, YAGNI์™€ ๊ฐ™์€ ์†Œํ”„ํŠธ์›จ์–ด ๊ณตํ•™ ์›์น™์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค [21, 23-26]. ์˜ˆ๋ฅผ ๋“ค์–ด ๋‹จ์ผ ์ฑ…์ž„ ์›์น™(SRP)์— ๋”ฐ๋ผ ์ปดํฌ๋„ŒํŠธ๊ฐ€ 300์ค„์„ ๋„˜์–ด๊ฐ€๋ฉด ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ž‘์€ ์ปดํฌ๋„ŒํŠธ๋กœ ๋ถ„๋ฆฌํ•ด์•ผ ํ•˜๋ฉฐ, ๋ฐ˜๋ณต๋˜๋Š” ๋กœ์ง์€ ์ปค์Šคํ…€ ํ›…์œผ๋กœ ์ถ”์ถœ(DRY)ํ•˜์—ฌ ๋‹จ์ˆœํ•˜๊ฒŒ ์œ ์ง€(KISS)ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค [23, 25, 27, 28]. * **์ƒํƒœ ๊ด€๋ฆฌ์™€ ์„ฑ๋Šฅ ์ตœ์ ํ™”:** ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ์•„ํ‚คํ…์ฒ˜์—์„œ๋Š” ์ƒํƒœ๋ฅผ ์ง€์—ญ ์ƒํƒœ, ์ „์—ญ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ƒํƒœ, ์„œ๋ฒ„ ์บ์‹œ ์ƒํƒœ ๋“ฑ์œผ๋กœ ์—„๊ฒฉํžˆ ๊ตฌ๋ถ„ํ•ฉ๋‹ˆ๋‹ค [29, 30]. ์ž์ฃผ ๋ณ€๊ฒฝ๋˜๋Š” ์ƒํƒœ๋ฅผ ๊ธฐ๋ณธ Context API๋กœ ๊ด€๋ฆฌํ•˜๋ฉด ๋ถˆํ•„์š”ํ•œ ๋ฆฌ๋ Œ๋”๋ง ํญํ’(Re-render storm)์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, ์ƒํƒœ ์Šฌ๋ผ์ด์Šค๋ฅผ ์„ ํƒ(Selector)ํ•  ์ˆ˜ ์žˆ๋Š” Zustand๋‚˜ ๋Œ€๊ทœ๋ชจ ํŒ€์— ์ ํ•ฉํ•œ Redux ๊ฐ™์€ ์ „๋ฌธ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์„ฑ๋Šฅ์— ์œ ๋ฆฌํ•ฉ๋‹ˆ๋‹ค [31-34]. ๋”๋ถˆ์–ด Vite์˜ `manualChunks`๋‚˜ `React.lazy`๋ฅผ ์ด์šฉํ•œ ์ฝ”๋“œ ์Šคํ”Œ๋ฆฌํŒ…์„ ํ†ตํ•ด ์ดˆ๊ธฐ ๋ฒˆ๋“ค ํฌ๊ธฐ๋ฅผ ์ค„์ด๋Š” ๊ฒƒ๋„ ํ•ต์‹ฌ ์ „๋žต์ž…๋‹ˆ๋‹ค [35-38]. * **๋ช…๋ช… ๊ทœ์น™ ๋ฐ ๊ฑฐ๋ฒ„๋„Œ์Šค(Governance):** ํ™•์žฅ๋˜๋Š” ํŒ€ ๋‚ด ํ˜ผ๋ž€์„ ๋ง‰๊ธฐ ์œ„ํ•ด ์—„๊ฒฉํ•œ ํด๋” ๋ฐ ํŒŒ์ผ ๋ช…๋ช… ๊ทœ์น™์ด ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. ๋ฆฌ์•กํŠธ ์ปดํฌ๋„ŒํŠธ๋Š” PascalCase, ์ผ๋ฐ˜ ํŒŒ์ผ/ํด๋”๋Š” OS ํ˜ธํ™˜์„ฑ์„ ์œ„ํ•ด kebab-case, ํ›…๊ณผ ์œ ํ‹ธ๋ฆฌํ‹ฐ ํ•จ์ˆ˜๋Š” camelCase๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค [39-44]. ๋˜ํ•œ ESLint, Prettier, Husky ๊ฐ™์€ ๋„๊ตฌ๋ฅผ ํ†ตํ•ด ์•„ํ‚คํ…์ฒ˜ ๊ทœ์น™๊ณผ ํฌ๋งทํŒ…์„ CI/CD ํŒŒ์ดํ”„๋ผ์ธ์—์„œ ์ž๋™ ๊ฐ•์ œ(Governance)ํ•ฉ๋‹ˆ๋‹ค [45, 46]. ## ๐Ÿ”— Knowledge Connections - **Related Topics:** [[Feature-Sliced Design]], [[Clean Code and SOLID Principles]], [[Frontend Folder Structure]], [[React State Management]], [[Frontend Performance Optimization]] - **Projects/Contexts:** [[Bulletproof React]] (์ƒ์‚ฐ ํ™˜๊ฒฝ์— ์ ํ•ฉํ•œ ๋‹จ์ˆœํ•˜๊ณ  ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ๋ฆฌ์•กํŠธ ์•„ํ‚คํ…์ฒ˜ ๋ฒ ์ŠคํŠธ ํ”„๋ž™ํ‹ฐ์Šค๋ฅผ ๋ชจ์•„๋‘” ์˜คํ”ˆ์†Œ์Šค ๋ ˆํผ๋Ÿฐ์Šค [10]) - **Contradictions/Notes:** - ๊ธฐ๋Šฅ ๊ธฐ๋ฐ˜ ๊ตฌ์กฐ(Feature-Based Structure)๊ฐ€ ํ™•์žฅ์„ฑ ์ธก๋ฉด์—์„œ ๋งค์šฐ ๊ถŒ์žฅ๋˜์ง€๋งŒ, ๋งค์šฐ ์ž‘์€ ์†Œ๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ๋‚˜ ์ดˆ๋ณด์ž์—๊ฒŒ๋Š” ์˜ค๋ฒ„์—”์ง€๋‹ˆ์–ด๋ง(Overkill)์ผ ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ดˆ๊ธฐ์—๋Š” ํ”Œ๋žซ(Flat) ๊ตฌ์กฐ๊ฐ€ ์ ํ•ฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [15, 47]. - Context API๋Š” ์ถ”๊ฐ€ ์˜์กด์„ฑ ์—†์ด ์ƒํƒœ๋ฅผ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ์–ด ์œ ์šฉํ•˜์ง€๋งŒ, ์ž์ฃผ ๋ณ€๊ฒฝ๋˜๋Š” ๋ฐ์ดํ„ฐ์— ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ ์„ฑ๋Šฅ์ด ์‹ฌ๊ฐํ•˜๊ฒŒ ์ €ํ•˜๋˜๋ฏ€๋กœ Zustand๋‚˜ Redux๋กœ ๋Œ€์ฒดํ•ด์•ผ ํ•œ๋‹ค๋Š” ๋ช…ํ™•ํ•œ ์ œ์•ฝ ์‚ฌํ•ญ์ด ์—ฌ๋Ÿฌ ์†Œ์Šค์—์„œ ๊ฐ•์กฐ๋ฉ๋‹ˆ๋‹ค [31, 33, 34, 48]. --- *Last updated: 2026-04-26*