# [[React Project Setup]] ## ๐Ÿ“Œ Brief Summary React Project Setup์€ ํ™•์žฅ ๊ฐ€๋Šฅํ•˜๊ณ  ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์šฉ์ดํ•œ ํ”„๋ก ํŠธ์—”๋“œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ตฌ์ถ•ํ•˜๊ธฐ ์œ„ํ•ด ํ”„๋กœ์ ํŠธ์˜ ํด๋” ๊ตฌ์กฐ, ํŒŒ์ผ ๋ช…๋ช… ๊ทœ์น™, ๊ทธ๋ฆฌ๊ณ  ๋นŒ๋“œ ๋„๊ตฌ๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ์ดˆ๊ธฐ ๋‹จ๊ณ„์ž…๋‹ˆ๋‹ค. 2025๋…„ ๊ธฐ์ค€์œผ๋กœ๋Š” ํŒŒ์ผ ์œ ํ˜• ์ค‘์‹ฌ์˜ ๋ถ„๋ฆฌ๋ณด๋‹ค๋Š” ๊ธฐ๋Šฅ(Feature) ์ค‘์‹ฌ์œผ๋กœ ์ฝ”๋“œ๋ฅผ ์กฐ์งํ•˜๋Š” ๊ฒƒ์ด ๊ถŒ์žฅ๋˜๋ฉฐ, ์ผ๊ด€๋œ ๋ช…๋ช… ๊ทœ์น™๊ณผ Vite ๊ฐ™์€ ์ตœ์‹  ๋นŒ๋“œ ๋„๊ตฌ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๊ฐœ๋ฐœ ํšจ์œจ์„ฑ์„ ๋†’์ž…๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๋Œ€๊ทœ๋ชจ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ๋„ ์ฝ”๋“œ์˜ ๊ฒฐํ•ฉ๋„๋ฅผ ๋‚ฎ์ถ”๊ณ  ์‘์ง‘๋„๋ฅผ ๋†’์—ฌ ํ”„๋กœ์ ํŠธ๊ฐ€ ๋ณต์žกํ•ด์ง€๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ## ๐Ÿ“– Core Content * **์ตœ์‹  ๋นŒ๋“œ ๋„๊ตฌ ๋ฐ ํ™˜๊ฒฝ ์„ค์ • (Vite ๋„์ž…):** * 2025๋…„ React ์ƒํƒœ๊ณ„์—์„œ๋Š” ๊ธฐ์กด์˜ Create React App(CRA)์„ ๋Œ€์‹ ํ•˜์—ฌ Vite๊ฐ€ ์ƒˆ๋กœ์šด ํ‘œ์ค€ ๋นŒ๋“œ ๋„๊ตฌ๋กœ ์ž๋ฆฌ ์žก์•˜์Šต๋‹ˆ๋‹ค [1]. * Vite๋Š” ๊ฐœ๋ฐœ ์ค‘์—๋Š” ์ฝ”๋“œ๋ฅผ ๋„ค์ดํ‹ฐ๋ธŒ ES ๋ชจ๋“ˆ ํ˜•ํƒœ๋กœ ๋ธŒ๋ผ์šฐ์ €์— ์ง์ ‘ ์ œ๊ณตํ•˜์—ฌ ๋น ๋ฅธ ์‹œ์ž‘ ๋ฐ ํ•ซ ๋ชจ๋“ˆ ๊ต์ฒด(HMR)๋ฅผ ์ง€์›ํ•˜๊ณ , ๋ฐฐํฌ ์‹œ์—๋Š” Rollup์„ ์‚ฌ์šฉํ•˜์—ฌ ์ตœ์ ํ™”๋œ ๋ฒˆ๋“ค์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค [2-5]. * ์„ค์ • ํŒŒ์ผ(`vite.config.js`)์—์„œ ๊ธฐ์กด Babel ๋Œ€์‹  Rust ๊ธฐ๋ฐ˜์˜ SWC ์ปดํŒŒ์ผ๋Ÿฌ ํ”Œ๋Ÿฌ๊ทธ์ธ(`@vitejs/plugin-react-swc`)์„ ์‚ฌ์šฉํ•˜์—ฌ ๋Œ€๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ์˜ ๋นŒ๋“œ ์†๋„๋ฅผ ํฌ๊ฒŒ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๊น”๋”ํ•œ ํŒŒ์ผ ์ž„ํฌํŠธ๋ฅผ ์œ„ํ•œ ๊ฒฝ๋กœ ๋ณ„์นญ(Path Aliases) ์„ค์ •๋„ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [6-8]. * **ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ํด๋” ๊ตฌ์กฐ ์„ค๊ณ„ (Folder Structure):** * ๊ณผ๊ฑฐ์ฒ˜๋Ÿผ ์ปดํฌ๋„ŒํŠธ, ํ›…, ์Šคํƒ€์ผ ๋“ฑ ํŒŒ์ผ ์œ ํ˜•๋ณ„๋กœ ๊ตฌ์กฐ๋ฅผ ๋‚˜๋ˆ„๋Š” ๋ฐฉ์‹(Flat Structure ๋ฐ File-Type Based Structure)์€ ํ”„๋กœ์ ํŠธ ๊ทœ๋ชจ๊ฐ€ ์ปค์งˆ์ˆ˜๋ก ํ™•์žฅ์— ๋ถˆ๋ฆฌํ•˜๋ฉฐ ์ฝ”๋“œ๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ ์–ด๋ ต๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค [9-11]. * **๊ธฐ๋Šฅ ๊ธฐ๋ฐ˜ ๊ตฌ์กฐ(Feature-Based Structure):** ๋น„์ฆˆ๋‹ˆ์Šค ๋„๋ฉ”์ธ์ด๋‚˜ ๊ธฐ๋Šฅ๋ณ„๋กœ ๊ด€๋ จ ์ปดํฌ๋„ŒํŠธ, ํ›…, ๋กœ์ง, ํƒ€์ž… ๋“ฑ์„ ํ•˜๋‚˜์˜ ๊ธฐ๋Šฅ ํด๋”(์˜ˆ: `src/features/auth`) ๋‚ด์— ์บก์Аํ™”ํ•˜๋Š” ๊ตฌ์กฐ๊ฐ€ ๋„๋ฆฌ ๊ถŒ์žฅ๋ฉ๋‹ˆ๋‹ค [11-14]. * **ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ๋ฐฉ์‹:** ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ฒ”์šฉ UI ์ปดํฌ๋„ŒํŠธ(`components/`), ์ „์—ญ ์ƒํƒœ ๊ด€๋ฆฌ(`store/` ๋˜๋Š” `context/`), ์™ธ๋ถ€ ํ†ต์‹  ๋กœ์ง(`services/`), ๊ณตํ†ต ์œ ํ‹ธ๋ฆฌํ‹ฐ(`utils/`) ๋“ฑ์€ ๊ธฐ๋Šฅ ํด๋” ์™ธ๋ถ€์— ๋ฐฐ์น˜ํ•˜๊ณ , ํŠน์ • ๊ธฐ๋Šฅ์— ์ข…์†๋œ ์ฝ”๋“œ๋Š” `features/` ์•„๋ž˜์— ๋‘๋Š” ๋ฐฉ์‹์ด ์‹ค๋ฌด์—์„œ ๊ฐ€์žฅ ๊ท ํ˜• ์žกํžŒ ๊ตฌ์กฐ๋กœ ํ‰๊ฐ€๋ฐ›์Šต๋‹ˆ๋‹ค [14-22]. * **Feature-Sliced Design (FSD):** ๋” ์—„๊ฒฉํ•œ ์•„ํ‚คํ…์ฒ˜๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ, ์‹œ์Šคํ…œ์„ ๊ณต์œ (shared), ์—”ํ‹ฐํ‹ฐ(entities), ๊ธฐ๋Šฅ(features), ์œ„์ ฏ(widgets), ํŽ˜์ด์ง€(pages), ์•ฑ(app) ๋“ฑ์˜ ๊ณ„์ธต์œผ๋กœ ๋‚˜๋ˆ„์–ด ์ƒ์œ„ ๊ณ„์ธต์ด ํ•˜์œ„ ๊ณ„์ธต์—๋งŒ ์˜์กดํ•˜๋„๋ก ๋‹จ๋ฐฉํ–ฅ ์˜์กด์„ฑ์„ ๊ฐ•์ œํ•ฉ๋‹ˆ๋‹ค [13, 23-25]. * **์ผ๊ด€๋œ ๋ช…๋ช… ๊ทœ์น™ (Naming Conventions):** * **ํŒŒ์ผ ๋ฐ ํด๋”๋ช…:** OS ํ™˜๊ฒฝ(Windows/macOS๋Š” ๋Œ€์†Œ๋ฌธ์ž ๊ตฌ๋ถ„ ์•ˆ ํ•จ, Linux๋Š” ๊ตฌ๋ถ„) ๊ฐ„์˜ ์ฐจ์ด๋กœ ์ธํ•œ CI/CD ๋นŒ๋“œ ์˜ค๋ฅ˜๋ฅผ ๋ง‰๊ธฐ ์œ„ํ•ด, ํŒŒ์ผ๊ณผ ํด๋” ์ด๋ฆ„์€ `kebab-case`๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์•ˆ์ „ํ•˜๊ณ  ๊ฐ€๋…์„ฑ์ด ๋†’์Šต๋‹ˆ๋‹ค (์˜ˆ: `user-profile.tsx`) [26-29]. * **์ปดํฌ๋„ŒํŠธ ๋ฐ ํƒ€์ž…/์ธํ„ฐํŽ˜์ด์Šค:** React ์ปดํฌ๋„ŒํŠธ ์ด๋ฆ„๊ณผ TypeScript ํƒ€์ž…์€ ์ผ๋ฐ˜ ํ•จ์ˆ˜๋‚˜ HTML ์š”์†Œ์™€ ๋ช…ํ™•ํžˆ ๊ตฌ๋ถ„๋˜๋„๋ก `PascalCase`๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค [26, 28-31]. * **ํ•จ์ˆ˜, ๋ณ€์ˆ˜, Props:** `camelCase`๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ํŠนํžˆ boolean ์ƒํƒœ ๋ณ€์ˆ˜๋Š” `is`, `has`, `should` ๋“ฑ์˜ ์ ‘๋‘์‚ฌ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ , ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ์—๋Š” `handle`์ด๋‚˜ `on`์„, ์ปค์Šคํ…€ ํ›…์—๋Š” `use` ์ ‘๋‘์‚ฌ๋ฅผ ๋ถ™์—ฌ ์˜๋„๋ฅผ ๋ช…ํ™•ํžˆ ํ•ฉ๋‹ˆ๋‹ค [26, 28, 30, 32]. * **์ƒ์ˆ˜(Constants):** ์ƒ์ˆ˜๋Š” `UPPER_SNAKE_CASE`๋กœ ์ž‘์„ฑํ•˜์—ฌ ์‹๋ณ„์„ฑ์„ ๋†’์ž…๋‹ˆ๋‹ค [26, 33]. ## ๐Ÿ”— Knowledge Connections - **Related Topics:** [[Frontend Folder Structure]], [[Feature-Sliced Design]], [[Clean Code Principles]], [[Vite Build Tool]] - **Projects/Contexts:** [[๋Œ€๊ทœ๋ชจ React ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์•„ํ‚คํ…์ฒ˜ ๊ตฌ์„ฑ]], [[2025 ํ”„๋ก ํŠธ์—”๋“œ ์—”์ง€๋‹ˆ์–ด๋ง ํ‘œ์ค€ ํ™•๋ฆฝ]], [[ํ”„๋ก ํŠธ์—”๋“œ ๋ฆฌํŒฉํ† ๋ง ๋ฐ ์ฝ”๋“œ ์œ ์ง€๋ณด์ˆ˜]] - **Contradictions/Notes:** ๋„๋ฉ”์ธ ๋ฐ ๊ธฐ๋Šฅ๋ณ„(Feature-Based) ํด๋” ๋ถ„๋ฆฌ๋Š” ๋Œ€๊ทœ๋ชจ ์•ฑ์˜ ํ™•์žฅ์— ๋งค์šฐ ์œ ๋ฆฌํ•˜์ง€๋งŒ, ๊ทœ๋ชจ๊ฐ€ ๋งค์šฐ ์ž‘์€ ์†Œํ˜• ํ”„๋กœ์ ํŠธ์˜ ๊ฒฝ์šฐ ๊ธฐ๋Šฅ ๊ธฐ๋ฐ˜์˜ ์ค‘์ฒฉ๋œ ํด๋” ๊ตฌ์กฐ๋ฅผ ๋„์ž…ํ•˜๋Š” ๊ฒƒ์ด ์˜คํžˆ๋ ค ๋ถˆํ•„์š”ํ•œ ์˜ค๋ฒ„ํ—ค๋“œ์™€ ๋ณต์žก์„ฑ์„ ์ดˆ๋ž˜ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์ด ์ง€์ ๋ฉ๋‹ˆ๋‹ค [34]. ๋˜ํ•œ, React ์ปดํฌ๋„ŒํŠธ ๋‚ด๋ถ€์˜ ํ•จ์ˆ˜๋ช…์€ `PascalCase`๋ฅผ ๊ฐ•์ œํ•˜์ง€๋งŒ ์ด๋ฅผ ๋‹ด๊ณ  ์žˆ๋Š” ๋ฌผ๋ฆฌ์  ํŒŒ์ผ๋ช…์€ `kebab-case`๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•˜๋ฏ€๋กœ ๋‘ ๊ทœ์น™ ์‚ฌ์ด์˜ ์ผ๊ด€๋œ ๋งคํ•‘ ๊ด€๋ฆฌ๊ฐ€ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค [28]. --- *Last updated: 2026-04-26*