πŸ“νš¨μœ¨μ μΈ κ°œλ°œμ„ μœ„ν•œ 디렉토리 섀계 κ°€μ΄λ“œ(FastAPI+Next.js)

이번 ν¬μŠ€νŒ…μ—μ„œλŠ” μ €μ˜ 둜컬 ν™˜κ²½ κΈ°μ€€μœΌλ‘œ κ΅¬μ„±ν•œ ν”„λ‘œμ νŠΈ ꡬ쑰λ₯Ό λ°”νƒ•μœΌλ‘œ 각 디렉토리와 파일의 역할을 μƒμ„Ένžˆ μ„€λͺ…ν•˜κ² μŠ΅λ‹ˆλ‹€. ν”„λ‘œμ νŠΈ 디렉토리 κ΅¬μ‘°μ—λŠ” μ •ν™•ν•œ 정닡은 μ—†μ§€λ§Œ μ˜¬λ°”λ₯Έ 섀계 원칙을 μ΄ν•΄ν•˜λ©΄ κ°œλ°œμ— 큰 도움이 λ©λ‹ˆλ‹€.


πŸ“‘ λͺ©μ°¨

  1. πŸ›  ν”„λ‘œμ νŠΈ 디렉토리 ꡬ쑰λ₯Ό λ‚˜λˆ„λŠ” 이유
  2. πŸ–₯ λ°±μ—”λ“œ 디렉토리 ꡬ쑰와 의미
  3. 🌐 ν”„λ‘ νŠΈμ—”λ“œ 디렉토리 ꡬ쑰와 의미
  4. 🐳 곡톡 μ„€μ • 파일과 Docker
  5. βœ… ν”„λ‘œμ νŠΈ ꡬ쑰의 μž₯점
  6. πŸ“Έ 전체 ν”„λ‘œμ νŠΈ ꡬ쑰 μ˜ˆμ‹œ
  7. πŸ“Œ μ°Έκ³ 

πŸ›  ν”„λ‘œμ νŠΈ 디렉토리 ꡬ쑰λ₯Ό λ‚˜λˆ„λŠ” 이유

λŒ€κ·œλͺ¨ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μΌμˆ˜λ‘ 디렉토리 ꡬ쑰λ₯Ό μ²΄κ³„μ μœΌλ‘œ λ‚˜λˆ„λŠ” 것이 ν•„μˆ˜μž…λ‹ˆλ‹€.
μ£Όμš” μ΄μœ λŠ” λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

  • μœ μ§€λ³΄μˆ˜ μš©μ΄μ„±: κΈ°λŠ₯λ³„λ‘œ 디렉토리λ₯Ό λ‚˜λˆ„λ©΄ μ½”λ“œκ°€ 어디에 μžˆλŠ”μ§€ λͺ…ν™•νžˆ μ•Œ 수 μžˆμ–΄ μˆ˜μ •μ΄ μ‰½μŠ΅λ‹ˆλ‹€.
  • ν˜‘μ—… νš¨μœ¨μ„±: λ°±μ—”λ“œ, ν”„λ‘ νŠΈμ—”λ“œ, ν…ŒμŠ€νŠΈ μ½”λ“œλ₯Ό λΆ„λ¦¬ν•˜λ©΄ μ—¬λŸ¬ κ°œλ°œμžκ°€ λ™μ‹œμ— μž‘μ—…ν•˜κΈ° νŽΈλ¦¬ν•©λ‹ˆλ‹€.
  • μž¬μ‚¬μš©μ„± ν–₯상: 곡톡 라이브러리, μ»΄ν¬λ„ŒνŠΈ, λͺ¨λΈ 등을 κ΅¬μ‘°ν™”ν•˜λ©΄ μž¬μ‚¬μš©μ΄ μš©μ΄ν•©λ‹ˆλ‹€.
  • CI/CD 연계 편리: Docker, Git, ν…ŒμŠ€νŠΈ μžλ™ν™” λ“±κ³Ό 연계할 λ•Œ κ΅¬μ‘°ν™”λœ ν”„λ‘œμ νŠΈκ°€ νŒŒμ΄ν”„λΌμΈ 섀정에 μœ λ¦¬ν•©λ‹ˆλ‹€.

즉, 디렉토리 κ΅¬μ‘°λŠ” λ‹¨μˆœνžˆ μ½”λ“œ 정리λ₯Ό μœ„ν•œ 것이 μ•„λ‹ˆλΌ 개발 생산성과 μœ μ§€λ³΄μˆ˜ νš¨μœ¨μ„±μ„ λ†’μ΄λŠ” 섀계 μ „λž΅μž…λ‹ˆλ‹€.


πŸ–₯ λ°±μ—”λ“œ 디렉토리 ꡬ쑰와 의미

λ°±μ—”λ“œ λ””λ ‰ν† λ¦¬λŠ” FastAPIλ₯Ό κΈ°μ€€μœΌλ‘œ λ‹€μŒκ³Ό 같이 κ΅¬μ„±λ©λ‹ˆλ‹€.

backend/
β”œβ”€β”€ models/
β”œβ”€β”€ routes/
β”œβ”€β”€ schemas/
β”œβ”€β”€ tests/
β”œβ”€β”€ db.py
β”œβ”€β”€ main.py
└── requirements.txt

πŸ“¦ models/

  • λ°μ΄ν„°λ² μ΄μŠ€ ν…Œμ΄λΈ” ꡬ쑰λ₯Ό μ •μ˜ν•˜λŠ” ORM λͺ¨λΈ νŒŒμΌλ“€μ„ λͺ¨μ•„λ‘” λ””λ ‰ν† λ¦¬μž…λ‹ˆλ‹€.
  • 예: μ‚¬μš©μž ν…Œμ΄λΈ”(User), μžμ‚° ν…Œμ΄λΈ”(Asset) λ“±
  • μž₯점: DB ꡬ쑰 λ³€κ²½ μ‹œ 이 λ””λ ‰ν† λ¦¬λ§Œ μˆ˜μ •ν•˜λ©΄ λ˜μ–΄ 관리가 νŽΈλ¦¬ν•©λ‹ˆλ‹€.

πŸ”— routes/

  • API μ—”λ“œν¬μΈνŠΈλ₯Ό μ •μ˜ν•˜λŠ” λΌμš°ν„° νŒŒμΌμ„ λͺ¨μ•„λ‘‘λ‹ˆλ‹€.
  • 각 κΈ°λŠ₯λ³„λ‘œ νŒŒμΌμ„ λ‚˜λˆ„μ–΄ REST APIλ₯Ό κ΅¬ν˜„ν•©λ‹ˆλ‹€.
  • 예: user.py, asset.py, auth.py
  • μž₯점: κΈ°λŠ₯별 API 관리가 μš©μ΄ν•˜κ³ , ν…ŒμŠ€νŠΈ 및 μœ μ§€λ³΄μˆ˜κ°€ μ‰½μŠ΅λ‹ˆλ‹€.

πŸ“ schemas/

  • Pydantic을 ν™œμš©ν•œ 데이터 검증 및 직렬화 μŠ€ν‚€λ§ˆλ₯Ό μ •μ˜ν•©λ‹ˆλ‹€.
  • 예: UserCreate, AssetRead λ“±
  • μž₯점: 데이터 검증을 μ€‘μ•™ν™”ν•˜μ—¬ μ½”λ“œ μ•ˆμ •μ„±μ„ ν™•λ³΄ν•©λ‹ˆλ‹€.

πŸ§ͺ tests/

  • λ‹¨μœ„ ν…ŒμŠ€νŠΈμ™€ 톡합 ν…ŒμŠ€νŠΈ μ½”λ“œλ₯Ό μ €μž₯ν•˜λŠ” λ””λ ‰ν† λ¦¬μž…λ‹ˆλ‹€.
  • pytest λ“±μœΌλ‘œ μžλ™ν™”λœ ν…ŒμŠ€νŠΈλ₯Ό μˆ˜ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • μž₯점: μ•ˆμ •μ μΈ μ½”λ“œ 배포λ₯Ό μ§€μ›ν•˜κ³ , λ¦¬νŒ©ν† λ§ μ‹œ 였λ₯˜λ₯Ό μ΅œμ†Œν™”ν•©λ‹ˆλ‹€.

βš™οΈ db.py, models.py, main.py

  • db.py: λ°μ΄ν„°λ² μ΄μŠ€ μ—°κ²° μ„€μ • 파일
  • models.py: λͺ¨λΈμ„ 톡합 κ΄€λ¦¬ν•˜κ±°λ‚˜ 관계 μ •μ˜
  • main.py: FastAPI μ•± μ‹€ν–‰ μ§„μž…μ , λΌμš°ν„° 등둝 및 μ„œλ²„ μ‹€ν–‰
  • μž₯점: 핡심 μ„€μ •κ³Ό μ§„μž…μ μ„ ν•œλˆˆμ— νŒŒμ•…ν•  수 μžˆμ–΄ μ΄ˆκΈ°ν™”μ™€ 배포가 μš©μ΄ν•©λ‹ˆλ‹€.

πŸ“ƒ requirements.txt

  • ν”„λ‘œμ νŠΈμ— ν•„μš”ν•œ Python νŒ¨ν‚€μ§€ λͺ©λ‘μ„ κΈ°λ‘ν•©λ‹ˆλ‹€.
  • μž₯점: 개발 ν™˜κ²½ 일관성 μœ μ§€μ™€ 배포 μžλ™ν™”μ— ν•„μˆ˜μž…λ‹ˆλ‹€.

🌐 ν”„λ‘ νŠΈμ—”λ“œ 디렉토리 ꡬ쑰와 의미

ν”„λ‘ νŠΈμ—”λ“œλŠ” Next.js 기반으둜 λ‹€μŒκ³Ό 같이 κ΅¬μ„±λ©λ‹ˆλ‹€.

frontend/
β”œβ”€β”€ pages/
β”œβ”€β”€ components/
β”œβ”€β”€ lib/
β”œβ”€β”€ styles/
β”œβ”€β”€ package.json
└── tsconfig.json

πŸ“„ pages/

  • Next.js λΌμš°νŒ… κΈ°μ€€ λ””λ ‰ν† λ¦¬λ‘œ, URLκ³Ό νŽ˜μ΄μ§€κ°€ λ§€ν•‘λ©λ‹ˆλ‹€.
  • 예: /login β†’ pages/login.tsx
  • μž₯점: 파일 기반 λΌμš°νŒ…μœΌλ‘œ νŽ˜μ΄μ§€ μΆ”κ°€κ°€ κ°„λ‹¨ν•©λ‹ˆλ‹€.

🧩 components/

  • UI μ»΄ν¬λ„ŒνŠΈ λͺ¨μŒ 디렉토리
  • λ²„νŠΌ, λͺ¨λ‹¬, 폼, λ ˆμ΄μ•„μ›ƒ λ“± μž¬μ‚¬μš© κ°€λŠ₯ν•œ μ»΄ν¬λ„ŒνŠΈλ₯Ό μ €μž₯ν•©λ‹ˆλ‹€.
  • μž₯점: UI μ½”λ“œ μž¬μ‚¬μš©κ³Ό μœ μ§€λ³΄μˆ˜κ°€ μ‰¬μ›Œμ§‘λ‹ˆλ‹€.

πŸ›  lib/

  • 곡톡 λΌμ΄λΈŒλŸ¬λ¦¬λ‚˜ μœ ν‹Έλ¦¬ν‹° ν•¨μˆ˜λ₯Ό λͺ¨μ•„λ‘‘λ‹ˆλ‹€.
  • 예: Axios API 호좜 λͺ¨λ“ˆ, 인증 ν•¨μˆ˜, ν¬λ§·νŒ… μœ ν‹Έ
  • μž₯점: 곡톡 μ½”λ“œ 집쀑 κ΄€λ¦¬λ‘œ μ½”λ“œ 쀑볡 λ°©μ§€

🎨 styles/

  • CSS, SCSS λ˜λŠ” Tailwind μ»€μŠ€ν„°λ§ˆμ΄μ§• 파일
  • μ „μ—­ μŠ€νƒ€μΌκ³Ό νŽ˜μ΄μ§€λ³„ μŠ€νƒ€μΌμ„ κ΅¬λΆ„ν•˜μ—¬ 관리
  • μž₯점: μΌκ΄€λœ λ””μžμΈ μœ μ§€μ™€ μœ μ§€λ³΄μˆ˜ 편리

πŸ“¦ package.json & tsconfig.json

  • package.json: ν”„λ‘œμ νŠΈ 쒅속성, 슀크립트, λΉŒλ“œ λͺ…λ Ή μ •μ˜
  • tsconfig.json: TypeScript μ„€μ • 파일
  • μž₯점: ν”„λ‘œμ νŠΈ λΉŒλ“œ 및 개발 ν™˜κ²½ 톡일성 확보

🐳 곡톡 μ„€μ • 파일과 Docker

πŸ™ docker-compose.yml

  • λ°±μ—”λ“œ(FastAPI), ν”„λ‘ νŠΈμ—”λ“œ(Next.js), DB(PostgreSQL)λ₯Ό 톡합 μ‹€ν–‰
  • μ„œλΉ„μŠ€λ³„ 포트, λ³Όλ₯¨, λ„€νŠΈμ›Œν¬ μ„€μ • κ°€λŠ₯
  • μž₯점: 둜컬 ν™˜κ²½, ν…ŒμŠ€νŠΈ ν™˜κ²½, 배포 ν™˜κ²½μ„ λ™μΌν•˜κ²Œ μœ μ§€ κ°€λŠ₯

πŸ”§ package-lock.json & 루트 package.json

  • Node.js νŒ¨ν‚€μ§€ 버전 κ³ μ • 및 쒅속성 관리
  • μž₯점: νŒ€ 개발 μ‹œ λ™μΌν•œ μ˜μ‘΄μ„± ν™˜κ²½ μœ μ§€

βœ… ν”„λ‘œμ νŠΈ ꡬ쑰의 μž₯점

  1. 가독성 ν–₯상: κΈ°λŠ₯λ³„λ‘œ μ½”λ“œκ°€ λΆ„λ¦¬λ˜μ–΄ κ°œλ°œμžκ°€ μ‰½κ²Œ 이해
  2. μœ μ§€λ³΄μˆ˜ 용이: κΈ°λŠ₯ ν™•μž₯, 버그 μˆ˜μ •, λ¦¬νŒ©ν† λ§ μ‹œ 영ν–₯ λ²”μœ„ μ΅œμ†Œν™”
  3. ν˜‘μ—… μ΅œμ ν™”: FE/BE/DB νŒ€ κ°„ μž‘μ—… 좩돌 μ΅œμ†Œν™”
  4. 배포 및 ν…ŒμŠ€νŠΈ 편리: Docker, CI/CD 연동이 μˆ˜μ›”
  5. μž¬μ‚¬μš©μ„± 확보: μ»΄ν¬λ„ŒνŠΈ, λͺ¨λ“ˆ, μœ ν‹Έλ¦¬ν‹° μž¬μ‚¬μš© κ°€λŠ₯

πŸ“Έ 전체 ν”„λ‘œμ νŠΈ ꡬ쑰 μ˜ˆμ‹œ

μ˜ˆμ‹œ ꡬ쑰:

PORTFOLIO-APP/
β”œβ”€β”€ backend/
β”‚   β”œβ”€β”€ models/
β”‚   β”œβ”€β”€ routes/
β”‚   β”œβ”€β”€ schemas/
β”‚   β”œβ”€β”€ tests/
β”‚   β”œβ”€β”€ db.py
β”‚   β”œβ”€β”€ main.py
β”‚   β”œβ”€β”€ models.py
β”‚   └── requirements.txt
β”œβ”€β”€ frontend/
β”‚   β”œβ”€β”€ pages/
β”‚   β”œβ”€β”€ components/
β”‚   β”œβ”€β”€ lib/
β”‚   β”œβ”€β”€ styles/
β”‚   β”œβ”€β”€ package.json
β”‚   └── tsconfig.json
β”œβ”€β”€ docker-compose.yml
β”œβ”€β”€ package-lock.json
└── package.json

πŸ“Œ μ°Έκ³ 

λŒ“κΈ€ 남기기