# [[Frontend Folder Structure]] ## ๐Ÿ“Œ Brief Summary ํ”„๋ก ํŠธ์—”๋“œ ํด๋” ๊ตฌ์กฐ(Frontend Folder Structure)๋Š” ๋ฆฌ์•กํŠธ(React)๋ฅผ ๋น„๋กฏํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์œ ์ง€๋ณด์ˆ˜์„ฑ, ํ™•์žฅ์„ฑ, ํ˜‘์—… ํšจ์œจ์„ฑ์„ ๊ฒฐ์ •์ง“๋Š” ํ•ต์‹ฌ ์•„ํ‚คํ…์ฒ˜ ์š”์†Œ์ž…๋‹ˆ๋‹ค [1-3]. ๊ณผ๊ฑฐ์˜ ํŒŒ์ผ ์œ ํ˜•(File-Type) ์ค‘์‹ฌ์˜ ๊ตฌ์กฐ์—์„œ ๋ฒ—์–ด๋‚˜ ๋น„์ฆˆ๋‹ˆ์Šค ๊ธฐ๋Šฅ(Feature) ๋ฐ ๋„๋ฉ”์ธ์„ ์ค‘์‹ฌ์œผ๋กœ ๋ชจ๋“ˆํ™”ํ•˜๋Š” ๋ฐฉ์‹์ด ๊ถŒ์žฅ๋ฉ๋‹ˆ๋‹ค [4, 5]. ์ด๋ฅผ ํ†ตํ•ด ์ฝ”๋“œ ๊ฒฐํ•ฉ๋„๋ฅผ ๋‚ฎ์ถ”๊ณ  ์‘์ง‘๋„๋ฅผ ๋†’์—ฌ ๋ณต์žกํ•œ ์‹œ์Šคํ…œ์—์„œ๋„ ์˜ˆ์ธก ๊ฐ€๋Šฅ์„ฑ์„ ์œ ์ง€ํ•˜๊ณ  ๊ธฐ์ˆ  ๋ถ€์ฑ„๋ฅผ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [5-7]. ## ๐Ÿ“– Core Content - **ํด๋” ๊ตฌ์กฐ์˜ ์ค‘์š”์„ฑ**: ์ฒด๊ณ„์ ์ด์ง€ ์•Š์€ ๊ตฌ์กฐ๋Š” ์ฝ”๋“œ๋ฅผ ์–ฝํžˆ๊ฒŒ ๋งŒ๋“ค๊ณ  ๋””๋ฒ„๊น…๊ณผ ํ…Œ์ŠคํŠธ๋ฅผ ์–ด๋ ต๊ฒŒ ํ•˜์—ฌ ๊ฒฐ๊ณผ์ ์œผ๋กœ ๊ธฐ์ˆ  ๋ถ€์ฑ„๋ฅผ ์œ ๋ฐœํ•ฉ๋‹ˆ๋‹ค [1, 8, 9]. ๋ฐ˜๋ฉด ์ž˜ ์„ค๊ณ„๋œ ํ”„๋กœ์ ํŠธ๋Š” UI ์š”์†Œ, ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง, ์ƒํƒœ ๊ด€๋ฆฌ๋ฅผ ๋ช…ํ™•ํ•˜๊ฒŒ ๋ถ„๋ฆฌ(Separation of Concerns)ํ•˜์—ฌ ๋ชจ๋“ˆ์˜ ์žฌ์‚ฌ์šฉ์„ฑ๊ณผ ํ˜‘์—… ํšจ์œจ์„ฑ์„ ํฌ๊ฒŒ ๋†’์—ฌ์ค๋‹ˆ๋‹ค [3, 9]. - **๊ธฐ์กด ํด๋” ๊ตฌ์กฐ ์ ‘๊ทผ๋ฒ•๊ณผ ํ•œ๊ณ„**: - **๋‹จ์ผ(Flat) ๊ตฌ์กฐ**: ์†Œ๊ทœ๋ชจ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ ํ•ฉํ•˜๊ฒŒ ๋ชจ๋“  ํŒŒ์ผ์„ ๋ฃจํŠธ ๋ ˆ๋ฒจ ๊ทผ์ฒ˜์— ๋ฐฐ์น˜ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ, ํ”„๋กœ์ ํŠธ๊ฐ€ ์ปค์ง€๋ฉด ๊ด€๋ฆฌ์™€ ํ™•์žฅ์ด ๋ถˆ๊ฐ€๋Šฅ์— ๊ฐ€๊น์Šต๋‹ˆ๋‹ค [10]. - **ํŒŒ์ผ ์œ ํ˜• ๊ธฐ๋ฐ˜(File-Type Based)**: `components`, `hooks`, `services` ๋“ฑ ๊ธฐ์ˆ ์  ์—ญํ• ์— ๋”ฐ๋ผ ํด๋”๋ฅผ ๋‚˜๋ˆ„๋Š” ์ „ํ†ต์  ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค(์˜ˆ: MVC ํŒจํ„ด). ๊ธฐ๋Šฅ์ด ๋ณต์žกํ•ด์งˆ์ˆ˜๋ก ํ•˜๋‚˜์˜ ๊ธฐ๋Šฅ์„ ์ˆ˜์ •ํ•˜๊ธฐ ์œ„ํ•ด ์—ฌ๋Ÿฌ ํด๋”๋ฅผ ๋„˜๋‚˜๋“ค์–ด์•ผ ํ•˜๋ฏ€๋กœ ํ™•์žฅ์„ฑ์ด ํ˜„์ €ํžˆ ๋–จ์–ด์ง‘๋‹ˆ๋‹ค [4, 11, 12]. - **๊ธฐ๋Šฅ ๊ธฐ๋ฐ˜ ๊ตฌ์กฐ(Feature-Based Structure)**: 2025๋…„ ๊ธฐ์ค€ ๋ชจ๋˜ ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์—์„œ๋Š” ๋น„์ฆˆ๋‹ˆ์Šค ๊ธฐ๋Šฅ์„ ์ค‘์‹ฌ์œผ๋กœ ํด๋”๋ฅผ ๋ถ„๋ฆฌํ•˜๋Š” ๋ฐฉ์‹์ด ๊ถŒ์žฅ๋ฉ๋‹ˆ๋‹ค [5]. ์˜ˆ๋ฅผ ๋“ค์–ด `src/features/auth` ํด๋” ๋‚ด๋ถ€์— ์ธ์ฆ๊ณผ ๊ด€๋ จ๋œ ์ปดํฌ๋„ŒํŠธ, ํ›…(Hooks), API ํ†ต์‹  ๋กœ์ง, ํƒ€์ž…์„ ๋ชจ๋‘ ์บก์Аํ™”ํ•˜์—ฌ ๋…๋ฆฝ์ ์ธ ๋ชจ๋“ˆ๋กœ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค [13, 14]. - **๊ถŒ์žฅ๋˜๋Š” ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์„ฑ** [5, 14-23]: - `/assets`: ์ด๋ฏธ์ง€, ํฐํŠธ ๋“ฑ ์ •์  ๋ฏธ๋””์–ด ๋ฆฌ์†Œ์Šค. - `/components`: ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ „์ฒด์—์„œ ๊ณต์œ ๋˜๋Š” ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ UI ์ปดํฌ๋„ŒํŠธ (๋ฒ„ํŠผ, ๋ชจ๋‹ฌ ๋“ฑ). - `/features`: ํ•ต์‹ฌ ๊ธฐ๋Šฅ ๋ฐ ๋„๋ฉ”์ธ ๋กœ์ง์ด ์‘์ง‘๋œ ๋…๋ฆฝ ๋ชจ๋“ˆ. - `/hooks` ๋ฐ `/utils`: ์ „์—ญ์ ์œผ๋กœ ๊ณต์œ ๋˜๋Š” ์ปค์Šคํ…€ ํ›…๊ณผ ๋ฒ”์šฉ ์œ ํ‹ธ๋ฆฌํ‹ฐ ํ•จ์ˆ˜. - `/services` (๋˜๋Š” `/api`): ์™ธ๋ถ€ ์„œ๋ฒ„์™€์˜ ํ†ต์‹  ๋ฐ ์„œ๋“œํŒŒํ‹ฐ ์„œ๋น„์Šค ์—ฐ๋™ ๋กœ์ง. - `/store` (๋˜๋Š” `/context`): Redux, Zustand ๋“ฑ์„ ํ™œ์šฉํ•œ ์ „์—ญ ์ƒํƒœ ๊ด€๋ฆฌ ์ธํ”„๋ผ. - `/pages` ๋ฐ `/layouts`: ๋ผ์šฐํŒ…์— ๋งคํ•‘๋˜๋Š” ํŽ˜์ด์ง€ ํ™”๋ฉด ๋ฐ ๊ณตํ†ต ๋ ˆ์ด์•„์›ƒ ์ปดํฌ๋„ŒํŠธ. - **FSD (Feature-Sliced Design) ๋ฐฉ๋ฒ•๋ก **: ๊ธฐ๋Šฅ ๊ธฐ๋ฐ˜ ์„ค๊ณ„๋ฅผ ํ•œ ๋‹จ๊ณ„ ๋” ์ฒด๊ณ„ํ™”ํ•œ ์•„ํ‚คํ…์ฒ˜๋กœ, ํ”„๋ก ํŠธ์—”๋“œ ํ”„๋กœ์ ํŠธ๋ฅผ `app`, `pages`, `widgets`, `features`, `entities`, `shared`๋ผ๋Š” 6๊ฐ€์ง€ ๊ณ„์ธต(Layer)์œผ๋กœ ๋‚˜๋ˆ•๋‹ˆ๋‹ค [24-26]. - ์ƒ์œ„ ๊ณ„์ธต์ด ํ•˜์œ„ ๊ณ„์ธต์—๋งŒ ์˜์กดํ•ด์•ผ ํ•˜๋Š” '๋‹จ๋ฐฉํ–ฅ ์˜์กด์„ฑ' ๊ทœ์น™์„ ๊ฐ•์ œํ•˜์—ฌ ์ˆœํ™˜ ์ฐธ์กฐ๋ฅผ ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค [24]. - ๊ฐ ์Šฌ๋ผ์ด์Šค(Slice)๋Š” ๋ฐ˜๋“œ์‹œ `index.ts`๋ฅผ ํ†ตํ•ด ์ •์˜๋œ ํผ๋ธ”๋ฆญ API(Public API)๋งŒ ์™ธ๋ถ€์— ๋…ธ์ถœํ•˜์—ฌ ๋‚ด๋ถ€ ๊ตฌํ˜„์„ ์ฒ ์ €ํžˆ ์บก์Аํ™”ํ•˜๊ณ  ์•ˆ์ „ํ•œ ๋ฆฌํŒฉํ† ๋ง์„ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค [24, 27, 28]. - **๋„ค์ด๋ฐ ์ปจ๋ฒค์…˜๊ณผ ๊ฑฐ๋ฒ„๋„Œ์Šค(Naming & Governance)**: ๊ตฌ์กฐํ™”์™€ ๋”๋ถˆ์–ด ์ผ๊ด€๋œ ๋„ค์ด๋ฐ ๊ทœ์น™์€ ํ•„์ˆ˜์ž…๋‹ˆ๋‹ค. ํŒŒ์ผ ๋ฐ ํด๋” ์ด๋ฆ„์—๋Š” ์šด์˜์ฒด์ œ ๊ฐ„ ํ˜ธํ™˜์„ฑ์„ ์œ„ํ•ด `kebab-case`๋ฅผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฆฌ์•กํŠธ ์ปดํฌ๋„ŒํŠธ์— ๋งž์ถฐ `PascalCase`๋ฅผ ์ฃผ๋กœ ์‚ฌ์šฉํ•˜๋ฉฐ, ๋ณ€์ˆ˜๋‚˜ ํ•จ์ˆ˜, ํ›…์€ `camelCase`๋ฅผ ์ค€์ˆ˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค [29-34]. ๋˜ํ•œ ESLint์™€ ๊ฐ™์€ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•ด ์ด๋Ÿฌํ•œ ์•„ํ‚คํ…์ฒ˜ ๋ฐ ๋„ค์ด๋ฐ ๊ทœ์น™ ์œ„๋ฐ˜์„ ์ž๋™ ๊ฒ€์‚ฌ(Linting)ํ•˜๋„๋ก ์„ค์ •ํ•˜๋Š” ๊ฒƒ์ด ๋ชจ๋ฒ” ์‚ฌ๋ก€์ž…๋‹ˆ๋‹ค [30]. ## ๐Ÿ”— Knowledge Connections - **Related Topics:** [[Feature-Sliced Design (FSD)]], [[Clean Code Principles]], [[State Management]] - **Projects/Contexts:** [[Scalable React Applications]], [[Next.js File Naming and Routing]] - **Contradictions/Notes:** ์ปดํฌ๋„ŒํŠธ, ํ›…, ์„œ๋น„์Šค ๋“ฑ์˜ ํŒŒ์ผ ์œ ํ˜•์— ๋”ฐ๋ผ ๊ทธ๋ฃนํ™”ํ•˜๋Š” ๋ฐฉ์‹(File-Type Based)์€ ์ง๊ด€์ ์ด๋ผ ์ดˆ๊ธฐ ๊ฐœ๋ฐœ์ด๋‚˜ ์ดˆ๋ณด์ž๊ฐ€ ์ ‘๊ทผํ•˜๊ธฐ๋Š” ์‰ฝ์ง€๋งŒ, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ทœ๋ชจ๊ฐ€ ํ™•์žฅ๋˜๊ณ  ๋„๋ฉ”์ธ ๋กœ์ง์ด ๋ณต์žกํ•ด์งˆ ๊ฒฝ์šฐ์—๋Š” ๊ธฐ๋Šฅ(Feature) ๊ธฐ๋ฐ˜ ๊ตฌ์กฐ์— ๋น„ํ•ด ์œ ์ง€๋ณด์ˆ˜์„ฑ๊ณผ ์ƒ์‚ฐ์„ฑ์ด ํฌ๊ฒŒ ๋–จ์–ด์ง€๋ฉฐ ์ŠคํŒŒ๊ฒŒํ‹ฐ ์ฝ”๋“œ๋ฅผ ์œ ๋ฐœํ•˜๋Š” ์›์ธ์ด ๋ฉ๋‹ˆ๋‹ค [7, 11, 12]. --- *Last updated: 2026-04-26*