| name | project-structure |
| description | Organize project folders following industry best practices. Use when setting up new projects, reorganizing codebases, or when folder structure becomes messy. Covers Next.js, Bulletproof React, and FSD patterns. |
| allowed-tools | Read, Glob, Grep, Edit, Write, Bash |
| license | MIT |
| metadata | {"author":"antigravity-team","version":"1.0"} |
Project Structure
ํ๋ก์ ํธ ํด๋ ๊ตฌ์กฐ๋ฅผ ์
๊ณ ํ์ค์ ๋ง๊ฒ ์ ๋ฆฌํ๋ ์คํฌ์
๋๋ค.
Core Principles
"๋ฐํํ๋ฉด์ ์ฝ๋๋ฅผ ๋์ง ์๋๋ค"
"๋ถ๋ฅ ๊ธฐ์ค์ ์์ง ์๋๋ค"
Safety Rules
| ๋ช
๋ น์ด | ์ํ | ๋์ |
|---|
rm -rf | ๐ด ๊ธ์ง | _legacy/๋ก ์ด๋ |
rm | ๐ด ๊ธ์ง | _legacy/๋ก ์ด๋ |
mv to _legacy/ | โ
ํ์ฉ | ๊ธฐ๋ณธ ์ ๋ฆฌ ๋ฐฉ์ |
mkdir | โ
ํ์ฉ | ์ ๊ตฌ์กฐ ์์ฑ |
์ ๋ฆฌ ๋ฐฉ์
rm -rf old-folder
mkdir -p _legacy
mv old-folder _legacy/old-folder_$(date +%Y%m%d)
Part 1: ๊ฐ๋ฐ ๋ฃจํธ ๋๋ ํ ๋ฆฌ
๊ถ์ฅ ๋ฃจํธ ์์น
~/dev
~/code
~/workspace
~/git
์ปจํ
์คํธ(๋ชฉ์ ) ์ค์ฌ ๊ตฌ์กฐ (์ถ์ฒ)
~/dev/
โโโ work/ # ํ์ฌ ์
๋ฌด
โ โโโ company-a/
โ โ โโโ backend-api/
โ โ โโโ frontend-ui/
โ โโโ company-b/
โโโ personal/ # ๊ฐ์ธ/์ฌ์ด๋ ํ๋ก์ ํธ
โ โโโ my-blog/
โ โโโ todo-app/
โโโ study/ # ๊ฐ์/์ฑ
์ค์ต
โ โโโ algorithm-101/
โ โโโ react-course/
โโโ open-source/ # Fork/๊ธฐ์ฌ ํ๋ก์ ํธ
โ โโโ some-lib/
โโโ playground/ # ์ผํ์ฑ ํ
์คํธ (์๋๋ฐ์ค)
โ โโโ test-script.py
โโโ dotfiles/ # ๊ฐ์ธ ์ค์ ํ์ผ ๋ฒ์ ๊ด๋ฆฌ
ํธ์คํธ(Source) ์ค์ฌ ๊ตฌ์กฐ (Go ์คํ์ผ)
~/dev/
โโโ github.com/
โ โโโ my-username/
โ โ โโโ project-a/
โ โโโ other-user/
โ โโโ awesome-lib/
โโโ gitlab.com/
โ โโโ company-group/
โ โโโ company-project/
โโโ bitbucket.org/
Part 2: ํ๋ก์ ํธ ๋ด๋ถ ๊ตฌ์กฐ
๊ธฐ๋ณธ ํ๋ก์ ํธ ์ค์บํด๋ฉ
project-name/
โโโ src/ # ์ค์ ์์ค ์ฝ๋
โโโ assets/ # ์ด๋ฏธ์ง, ํฐํธ, ์ ์ ํ์ผ
โโโ config/ # ์ค์ ํ์ผ
โโโ docs/ # ๋ฌธ์ํ ์๋ฃ
โโโ scripts/ # ๋น๋/๋ฐฐํฌ ์คํฌ๋ฆฝํธ
โโโ tests/ # ํ
์คํธ ์ฝ๋
โโโ dist/ # ๋น๋ ๊ฒฐ๊ณผ๋ฌผ (Git ์ ์ธ)
โโโ _legacy/ # ์ ๋ฆฌ๋ ๋ ๊ฑฐ์ ์ฝ๋
โโโ .gitignore
โโโ .env.example # ํ๊ฒฝ๋ณ์ ์์ (.env๋ Git ์ ์ธ)
โโโ README.md
โโโ LICENSE
Part 3: ํ๋ก ํธ์๋ ์ํคํ
์ฒ ํจํด
Pattern A: Next.js App Router + Colocation
๋ผ์ฐํธ(ํ์ด์ง) ๊ธฐ์ค์ผ๋ก ํด๋ ์์ฑ, ํ์ํ ํ์ผ์ ๊ฐ์ ํด๋์ ๋ฐฐ์น
app/
โโโ (marketing)/ # Route Group (URL์ ๋ฏธ๋ฐ์)
โ โโโ page.tsx
โ โโโ components/ # ์ด ๋ผ์ฐํธ ์ ์ฉ ์ปดํฌ๋ํธ
โ โ โโโ Hero.tsx
โ โโโ styles.css
โโโ dashboard/
โ โโโ layout.tsx
โ โโโ page.tsx
โ โโโ loading.tsx
โ โโโ error.tsx
โ โโโ components/
โ โโโ DashboardHeader.tsx
โ โโโ DashboardStats.tsx
โโโ api/
โ โโโ users/
โ โโโ route.ts
โโโ globals.css
lib/ # ๊ณต์ฉ ์ ํธ๋ฆฌํฐ
components/ # ์ ์ญ ๊ณต์ฉ ์ปดํฌ๋ํธ
์ ํฉํ ๊ฒฝ์ฐ: Next.js ๊ธฐ๋ฐ ํ๋ก์ ํธ
Pattern B: Bulletproof React (Feature-based)
๊ธฐ๋ฅ(Feature) ๋จ์๋ก ๋ฌถ์ด์ ์ ์ง๋ณด์ ์ฉ์ดํ ๊ตฌ์กฐ
src/
โโโ app/ # ์ฑ ์ด๊ธฐํ (๋ผ์ฐํฐ, ์ํธ๋ฆฌ, ์ ์ญ ์ค์ )
โ โโโ routes/
โ โโโ App.tsx
โ โโโ main.tsx
โโโ assets/
โโโ components/ # ์์ ๊ณต์ฉ UI
โ โโโ Button/
โ โโโ Modal/
โ โโโ Form/
โโโ config/
โโโ features/ # ๐ ํต์ฌ: ๊ธฐ๋ฅ ๋จ์
โ โโโ auth/
โ โ โโโ api/
โ โ โโโ components/
โ โ โโโ hooks/
โ โ โโโ types/
โ โ โโโ index.ts
โ โโโ users/
โ โ โโโ api/
โ โ โโโ components/
โ โ โโโ hooks/
โ โ โโโ index.ts
โ โโโ dashboard/
โโโ hooks/ # ์ ์ญ ํ
โโโ lib/ # ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ํผ
โโโ providers/
โโโ stores/
โโโ testing/
โโโ types/ # ์ ์ญ ํ์
โโโ utils/ # ์ ์ญ ์ ํธ๋ฆฌํฐ
์ ํฉํ ๊ฒฝ์ฐ: ํ ๊ท๋ชจ๊ฐ ํฌ๊ฑฐ๋ ๊ธฐ๋ฅ์ด ๋ง์ React ํ๋ก์ ํธ
Pattern C: Feature-Sliced Design (FSD)
๊ณ์ธต(Layer)์ผ๋ก ๋ถ๋ฅํ๋ ์ํคํ
์ฒ ๋ฐฉ๋ฒ๋ก
src/
โโโ app/ # Layer 1: ์ฑ ์ด๊ธฐํ
โ โโโ providers/
โ โโโ styles/
โ โโโ index.tsx
โโโ pages/ # Layer 2: ํ์ด์ง (๋ผ์ฐํธ)
โ โโโ home/
โ โโโ profile/
โ โโโ settings/
โโโ widgets/ # Layer 3: ๋
๋ฆฝ์ ์ธ UI ๋ธ๋ก
โ โโโ header/
โ โโโ sidebar/
โ โโโ footer/
โโโ features/ # Layer 4: ์ฌ์ฉ์ ์๋๋ฆฌ์ค
โ โโโ auth/
โ โโโ comments/
โ โโโ likes/
โโโ entities/ # Layer 5: ๋น์ฆ๋์ค ์ํฐํฐ
โ โโโ user/
โ โโโ post/
โ โโโ comment/
โโโ shared/ # Layer 6: ๊ณต์ ๋ฆฌ์์ค
โโโ ui/
โโโ lib/
โโโ api/
โโโ config/
์ ํฉํ ๊ฒฝ์ฐ: ๊ท์น์ ํ์ด ๊ฐ์ด ์งํฌ ์ ์๋ ์ค๋ํ ํ๋ก์ ํธ
Part 4: ํ์ด๋ธ๋ฆฌ๋ ํจํด (Next.js + Feature)
Next.js App Router๋ฅผ ๋ผ๋๋ก, features ๋ฐฉ์์ ์์ ์ค์ฉ์ ๊ตฌ์กฐ
app/ # Next.js App Router
โโโ (marketing)/
โโโ dashboard/
โโโ api/
src/
โโโ components/ # ์ ์ญ ๊ณต์ฉ ์ปดํฌ๋ํธ
โโโ features/ # Bulletproof ์คํ์ผ ๊ธฐ๋ฅ ๋จ์
โ โโโ auth/
โ โโโ users/
โ โโโ analytics/
โโโ hooks/
โโโ lib/
โโโ types/
โโโ utils/
Workflow: ํด๋ ์ ๋ฆฌ
1. ํ์ฌ ๊ตฌ์กฐ ๋ถ์
ls -la
find . -maxdepth 2 -type d | head -30
2. ๋ ๊ฑฐ์ ํด๋ ์์ฑ
mkdir -p _legacy
3. ์ ๋ฆฌ ๋์ ์ด๋
mv messy-folder _legacy/messy-folder_$(date +%Y%m%d)
4. ์ ๊ตฌ์กฐ ์์ฑ
mkdir -p src/{app,assets,components,config,features,hooks,lib,types,utils}
mkdir -p src/features/{auth,users}/{api,components,hooks,types}
5. ํ์ผ ์ด๋
mv src/components/LoginForm.tsx src/features/auth/components/
mv src/hooks/useAuth.ts src/features/auth/hooks/
Naming Conventions
| ๊ท์น | ์์ | ์ค๋ช
|
|---|
| kebab-case | my-project | ํด๋๋ช
(๊ณต๋ฐฑ ๊ธ์ง) |
| PascalCase | UserProfile.tsx | React ์ปดํฌ๋ํธ |
| camelCase | useAuth.ts | ํ
, ์ ํธ๋ฆฌํฐ |
| UPPER_CASE | API_URL | ์์ |
Anti-patterns
โ ์ธ์ด๋ณ ๋ถ๋ฅ
~/dev/python/
~/dev/javascript/
โ React + Django ํ๋ก์ ํธ๋ ์ด๋์?
โ ๋ฐํํ๋ฉด ์ฌ์ฉ
~/Desktop/์ ํด๋/test1/asdf/
โ ~/dev/playground/ ์ฌ์ฉ
โ ๊ณต๋ฐฑ ์๋ ํด๋๋ช
My Project/
โ my-project/
โ ํ์
๋ณ๋ก๋ง ๋ถ๋ฅ (๊ท๋ชจ๊ฐ ํด ๋)
src/
โโโ components/ # 100๊ฐ ์ปดํฌ๋ํธ
โโโ hooks/ # 50๊ฐ ํ
โโโ utils/ # 30๊ฐ ์ ํธ
โ features/ ๋จ์๋ก ๊ทธ๋ฃนํ
Quick Setup Scripts
macOS/Linux: ๊ฐ๋ฐ ๋ฃจํธ ์์ฑ
mkdir -p ~/dev/{work,personal,study,open-source,playground,dotfiles}
ํ๋ก์ ํธ ์ค์บํด๋ฉ
mkdir -p {src,assets,config,docs,scripts,tests,_legacy}
touch README.md .gitignore .env.example
Bulletproof React ๊ตฌ์กฐ
mkdir -p src/{app/routes,assets,components,config,features,hooks,lib,providers,stores,testing,types,utils}
References