# [[Frontend Scalable Architecture]] ## ๐Ÿ“Œ Brief Summary ํ”„๋ก ํŠธ์—”๋“œ ํ™•์žฅ ๊ฐ€๋Šฅ ์•„ํ‚คํ…์ฒ˜(Frontend Scalable Architecture)๋Š” ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง๊ณผ UI ์ปดํฌ๋„ŒํŠธ์˜ ๊ฒฐํ•ฉ์„ ๋ฐฉ์ง€ํ•˜๊ณ  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์„ฑ์žฅ์„ ์•ˆ์ „ํ•˜๊ฒŒ ๋„๋ชจํ•˜๋Š” ๊ตฌ์กฐ์  ๋ฐฉ๋ฒ•๋ก ์ด๋‹ค [1]. ๋‹จ์ˆœํ•œ ๋ Œ๋”๋ง ์†๋„ ์ตœ์ ํ™”๋ฅผ ๋„˜์–ด ์ƒํƒœ ์†Œ์œ ๊ถŒ ๋ช…ํ™•ํ™”, ๋ช…์‹œ์  ์˜์กด์„ฑ ๊ด€๋ฆฌ, ๊ธฐ๋Šฅ(Feature) ์ค‘์‹ฌ์˜ ๋ชจ๋“ˆํ™”๋ฅผ ํ†ตํ•ด ์˜ˆ์ธก ๊ฐ€๋Šฅํ•œ ์ฝ”๋“œ๋ฒ ์ด์Šค์˜ ํ™•์žฅ์„ ๋ชฉํ‘œ๋กœ ํ•œ๋‹ค [1, 2]. ํ˜„๋Œ€์ ์ธ ์•„ํ‚คํ…์ฒ˜๋Š” Feature-Sliced Design(FSD)๊ณผ ๊ฐ™์€ ๊ณ„์ธต์  ๋ชจ๋ธ์„ ๋„์ž…ํ•˜์—ฌ ํŒ€ ๊ฐ„ ํ˜‘์—… ํšจ์œจ์„ ๋†’์ด๊ณ  ์žฅ๊ธฐ์ ์ธ ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ๊ทน๋Œ€ํ™”ํ•œ๋‹ค [3]. ## ๐Ÿ“– Core Content - **๊ธฐ๋Šฅ(Feature) ๊ธฐ๋ฐ˜ ์กฐ์ง๊ณผ FSD (Feature-Sliced Design):** ๊ณผ๊ฑฐ์˜ ๊ธฐ์ˆ  ํŒŒ์ผ ํƒ€์ž…(์ปดํฌ๋„ŒํŠธ, ํ›…, ์Šคํƒ€์ผ ๋“ฑ) ๊ธฐ์ค€ ํด๋” ๊ตฌ์กฐ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์ปค์งˆ์ˆ˜๋ก ํƒ์ƒ‰๊ณผ ์œ ์ง€๋ณด์ˆ˜๋ฅผ ์–ด๋ ต๊ฒŒ ๋งŒ๋“ ๋‹ค [4, 5]. 2025๋…„ ๊ธฐ์ค€ ํ‘œ์ค€์€ ๋น„์ฆˆ๋‹ˆ์Šค ๊ธฐ๋Šฅ(๋„๋ฉ”์ธ)์„ ์ค‘์‹ฌ์œผ๋กœ ์ฝ”๋“œ๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๊ฒƒ์ด๋‹ค [6]. ํŠนํžˆ FSD๋Š” ์•ฑ์„ 7๊ฐœ์˜ ๊ณ„์ธต(`shared`, `entities`, `features`, `widgets`, `pages`, `app`)์œผ๋กœ ๋‚˜๋ˆ„์–ด ์ƒ์œ„ ๊ณ„์ธต์ด ํ•˜์œ„ ๊ณ„์ธต์—๋งŒ ์˜์กดํ•˜๊ฒŒ ํ•˜๋Š” **๋‹จ๋ฐฉํ–ฅ ์˜์กด์„ฑ**์„ ๊ฐ•์ œํ•œ๋‹ค [7]. ๋˜ํ•œ `index.ts`๋ฅผ ์œ ์ผํ•œ ์ง„์ž…์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” Public API ๊ทœ์น™์„ ํ†ตํ•ด ๋‚ด๋ถ€ ๋กœ์ง์„ ์บก์Аํ™”ํ•œ๋‹ค [8, 9]. - **SOLID ๋ฐ ํด๋ฆฐ ์ฝ”๋“œ ์›์น™์˜ ์ ์šฉ:** React ์ปดํฌ๋„ŒํŠธ ๊ฐœ๋ฐœ ์‹œ ๋‹จ์ผ ์ฑ…์ž„ ์›์น™(SRP)์„ ์ ์šฉํ•˜์—ฌ ์—ญํ• ์ด ๋งŽ์€ ๋Œ€ํ˜• ์ปดํฌ๋„ŒํŠธ(์˜ˆ: 300์ค„ ์ด์ƒ)๋ฅผ ์ž‘๊ณ  ์ง‘์ค‘๋œ ํ˜•ํƒœ์˜ ์ปดํฌ๋„ŒํŠธ๋กœ ๋ถ„๋ฆฌํ•œ๋‹ค [10]. ๊ฐœ๋ฐฉ-ํ์‡„ ์›์น™(OCP)์€ `children`์ด๋‚˜ `render props`๋ฅผ ํ†ตํ•œ ํ•ฉ์„ฑ์œผ๋กœ ๊ตฌํ˜„ํ•˜๋ฉฐ, ์ธํ„ฐํŽ˜์ด์Šค ๋ถ„๋ฆฌ ์›์น™(ISP)์„ ํ†ตํ•ด ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฑฐ๋Œ€ํ•œ Props ๊ฐ์ฒด ์ „๋‹ฌ์„ ๋ฐฉ์ง€ํ•˜์—ฌ ๊ฒฐํ•ฉ๋„๋ฅผ ๋‚ฎ์ถ˜๋‹ค [11]. ๋˜ํ•œ DRY(์ค‘๋ณต ๋ฐฉ์ง€) ์›์น™๊ณผ KISS(๋‹จ์ˆœ์„ฑ ์œ ์ง€) ์›์น™ ๊ฐ„์˜ ๊ท ํ˜•์„ ์žก์•„ ๊ณผ๋„ํ•œ ์ถ”์ƒํ™”๋ฅผ ๋ฐฉ์ง€ํ•œ๋‹ค [12]. - **ํŒŒํŽธํ™” ๋ฐ ์ „๋ฌธํ™”๋œ ์ƒํƒœ ๊ด€๋ฆฌ:** ๊ฑฐ๋Œ€ํ•œ ๋‹จ์ผ ์Šคํ† ์–ด ๋ฐฉ์‹์—์„œ ๋ฒ—์–ด๋‚˜ ์ƒํƒœ ํŠน์„ฑ์— ๋งž๋Š” ๋„๊ตฌ๋ฅผ ๋ถ„๋ฆฌํ•˜์—ฌ ์„ ํƒํ•œ๋‹ค. ๋กœ์ปฌ ์ƒํƒœ๋Š” `useState`๋ฅผ, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ „์—ญ ์ƒํƒœ๋Š” ๋ Œ๋”๋ง ์ตœ์ ํ™”๋ฅผ ์œ„ํ•ด Context API ๋Œ€์‹  `Zustand`๋‚˜ `Jotai`๋ฅผ ํ™œ์šฉํ•˜๋ฉฐ, ์„œ๋ฒ„ ์ƒํƒœ(์บ์‹œ, ๋„คํŠธ์›Œํฌ ๋™๊ธฐํ™”)๋Š” `TanStack Query`๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ API ๋„คํŠธ์›Œํฌ ๊ณ„์ธต๊ณผ UI๋ฅผ ๋ถ„๋ฆฌํ•œ๋‹ค [13-16]. - **๋นŒ๋“œ ํƒ€์ž„ ์„ฑ๋Šฅ ๋ฐ ๋ฒˆ๋“ค๋ง ์ตœ์ ํ™”:** Vite๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐœ๋ฐœ ์ค‘์—๋Š” ๋„ค์ดํ‹ฐ๋ธŒ ES ๋ชจ๋“ˆ์„ ์ œ๊ณตํ•ด ์ฆ‰๊ฐ์ ์ธ ๋ฐ˜์˜์„ ์–ป๊ณ , ํ”„๋กœ๋•์…˜์—์„œ๋Š” Rollup์„ ํ†ตํ•œ `manualChunks` ์„ค์ •๊ณผ `React.lazy`๋ฅผ ํ™œ์šฉํ•ด ๊ฒฝ๋กœ(Route) ์ˆ˜์ค€์˜ ์ฝ”๋“œ ์Šคํ”Œ๋ฆฌํŒ…์„ ์ ์šฉํ•œ๋‹ค [17-20]. ํŠนํžˆ 2025๋…„์— ์•ˆ์ •ํ™”๋œ React Compiler๋Š” ๋ถˆํ•„์š”ํ•œ ๋ฆฌ๋ Œ๋”๋ง ๋ฐฉ์ง€๋ฅผ ์œ„ํ•œ ๋ฉ”๋ชจ์ด์ œ์ด์…˜์„ ๋นŒ๋“œ ํƒ€์ž„์— ์ž๋™์œผ๋กœ ์ฒ˜๋ฆฌํ•ด์ฃผ์–ด ์ˆ˜๋™ ์ตœ์ ํ™”(`useMemo`, `useCallback`)๋กœ ์ธํ•œ ์ฝ”๋“œ ๋ณต์žก๋„๋ฅผ ํš๊ธฐ์ ์œผ๋กœ ์ค„์—ฌ์ค€๋‹ค [18, 21, 22]. - **์•ˆ์ •์„ฑ ๋ฐ ์˜ค๋ฅ˜ ๋ณต๊ตฌ ์ธํ”„๋ผ:** ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ผ๋ถ€๊ฐ€ ์‹คํŒจํ•˜๋”๋ผ๋„ ์ „์ฒด๊ฐ€ ๋ฉˆ์ถ”์ง€ ์•Š๋„๋ก React Error Boundaries๋ฅผ ๋ถˆ์•ˆ์ •ํ•œ UI ์„น์…˜์— ์ „๋žต์ ์œผ๋กœ ๋ฐฐ์น˜ํ•œ๋‹ค [23, 24]. ํ”„๋กœ๋•์…˜ ๋‹จ๊ณ„์—์„œ๋Š” Sentry, LogRocket ๊ฐ™์€ ๋„๊ตฌ๋ฅผ ๊ฒฐํ•ฉํ•˜์—ฌ ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜, ๋ถ„๋ฆฌ๋œ DOM ๋…ธ๋“œ ํŒŒ์•…, ์„ธ์…˜ ๋ฆฌํ”Œ๋ ˆ์ด๋ฅผ ํ†ตํ•œ ์—๋Ÿฌ ๋ชจ๋‹ˆํ„ฐ๋ง ์ฒด๊ณ„๋ฅผ ๊ตฌ์ถ•ํ•œ๋‹ค [25-27]. ## โš–๏ธ Trade-offs & Caveats - **์ƒํƒœ ๊ด€๋ฆฌ ๋„๊ตฌ์˜ ์„ ํƒ (Context vs Zustand vs Redux):** Context API๋Š” ๊ธฐ๋ณธ ๋‚ด์žฅ ๋„๊ตฌ๋ผ๋Š” ์žฅ์ ์ด ์žˆ์œผ๋‚˜, ์ƒํƒœ ๊ฐ’์˜ ์ผ๋ถ€๋งŒ ๋ณ€๊ฒฝ๋˜์–ด๋„ ํ•ด๋‹น ์ปจํ…์ŠคํŠธ๋ฅผ ๊ตฌ๋…ํ•˜๋Š” ๋ชจ๋“  ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ฆฌ๋ Œ๋”๋ง๋˜๋Š” ์น˜๋ช…์ ์ธ ์„ฑ๋Šฅ ์ €ํ•˜๋ฅผ ์œ ๋ฐœํ•œ๋‹ค [28, 29]. ๋ฐ˜๋ฉด Zustand๋Š” ์„ ํƒ์ž(Selector) ํŒจํ„ด์œผ๋กœ ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ณ  ๊ตฌ์กฐ๊ฐ€ ๊ฐ€๋ณ์ง€๋งŒ, ๋„ˆ๋ฌด ์œ ์—ฐํ•˜์—ฌ ํŒ€ ๋‚ด ๊ทœ์น™์ด ๋ถ€์žฌํ•  ๊ฒฝ์šฐ ์ „์—ญ ์ƒํƒœ์™€ ๋น„๋™๊ธฐ ๋กœ์ง์ด ์ค‘๊ตฌ๋‚œ๋ฐฉ์ด ๋˜๋Š” ๋ถ€์ž‘์šฉ(Store Soup)์„ ๋‚ณ์„ ์ˆ˜ ์žˆ๋‹ค [30-32]. Redux๋Š” ์—„๊ฒฉํ•œ ํŒจํ„ด์„ ์ œ๊ณตํ•˜์—ฌ ๋Œ€๊ทœ๋ชจ ํŒ€์— ์•ˆ์ •์ ์ด๋‚˜, ๊ณผ๋„ํ•œ ๋ณด์ผ๋Ÿฌํ”Œ๋ ˆ์ดํŠธ๋กœ ์ดˆ๊ธฐ ๊ฐœ๋ฐœ๊ณผ MVP ๊ตฌํ˜„ ์†๋„๋ฅผ ํฌ๊ฒŒ ๋Šฆ์ถ˜๋‹ค [33, 34]. - **์„ฑ๋Šฅ ์ตœ์ ํ™”์˜ ํ•จ์ •:** `React.memo`๋‚˜ `useCallback`์„ ๋ฌด๋ถ„๋ณ„ํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๋ฉด ๋ฉ”๋ชจ์ด์ œ์ด์…˜์„ ํŒ๋‹จํ•˜๋Š” ์–•์€ ๋น„๊ต ์ฒ˜๋ฆฌ์— ๋น„์šฉ์ด ๋” ๋ฐœ์ƒํ•ด ์˜คํžˆ๋ ค ์„ฑ๋Šฅ์„ ์•…ํ™”์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค [35, 36]. - **FSD ์•„ํ‚คํ…์ฒ˜์˜ ์˜ค๋ฒ„ํ—ค๋“œ:** Feature-Sliced Design์€ ๋ช…ํ™•ํ•œ ์บก์Аํ™”์™€ ๋ถ„๋ฆฌ ๊ตฌ์กฐ๋ฅผ ์ œ๊ณตํ•˜์ง€๋งŒ, ํŠน์ • ๋ชจ๋“ˆ์ด 'feature'์ธ์ง€ 'widget'์ธ์ง€ ๊ฒฝ๊ณ„๋ฅผ ๊ตฌ๋ถ„ํ•˜๊ธฐ ๋ชจํ˜ธํ•œ ์ƒํ™ฉ ๋“ฑ ์‹œ๋งจํ‹ฑ ๊ฒฐ์ •์„ ์œ„ํ•œ ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉฐ, ์ƒˆ๋กœ์šด ํŒ€์›์—๊ฒŒ๋Š” ๊ฐ€ํŒŒ๋ฅธ ํ•™์Šต ๊ณก์„ ์œผ๋กœ ์ž‘์šฉํ•œ๋‹ค [37, 38]. - **๋งˆ์ดํฌ๋กœ ํ”„๋ก ํŠธ์—”๋“œ(Micro-Frontends):** ์กฐ์ง์ ์ธ ํ™•์žฅ์„ฑ์„ ํ•ด๊ฒฐํ•˜๊ณ  ๋…๋ฆฝ์ ์ธ ๋ฐฐํฌ๋ฅผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜์ง€๋งŒ, ๋Ÿฐํƒ€์ž„ ํ†ตํ•ฉ์˜ ๋ณต์žก์„ฑ, ์„ฑ๋Šฅ ์˜ค๋ฒ„ํ—ค๋“œ ์ฆ๊ฐ€, ํŒŒํŽธํ™”๋œ ๊ฐœ๋ฐœ์ž ๊ฒฝํ—˜์„ ์ดˆ๋ž˜ํ•˜๋ฏ€๋กœ ๊ธฐ๋ณธ ์•„ํ‚คํ…์ฒ˜๋ผ๊ธฐ๋ณด๋‹ค๋Š” ์ตœํ›„์˜ ์ˆ˜๋‹จ์œผ๋กœ ๊ฐ„์ฃผํ•ด์•ผ ํ•œ๋‹ค [3]. ## ๐Ÿ”— Knowledge Connections ### Related Concepts #### [์•„ํ‚คํ…์ฒ˜ ๋ฐ ๋ฐฉ๋ฒ•๋ก ] - [[Feature-Sliced Design]] - ์—ฐ๊ฒฐ ์ด์œ : ๋Œ€๊ทœ๋ชจ ํ”„๋ก ํŠธ์—”๋“œ ์•ฑ์˜ ๊ตฌ์กฐ๋ฅผ ๊ธฐ์ˆ  ๊ณ„์ธต์ด ์•„๋‹Œ ๋น„์ฆˆ๋‹ˆ์Šค ๋„๋ฉ”์ธ(๊ธฐ๋Šฅ) ์ค‘์‹ฌ์œผ๋กœ ๋‚˜๋ˆ„๊ณ , ์—„๊ฒฉํ•œ ๊ณ„์ธต ๊ตฌ์กฐ๋ฅผ ์ œ๊ณตํ•˜๋Š” ํ•ต์‹ฌ ์•„ํ‚คํ…์ฒ˜์ด๊ธฐ ๋•Œ๋ฌธ [3, 7]. - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ํด๋” ๊ตฌ์กฐํ™”, ์บก์Аํ™”๋ฅผ ์œ„ํ•œ Public API ์ œ์–ด ์ „๋žต, ๋‹จ๋ฐฉํ–ฅ ์˜์กด์„ฑ์„ ํ†ตํ•œ ๊ฒฐํ•ฉ๋„ ๊ฐ์†Œ ์›๋ฆฌ [7, 8]. - [[SOLID Principles in React]] - ์—ฐ๊ฒฐ ์ด์œ : ํ™•์žฅ์„ฑ ์žˆ๋Š” ์ปดํฌ๋„ŒํŠธ์™€ ํ›… ์„ค๊ณ„๋ฅผ ์œ„ํ•œ ๊ทผ๋ณธ์ ์ธ ์†Œํ”„ํŠธ์›จ์–ด ์—”์ง€๋‹ˆ์–ด๋ง ๊ฐ€์ด๋“œ๋ผ์ธ์ด๊ธฐ ๋•Œ๋ฌธ [9]. - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: SRP(๋‹จ์ผ ์ฑ…์ž„ ์›์น™)์™€ ISP(์ธํ„ฐํŽ˜์ด์Šค ๋ถ„๋ฆฌ ์›์น™)๋ฅผ ํ™œ์šฉํ•ด ๊ฒฐํ•ฉ๋„๋Š” ๋‚ฎ์ถ”๊ณ  ์‘์ง‘๋„๋Š” ๋†’์€ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ถ„๋ฆฌํ•ด๋‚ด๋Š” ์‹ค๋ฌด์  ๊ธฐ๋ฒ• [10, 11]. #### [์ƒํƒœ ๊ด€๋ฆฌ ๋ฐ ์„ฑ๋Šฅ ์ตœ์ ํ™” ๋„๊ตฌ] - [[Zustand]] - ์—ฐ๊ฒฐ ์ด์œ : Context API์˜ '๋ฆฌ๋ Œ๋”๋ง ํญํฌ' ํ•œ๊ณ„๋ฅผ ๊ทน๋ณตํ•˜๊ณ  Redux์˜ ๋ณต์žก์„ฑ์„ ํ”ผํ•˜๋ฉด์„œ ์ „์—ญ ์ƒํƒœ๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ์Šค์ผ€์ผ๋งํ•˜๋Š” ๋Œ€์•ˆ์ด๊ธฐ ๋•Œ๋ฌธ [29, 32]. - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: Selector ํŒจํ„ด์ด ์ปดํฌ๋„ŒํŠธ์˜ ํŠน์ • ์ƒํƒœ ๊ตฌ๋…์„ ์ œ์–ดํ•˜์—ฌ ์–ด๋–ป๊ฒŒ ๋ Œ๋”๋ง ์ตœ์ ํ™”๋ฅผ ๋‹ฌ์„ฑํ•˜๋Š”์ง€์— ๋Œ€ํ•œ ๋ฉ”์ปค๋‹ˆ์ฆ˜ [32]. - [[React Compiler]] - ์—ฐ๊ฒฐ ์ด์œ : 2025๋…„ ๊ธฐ์ค€ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ˆ˜๋™์œผ๋กœ ์ˆ˜ํ–‰ํ•˜๋˜ ๋ฉ”๋ชจ์ด์ œ์ด์…˜(`useMemo`, `useCallback` ๋“ฑ) ์ž‘์—…์„ ๋นŒ๋“œ ํƒ€์ž„์— ์ž๋™ํ™”ํ•˜์—ฌ ์ฝ”๋“œ ๋ณต์žก๋„๋ฅผ ํš๊ธฐ์ ์œผ๋กœ ๋‚ฎ์ถฐ์ฃผ๋Š” ๋„๊ตฌ์ด๊ธฐ ๋•Œ๋ฌธ [21, 22]. - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๊ฐœ๋ณ„ JSX ์š”์†Œ์˜ ์„ธ๋ฐ€ํ•œ ๋ฉ”๋ชจ์ด์ œ์ด์…˜ ์ž‘๋™ ๋ฐฉ์‹๊ณผ ์„œ๋“œํŒŒํ‹ฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ๋Œ€์‘ํ•˜๊ธฐ ์œ„ํ•œ ์ตœ์ ํ™” ์ œ์•ฝ ์กฐ๊ฑด [39, 40]. - [[React Error Boundaries]] - ์—ฐ๊ฒฐ ์ด์œ : ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ๋Œ€๊ทœ๋ชจ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ํŠน์ • ํ•˜์œ„ ๋ชจ๋“ˆ์ด๋‚˜ ์ปดํฌ๋„ŒํŠธ์˜ ๋Ÿฐํƒ€์ž„ ์˜ค๋ฅ˜๊ฐ€ ์ „์ฒด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ํฌ๋ž˜์‹œ๋กœ ์ด์–ด์ง€๋Š” ๊ฒƒ์„ ๋ง‰๋Š” ํ•ต์‹ฌ ์•ˆ์ •ํ™” ์žฅ์น˜์ด๊ธฐ ๋•Œ๋ฌธ [23, 24]. - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ์—๋Ÿฌ์˜ ์„ ์–ธ์  ๊ฒฉ๋ฆฌ์™€ Fallback UI ์ œ๊ณต์„ ํ†ตํ•ด ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ์˜ UX์™€ ํšŒ๋ณต๋ ฅ์„ ๊ฐ•ํ™”ํ•˜๋Š” ๋ฐฉ์‹ [41, 42]. ### Deeper Research Questions - Feature-Sliced Design(FSD)์—์„œ Cross-cutting concern(๊ต์ฐจ ๊ด€์‹ฌ์‚ฌ)์„ ์™„๋ฒฝํžˆ ๊ฒฉ๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ํ˜„์‹ค์ ์œผ๋กœ ์–ด๋ ค์šด ์ด์œ ๋Š” ๋ฌด์—‡์ด๋ฉฐ, ์ด๋ฅผ ์ƒ์œ„ ๊ณ„์ธต์—์„œ ์–ด๋–ป๊ฒŒ ์ปดํฌ์ง€์…˜(Composition)์œผ๋กœ ํ•ด๊ฒฐํ•ด์•ผ ํ•˜๋Š”๊ฐ€? - React Compiler๊ฐ€ ๋นŒ๋“œ ํƒ€์ž„์— ๋ฉ”๋ชจ์ด์ œ์ด์…˜์„ ์ž๋™ํ™”ํ•จ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ , ์„œ๋“œํŒŒํ‹ฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(์˜ˆ: TanStack Query ๋“ฑ)๊ฐ€ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ถˆ์•ˆ์ •ํ•œ ์ฐธ์กฐ(Unstable References)๊ฐ€ ์žˆ์„ ๋•Œ ์™œ ์—ฌ์ „ํžˆ ์ˆ˜๋™ ๋ฉ”๋ชจ์ด์ œ์ด์…˜์ด ํ•„์š”ํ•œ๊ฐ€? - Context API๊ฐ€ ์œ ๋ฐœํ•˜๋Š” '๋ฆฌ๋ Œ๋”๋ง ํญํฌ ํ˜„์ƒ'์„ ์šฐํšŒํ•˜๊ธฐ ์œ„ํ•ด ์„ค๊ณ„๋œ Zustand์˜ Selector ํŒจํ„ด์€ ๋‚ด๋ถ€์ ์œผ๋กœ ์–ด๋–ป๊ฒŒ ํ•„์š”ํ•œ ์ƒํƒœ ๋ณ€ํ™”๋งŒ ๊ฐ์ง€ํ•˜๊ณ  ์ปดํฌ๋„ŒํŠธ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๋Š”๊ฐ€? - Vite ํ™˜๊ฒฝ์—์„œ `manualChunks`์™€ `React.lazy`๋ฅผ ๊ฒฐํ•ฉํ•˜์—ฌ ๊ฑฐ๋Œ€ํ•œ ๋ฒˆ๋“ค(Large Chunks)์„ ๋ถ„๋ฆฌํ•ด ๋‚ผ ๋•Œ, ์ด๋Ÿฌํ•œ ์ „๋žต์ด Core Web Vitals(ํŠนํžˆ LCP ๋ฐ INP)์— ๋ฏธ์น˜๋Š” ์‹ค์ œ ๋ธŒ๋ผ์šฐ์ € ๋™์ž‘ ๋ฉ”์ปค๋‹ˆ์ฆ˜์€ ์–ด๋– ํ•œ๊ฐ€? - ๋Œ€๊ทœ๋ชจ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๋งˆ์ดํฌ๋กœ ํ”„๋ก ํŠธ์—”๋“œ(Micro-Frontends) ๋„์ž… ์‹œ ๋ฐœ์ƒํ•˜๋Š” ๋Ÿฐํƒ€์ž„ ํ†ตํ•ฉ์˜ ์„ฑ๋Šฅ ์˜ค๋ฒ„ํ—ค๋“œ๋Š” FSD์™€ ๊ฐ™์€ ๋ชจ๋†€๋ฆฌ์‹ ๋ชจ๋“ˆํ˜• ์•„ํ‚คํ…์ฒ˜์™€ ๋น„๊ตํ•˜์—ฌ ์–ด๋– ํ•œ ํ•œ๊ณ„๋ฅผ ๊ฐ€์ง€๋Š”๊ฐ€? ### Practical Application Contexts - **Implementation:** ์ฝ”๋“œ๋ฅผ ๊ตฌํ˜„ํ•  ๋•Œ ๋น„์ฆˆ๋‹ˆ์Šค ๋„๋ฉ”์ธ ๋‹จ์œ„๋กœ ํด๋”๋ฅผ ์ƒ์„ฑ(Feature ํด๋”)ํ•˜๋ฉฐ, 300์ค„์ด ๋„˜์–ด๊ฐ€๋Š” ์ปดํฌ๋„ŒํŠธ๋Š” ๋‹จ์ผ ์ฑ…์ž„ ์›์น™(SRP)์— ๋”ฐ๋ผ ์ž‘์€ UI ์š”์†Œ์™€ ์ปค์Šคํ…€ ํ›…์œผ๋กœ ๋ถ„๋ฆฌํ•˜์—ฌ ์ž‘์„ฑํ•œ๋‹ค [6, 10, 43]. - **System Design:** ๋ชจ๋“ˆ ๊ฐ„ ๊ฒฐํ•ฉ๋„๋ฅผ ์ตœ์†Œํ™”ํ•˜๊ธฐ ์œ„ํ•ด ํ•˜์œ„ ๊ณ„์ธต(์˜ˆ: shared, entities)์—์„œ ์ƒ์œ„ ๊ณ„์ธต(์˜ˆ: features, pages)์„ ์ฐธ์กฐํ•˜์ง€ ๋ชปํ•˜๋„๋ก ESLint ๊ทœ์น™์œผ๋กœ ๋‹จ๋ฐฉํ–ฅ ์˜์กด์„ฑ์„ ๊ฐ•์ œํ•˜๊ณ , ๊ฐ ํด๋”์˜ ์ ‘๊ทผ ์ฐฝ๊ตฌ๋ฅผ `index.ts`๋กœ ์บก์Аํ™”(Public API ๊ทœ์น™)ํ•˜์—ฌ ์•„ํ‚คํ…์ฒ˜๋ฅผ ์„ค๊ณ„ํ•œ๋‹ค [7, 8, 44]. - **Operation / Maintenance:** ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ์—์„œ Sentry๋ฅผ ํ†ตํ•ด Error Boundary๊ฐ€ ์žก์ง€ ๋ชปํ•œ ์—๋Ÿฌ๋ฅผ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๊ณ , ํฌ๋กฌ DevTools์˜ ๋ฉ”๋ชจ๋ฆฌ ์Šค๋ƒ…์ƒท์ด๋‚˜ LogRocket๊ณผ ๊ฐ™์€ ๋””๋ฒ„๊น… ํˆด๋กœ ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ ๋ฏธํ•ด์ œ์— ๋”ฐ๋ฅธ Detached DOM ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜๋ฅผ ์ง€์†์ ์œผ๋กœ ์ถ”์  ๋ฐ ์œ ์ง€๋ณด์ˆ˜ํ•œ๋‹ค [25-27]. - **Learning Path:** React ์ฝ”์–ด ์›๋ฆฌ์™€ ์ƒํƒœ ๊ด€๋ฆฌ์˜ ํ•œ๊ณ„(Context API ๋ณ‘๋ชฉ ํ˜„์ƒ) ์ธ์ง€ โ†’ ํ™•์žฅ์„ฑ์„ ๊ณ ๋ คํ•œ ์•„ํ‚คํ…์ฒ˜ ์›์น™(FSD, SOLID) ํ•™์Šต โ†’ ๋„๋ฉ”์ธ ๋ถ„๋ฆฌ ๋„๊ตฌ ์ ์šฉ(Zustand, TanStack Query) โ†’ ์„ฑ๋Šฅ ๋ฐ ๋ฒˆ๋“ค๋ง ์ตœ์ ํ™”(React Compiler, Vite ์ฝ”๋“œ ์Šคํ”Œ๋ฆฌํŒ…) ์ˆœ์„œ๋กœ ํ•™์Šต ๋กœ๋“œ๋งต์„ ๊ตฌ์„ฑํ•œ๋‹ค [45]. - **My Project Relevance:** ์†Œ์Šค์— ๊ด€๋ จ ์ •๋ณด๊ฐ€ ๋ถ€์กฑํ•ฉ๋‹ˆ๋‹ค. ### Adjacent Topics - [[Core Web Vitals]] - ํ™•์žฅ ๋ฐฉํ–ฅ: ํ”„๋ก ํŠธ์—”๋“œ ์•„ํ‚คํ…์ฒ˜์—์„œ์˜ ์ฝ”๋“œ ์Šคํ”Œ๋ฆฌํŒ…๊ณผ ๋ฆฌ์†Œ์Šค ์ง€์—ฐ ๋กœ๋”ฉ ์ตœ์ ํ™” ๊ธฐ๋ฒ•์ด ์‹ค์ œ ์‚ฌ์šฉ์ž ์ฒด๊ฐ ์†๋„(LCP, INP, CLS ๋“ฑ)์— ๋ฏธ์น˜๋Š” ์˜ํ–ฅ์„ ์ธก์ •ํ•˜๊ณ  ๋ฐ์ดํ„ฐ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๋Š” ์ „๋žต์œผ๋กœ ํ™•์žฅ [17, 46]. - [[Git Branching Workflow]] - ํ™•์žฅ ๋ฐฉํ–ฅ: ์—„๊ฒฉํ•˜๊ฒŒ ๊ตฌ์กฐํ™”๋œ ๋Œ€ํ˜• ์ฝ”๋“œ๋ฒ ์ด์Šค๋ฅผ ์—ฌ๋Ÿฌ ํŒ€์›๊ณผ ํ•จ๊ป˜ ์ถฉ๋Œ ์—†์ด ๊ฐœ๋ฐœํ•˜๊ธฐ ์œ„ํ•œ ๊นƒ ๋ธŒ๋žœ์นญ ์ „๋žต(GitHub Flow ์ ์šฉ ์—ฌ๋ถ€), Conventional Commits ์ž‘์„ฑ๋ฒ• ๋ฐ CI/CD ํ’ˆ์งˆ ๊ฒ€์ฆ ํŒŒ์ดํ”„๋ผ์ธ์œผ๋กœ ํ™•์žฅ [47, 48]. --- *Last updated: 2026-04-30*