μ΄λ² ν¬μ€ν μμλ μ μ λ‘컬 νκ²½ κΈ°μ€μΌλ‘ ꡬμ±ν νλ‘μ νΈ κ΅¬μ‘°λ₯Ό λ°νμΌλ‘ κ° λλ ν 리μ νμΌμ μν μ μμΈν μ€λͺ νκ² μ΅λλ€. νλ‘μ νΈ λλ ν 리 ꡬ쑰μλ μ νν μ λ΅μ μμ§λ§ μ¬λ°λ₯Έ μ€κ³ μμΉμ μ΄ν΄νλ©΄ κ°λ°μ ν° λμμ΄ λ©λλ€.
π λͺ©μ°¨
- π νλ‘μ νΈ λλ ν 리 ꡬ쑰λ₯Ό λλλ μ΄μ
- π₯ λ°±μλ λλ ν 리 ꡬ쑰μ μλ―Έ
- π νλ‘ νΈμλ λλ ν 리 ꡬ쑰μ μλ―Έ
- π³ κ³΅ν΅ μ€μ νμΌκ³Ό Docker
- β νλ‘μ νΈ κ΅¬μ‘°μ μ₯μ
- πΈ μ 체 νλ‘μ νΈ κ΅¬μ‘° μμ
- π μ°Έκ³
π νλ‘μ νΈ λλ ν 리 ꡬ쑰λ₯Ό λλλ μ΄μ
λκ·λͺ¨ μ ν리μΌμ΄μ
μΌμλ‘ λλ ν 리 ꡬ쑰λ₯Ό 체κ³μ μΌλ‘ λλλ κ²μ΄ νμμ
λλ€.
μ£Όμ μ΄μ λ λ€μκ³Ό κ°μ΅λλ€.
- μ μ§λ³΄μ μ©μ΄μ±: κΈ°λ₯λ³λ‘ λλ ν 리λ₯Ό λλλ©΄ μ½λκ° μ΄λμ μλμ§ λͺ νν μ μ μμ΄ μμ μ΄ μ½μ΅λλ€.
- νμ ν¨μ¨μ±: λ°±μλ, νλ‘ νΈμλ, ν μ€νΈ μ½λλ₯Ό λΆλ¦¬νλ©΄ μ¬λ¬ κ°λ°μκ° λμμ μμ νκΈ° νΈλ¦¬ν©λλ€.
- μ¬μ¬μ©μ± ν₯μ: κ³΅ν΅ λΌμ΄λΈλ¬λ¦¬, μ»΄ν¬λνΈ, λͺ¨λΈ λ±μ ꡬ쑰ννλ©΄ μ¬μ¬μ©μ΄ μ©μ΄ν©λλ€.
- 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 ν¨ν€μ§ λ²μ κ³ μ λ° μ’ μμ± κ΄λ¦¬
- μ₯μ : ν κ°λ° μ λμΌν μμ‘΄μ± νκ²½ μ μ§
β νλ‘μ νΈ κ΅¬μ‘°μ μ₯μ
- κ°λ μ± ν₯μ: κΈ°λ₯λ³λ‘ μ½λκ° λΆλ¦¬λμ΄ κ°λ°μκ° μ½κ² μ΄ν΄
- μ μ§λ³΄μ μ©μ΄: κΈ°λ₯ νμ₯, λ²κ·Έ μμ , 리ν©ν λ§ μ μν₯ λ²μ μ΅μν
- νμ μ΅μ ν: FE/BE/DB ν κ° μμ μΆ©λ μ΅μν
- λ°°ν¬ λ° ν μ€νΈ νΈλ¦¬: Docker, CI/CD μ°λμ΄ μμ
- μ¬μ¬μ©μ± ν보: μ»΄ν¬λνΈ, λͺ¨λ, μ νΈλ¦¬ν° μ¬μ¬μ© κ°λ₯
πΈ μ 체 νλ‘μ νΈ κ΅¬μ‘° μμ
μμ ꡬ쑰:
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