# [[Frontend App Development Architecture]] ## ๐Ÿ“Œ Brief Summary ํ”„๋ก ํŠธ์—”๋“œ ์•ฑ ๊ฐœ๋ฐœ ์•„ํ‚คํ…์ฒ˜๋Š” ํ™•์žฅ์„ฑ, ์œ ์ง€๋ณด์ˆ˜์„ฑ, ์„ฑ๋Šฅ์„ ๊ณ ๋ คํ•˜์—ฌ ํ”„๋ก ํŠธ์—”๋“œ ์‹œ์Šคํ…œ์„ ์„ค๊ณ„ํ•˜๊ณ  ๊ตฌ์„ฑํ•˜๋Š” ๊ธฐ๋ฐ˜ ํ”„๋ ˆ์ž„์›Œํฌ์ž…๋‹ˆ๋‹ค [1, 2]. ๊ณผ๊ฑฐ์˜ ๋‹จ์ˆœํ•œ ๊ธฐ์ˆ ์  ํŒŒ์ผ ๊ธฐ๋ฐ˜ ๋ถ„๋ฆฌ์—์„œ ๋ฒ—์–ด๋‚˜, ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง๊ณผ ๊ธฐ๋Šฅ(Feature)์„ ์ค‘์‹ฌ์œผ๋กœ ๋ชจ๋“ˆํ™”ํ•˜๊ณ  ๊ฒฐํ•ฉ๋„๋ฅผ ๋‚ฎ์ถ”๋Š” ๋ฐฉํ–ฅ์œผ๋กœ ์•„ํ‚คํ…์ฒ˜ ํŒจ๋Ÿฌ๋‹ค์ž„์ด ์ „ํ™˜๋˜์—ˆ์Šต๋‹ˆ๋‹ค [3, 4]. ์ผ๊ด€๋œ ํด๋” ๊ตฌ์กฐ, ์ƒํƒœ ๊ด€๋ฆฌ ํŒจ๋Ÿฌ๋‹ค์ž„, ํด๋ฆฐ ์ฝ”๋“œ ์›์น™์„ ์ ์šฉํ•จ์œผ๋กœ์จ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋ณต์žกํ•ด์ง€๋”๋ผ๋„ ์•ˆ์ •์ ์œผ๋กœ ํ™•์žฅํ•  ์ˆ˜ ์žˆ๋„๋ก ๋•์Šต๋‹ˆ๋‹ค [5, 6]. ## ๐Ÿ“– Core Content * **๋ชจ๋“ˆํ™”์™€ ํด๋” ๊ตฌ์กฐ (Folder Structure):** ๊ณผ๊ฑฐ์—๋Š” ์ปดํฌ๋„ŒํŠธ, ํ›…, ์Šคํƒ€์ผ ๋“ฑ ํŒŒ์ผ ์œ ํ˜•(Type)๋ณ„๋กœ ์ฝ”๋“œ๋ฅผ ๋‚˜๋ˆ„๋Š” ๋ฐฉ์‹์„ ์‚ฌ์šฉํ–ˆ์œผ๋‚˜, ์ด๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์ปค์งˆ์ˆ˜๋ก ํ™•์žฅ์„ฑ์ด ๋–จ์–ด์ง‘๋‹ˆ๋‹ค [3, 7]. ํ˜„๋Œ€ ํ”„๋ก ํŠธ์—”๋“œ ์•„ํ‚คํ…์ฒ˜๋Š” ๋„๋ฉ”์ธ์ด๋‚˜ ๊ธฐ๋Šฅ๋ณ„๋กœ ์ฝ”๋“œ๋ฅผ ์บก์Аํ™”ํ•˜๋Š” ๊ธฐ๋Šฅ ๊ธฐ๋ฐ˜(Feature-based) ๊ตฌ์กฐ๋ฅผ ์ฑ„ํƒํ•ฉ๋‹ˆ๋‹ค [4, 8, 9]. ํŠนํžˆ **Feature-Sliced Design (FSD)**์€ ํ”„๋ก ํŠธ์—”๋“œ ์•„ํ‚คํ…์ฒ˜์— ํŠนํ™”๋œ ๋ฐฉ๋ฒ•๋ก ์œผ๋กœ, ์ฝ”๋“œ๋ฅผ ๋ ˆ์ด์–ด(app, pages, widgets, features, entities, shared)๋กœ ๋‚˜๋ˆ„๊ณ  ์ƒ์œ„ ๋ ˆ์ด์–ด์—์„œ ํ•˜์œ„ ๋ ˆ์ด์–ด๋กœ๋งŒ ์˜์กด์„ฑ์„ ๊ฐ€์ง€๋„๋ก ๊ฐ•์ œํ•˜์—ฌ ์ˆœํ™˜ ์ฐธ์กฐ๋ฅผ ๋ฐฉ์ง€ํ•˜๊ณ  ์•„ํ‚คํ…์ฒ˜ ๊ทœ์œจ์„ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค [10-13]. * **์†Œํ”„ํŠธ์›จ์–ด ๊ณตํ•™ ์›์น™ (SOLID & Clean Code):** React ์ปดํฌ๋„ŒํŠธ์—๋„ ๊ฐ์ฒด์ง€ํ–ฅ ์„ค๊ณ„์˜ SOLID ์›์น™์ด ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ปดํฌ๋„ŒํŠธ๋Š” ๋‹จ์ผ ์ฑ…์ž„(SRP)์„ ๊ฐ€์ ธ์•ผ ํ•˜๋ฉฐ 300์ค„ ์ด์ƒ ๊ธธ์–ด์ง€๋ฉด ๋ถ„๋ฆฌ๋ฅผ ๊ณ ๋ คํ•ด์•ผ ํ•˜๊ณ , Composition์„ ํ†ตํ•ด ํ™•์žฅ์—๋Š” ์—ด๋ ค ์žˆ๊ณ  ์ˆ˜์ •์—๋Š” ๋‹ซํ˜€ ์žˆ๋„๋ก(OCP) ์„ค๊ณ„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค [14-16]. ๋˜ํ•œ DRY(๋ฐ˜๋ณตํ•˜์ง€ ๋งˆ๋ผ), KISS(๋‹จ์ˆœํ•˜๊ฒŒ ์œ ์ง€ํ•˜๋ผ), YAGNI(ํ•„์š”ํ•  ๋•Œ๋งŒ ๊ตฌํ˜„ํ•˜๋ผ) ์›์น™์„ ํ†ตํ•ด ๊ณผ๋„ํ•œ ์ถ”์ƒํ™”๋ฅผ ํ”ผํ•˜๊ณ , ํ˜„์žฌ ์š”๊ตฌ์‚ฌํ•ญ์— ์ง‘์ค‘ํ•ด ์˜ˆ์ธก ๊ฐ€๋Šฅํ•˜๊ณ  ๋””๋ฒ„๊น…ํ•˜๊ธฐ ์‰ฌ์šด ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค [17-19]. * **์ƒํƒœ ๊ด€๋ฆฌ์˜ ํŒŒํŽธํ™” (State Management):** ๋ชจ๋“  ์ƒํƒœ๋ฅผ ๊ฑฐ๋Œ€ํ•œ ๋‹จ์ผ ์Šคํ† ์–ด(์˜ˆ: Redux)์— ๋„ฃ๋Š” ๋ฐฉ์‹์—์„œ ๋ฒ—์–ด๋‚˜, ๋ชฉ์ ์— ๋งž๋Š” ๋„๊ตฌ๋กœ ๋ถ„๋ฆฌํ•˜๋Š” ๊ฒƒ์ด 2025๋…„์˜ ํŠธ๋ Œ๋“œ์ž…๋‹ˆ๋‹ค [20]. API์—์„œ ๊ฐ€์ ธ์˜จ '์„œ๋ฒ„ ์ƒํƒœ'๋Š” ์บ์‹ฑ๊ณผ ๋™๊ธฐํ™”๋ฅผ ์ง€์›ํ•˜๋Š” TanStack Query(React Query)๋กœ ๊ด€๋ฆฌํ•˜๋ฉฐ, '์ „์—ญ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ƒํƒœ'๋Š” ๋ฆฌ๋ Œ๋”๋ง ์ตœ์ ํ™”๊ฐ€ ๋›ฐ์–ด๋‚œ Zustand ๊ฐ™์€ ๊ฐ€๋ฒผ์šด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค [20-22]. * **๋ช…๋ช… ๊ทœ์น™๊ณผ ๊ฑฐ๋ฒ„๋„Œ์Šค (Naming Conventions & Governance):** ๋Œ€์†Œ๋ฌธ์ž ๊ตฌ๋ถ„์ด ์—†๋Š” OS(Windows, macOS) ํ™˜๊ฒฝ์—์„œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” CI/CD ๋นŒ๋“œ ์˜ค๋ฅ˜๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ํŒŒ์ผ๊ณผ ํด๋” ์ด๋ฆ„์€ `kebab-case`๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค [23, 24]. ๋ฐ˜๋ฉด React ์ปดํฌ๋„ŒํŠธ๋Š” `PascalCase`๋ฅผ, ์ผ๋ฐ˜ ๋ณ€์ˆ˜์™€ ์ปค์Šคํ…€ ํ›…์€ `camelCase`๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์—…๊ณ„ ํ‘œ์ค€์ž…๋‹ˆ๋‹ค [23, 25-27]. ์ž๋™ํ™”๋œ ๊ฑฐ๋ฒ„๋„Œ์Šค๋ฅผ ์œ„ํ•ด ESLint, Prettier, Husky๋ฅผ ๋„์ž…ํ•˜์—ฌ ์ปค๋ฐ‹ ์ „์— ๋ฆฐํŒ…๊ณผ ํฌ๋งคํŒ…์„ ๊ฐ•์ œํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค [25]. * **์„ฑ๋Šฅ ์ตœ์ ํ™” ๋ฐ ์•ˆ์ •์„ฑ (Performance & Reliability):** Vite์™€ ๊ฐ™์€ ํ˜„๋Œ€์ ์ธ ๋ฒˆ๋“ค๋Ÿฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„œ๋“œํŒŒํ‹ฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋ถ„๋ฆฌ(manualChunks)ํ•˜๊ณ , `React.lazy`์™€ ๋™์  ์ž„ํฌํŠธ๋ฅผ ํ†ตํ•œ ์ฝ”๋“œ ์Šคํ”Œ๋ฆฌํŒ…์„ ์ ์šฉํ•˜๋ฉด ์ดˆ๊ธฐ ๋ฒˆ๋“ค ํฌ๊ธฐ์™€ ๋กœ๋”ฉ ์‹œ๊ฐ„์„ ํš๊ธฐ์ ์œผ๋กœ ์ค„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [28-32]. ๋Ÿฐํƒ€์ž„ ์˜ค๋ฅ˜ ์‹œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ „์ฒด๊ฐ€ ๋ฉˆ์ถ”๋Š” ๋ฐฑํ™”ํ˜„์ƒ์„ ๋ง‰๊ธฐ ์œ„ํ•ด 'React Error Boundaries'๋ฅผ ๋„์ž…ํ•ด ์‹คํŒจ๋ฅผ ๊ตญ์†Œํ™”ํ•˜๊ณ  ๋Œ€์ฒด UI๋ฅผ ๋ Œ๋”๋งํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค [33-35]. ์ตœ๊ทผ ์•ˆ์ •ํ™”๋œ React Compiler๋Š” `useMemo`๋‚˜ `useCallback`๊ณผ ๊ฐ™์€ ์ˆ˜๋™ ๋ฉ”๋ชจ์ด์ œ์ด์…˜์„ ์ž๋™ํ™”ํ•ด ์ฃผ์–ด ํด๋ฆฐ ์ฝ”๋“œ๋ฅผ ์œ ์ง€ํ•˜๋ฉด์„œ ๋ถˆํ•„์š”ํ•œ ๋ Œ๋”๋ง์„ ๋ฐฉ์ง€ํ•ด ์ค๋‹ˆ๋‹ค [36-39]. ## ๐Ÿ”— Knowledge Connections - **Related Topics:** [[Feature-Sliced Design]], [[SOLID Principles]], [[State Management]], [[React Error Boundaries]], [[React Compiler]] - **Projects/Contexts:** [[React Project Structure]], [[Performance Optimization]], [[Frontend Refactoring]] - **Contradictions/Notes:** Context API๋Š” ๋ณ„๋„์˜ ์™ธ๋ถ€ ์ข…์†์„ฑ ์—†์ด ์ƒํƒœ๋ฅผ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๋Š” React ๋‚ด์žฅ ๋„๊ตฌ์ด์ง€๋งŒ, ํ•˜๋‚˜์˜ ๊ฐ’์ด ๋ณ€๊ฒฝ๋  ๋•Œ ๊ตฌ๋… ์ค‘์ธ ๋ชจ๋“  ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ฆฌ๋ Œ๋”๋งํ•˜๋Š” ๋ฌธ์ œ(Re-render storm)๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค [40, 41]. ๋”ฐ๋ผ์„œ ์žฆ์€ ์—…๋ฐ์ดํŠธ๊ฐ€ ํ•„์š”ํ•œ ์ƒํƒœ์—๋Š” ๋ถ€์ ํ•ฉํ•˜๋ฉฐ, ์ด ๊ฒฝ์šฐ Zustand ๋“ฑ์˜ ํˆด์ด ๊ถŒ์žฅ๋ฉ๋‹ˆ๋‹ค [22, 42]. ๋˜ํ•œ DRY(๋ฐ˜๋ณต ์ง€์–‘) ์›์น™์€ ์œ ์šฉํ•˜์ง€๋งŒ, ์ฝ”๋“œ๋ฅผ ๋„ˆ๋ฌด ๊ณผ๋„ํ•˜๊ฒŒ ์ถ”์ƒํ™”ํ•˜๋ฉด ์ง๊ด€์„ฑ์„ ํ•ด์ณ ์˜คํžˆ๋ ค KISS(๋‹จ์ˆœ์„ฑ ์œ ์ง€) ์›์น™์— ์œ„๋ฐฐ๋  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, ๋™์ผ ํŒจํ„ด์ด ์„ธ ๋ฒˆ ์ด์ƒ ๋ฐ˜๋ณต๋  ๋•Œ๋งŒ ์ถ”์ƒํ™”ํ•˜๋Š” ๊ฒƒ์ด ์ด์ƒ์ ์ž…๋‹ˆ๋‹ค [17, 18, 43]. Atomic Design ๋ชจ๋ธ์€ UI ์ปดํฌ๋„ŒํŠธ์˜ ์žฌ์‚ฌ์šฉ์„ฑ์„ ๋†’์ด๋Š” ๋ฐ์—๋Š” ํ›Œ๋ฅญํ•˜์ง€๋งŒ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง๊ณผ ์ƒํƒœ๋ฅผ ๊ตฌ์กฐํ™”ํ•˜๋Š” ๋ฐ๋Š” ๋ถ€์กฑํ•˜๋ฏ€๋กœ, ๋Œ€๊ทœ๋ชจ ์•ฑ์—์„œ๋Š” FSD ๋ฐฉ๋ฒ•๋ก ์ด ๋”์šฑ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค [44-46]. --- *Last updated: 2026-04-26*