1οΈβ£ νμ κ° κ°λ° νκ²½μ΄ μΌκ΄λμ§ μμ
2οΈβ£ λ‘컬μμ μ λλ μ½λκ° λ€λ₯Έ νκ²½μμλ μ€νλμ§ μμ
pip install
ν λ ν¨ν€μ§ μΆ©λ λ¬Έμ λ°μ. 3οΈβ£ λ°°ν¬ μ μ€ν νκ²½μ λ§μΆλ κ³Όμ μ΄ λ²κ±°λ‘μ
Python
, FAISS
, PostgreSQL
λ± νμν λΌμ΄λΈλ¬λ¦¬λ₯Ό Docker νκ²½μ ν΅ν©νμ¬ μ€ν νκ²½ ν΅μΌ. # 1. Python νκ²½μ κΈ°λ°μΌλ‘ μ΄λ―Έμ§ μμ±
FROM python:3.9
# 2. μμ
λλ ν 리 μ€μ
WORKDIR /app
# 3. νμν ν¨ν€μ§ μ€μΉ
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
# 4. μ½λ λ³΅μ¬ ν μ€ν
COPY . .
CMD ["python", "app.py"]
π κ²°κ³Ό
β
μ΄λ€ νκ²½μμλ λμΌν κ°λ° νκ²½μ μ μ§ν μ μμ.
β
λ‘컬과 μλ²μ μ€ν νκ²½μ΄ μΌμΉνλ―λ‘ λ°°ν¬ μ€λ₯ κ°μ.
docker-compose.yml
μμ±. docker-compose up -d
) version: '3.8'
services:
db:
image: postgres
restart: always
environment:
POSTGRES_USER: admin
POSTGRES_PASSWORD: secret
POSTGRES_DB: inflow_chat
ports:
- "5432:5432"
backend:
build: .
depends_on:
- db
environment:
DATABASE_URL: postgresql://admin:secret@db:5432/inflow_chat
ports:
- "8000:8000"
π κ²°κ³Ό
β
λ°μ΄ν°λ² μ΄μ€ + λ°±μλλ₯Ό ν λ²μ μ€νν μ μμ.
β
λ‘컬 νκ²½μμλ λ°°ν¬ νκ²½κ³Ό λμΌν νκ²½μμ μ€ν κ°λ₯.
β
κ°λ° νκ²½ μ°¨μ΄ ν΄κ²° β "λ΄ νκ²½μμλ μ λλλ°?" λ¬Έμ ν΄κ²°!
β
μλ² λ°°ν¬κ° κ°λ¨ν΄μ§ β ν μ€λ‘ μ€ν κ°λ₯ (docker-compose up -d
)
β
νμ
μ΄ μ¬μμ§ β λͺ¨λ νμμ΄ λμΌν νκ²½μμ κ°λ° κ°λ₯.
β
λ°°ν¬ ν μ€λ₯ κ°μ β κ°λ° νκ²½κ³Ό λ°°ν¬ νκ²½μ΄ λμΌνλ―λ‘ μ€ν μ€λ₯ μ΅μν.
1οΈβ£ Postmanμ μ¬μ©νμ¬ API ν μ€νΈ μ§ννμΌλ, νμ μ λΆνΈν¨ λ°μ
2οΈβ£ API κ°λ° μ§ν μν©μ μ§κ΄μ μΌλ‘ λ³Ό μ μλ λ°©λ²μ΄ νμν¨
3οΈβ£ Flaskμμ Swagger(FastAPIμ²λΌ κΈ°λ³Έ μ§μ X)λ₯Ό μ¬μ©νκΈ° μν΄ λ¦¬ν©ν λ§ νμ
π‘ Swaggerλ₯Ό μ¬μ©νλ©΄ API λ¬Έμκ° μλμΌλ‘ μμ±λλ©°, κ°λ°μλ€μ΄ λ°λ‘ APIλ₯Ό μ€νν μ μμ!
π κ²°κ³Ό:
β
API μ€νκ³Ό λμμ Swagger UIμμ μλμΌλ‘ λ¬Έμκ° μμ±λ¨.
β
νλ‘ νΈμλ κ°λ°μκ° API ν
μ€νΈλ₯Ό Swaggerμμ μ§μ μ€ν κ°λ₯!
π‘ κΈ°μ‘΄ Blueprint λ°©μμμλ Swagger λ¬Έμλ₯Ό μλ μμ±νκΈ° μ΄λ €μ μ.
π κ·Έλμ APIλ₯Ό Flask-RESTXμ Namespace λ°©μμΌλ‘ λ³κ²½!
π 리ν©ν λ§ κ³Όμ μμ μ»μ μ΄μ :
π API νμ μ΄ ν¨μ¬ μ¬μμ§!
π κ°λ° μ§ν μν©μ νλμ λ³Ό μ μμ!
π 리ν©ν λ§μ ν΅ν μ½λ κ°μ ν¨κ³Ό
β
Swaggerλ API νμ
μ μν νμ λꡬ!
β
Postmanλ μ μ©νμ§λ§, λ¬Έμν & νμ
μ μν΄μλ Swaggerκ° λ κ°λ ₯ν¨.
β
Flask-RESTXλ‘ λ³κ²½νλ©΄μ μ½λ λͺ¨λν λ° API λ¬Έμ μλνλ₯Ό ν¨κ» μ§νν μ μμμ.
β
리ν©ν λ§ κ³Όμ μμ λΆνμν μ½λ μ 리λ₯Ό νλ©΄μ, API μ€κ³μ λν κ³ λ―Όμ λ κΉμ΄ ν μ μμμ.
1οΈβ£ νμ κ° Git λΈλμΉ μ λ΅μ΄ μμ΄μ μ½λ μΆ©λ λ°μ
2οΈβ£ λΈλμΉ κ΄λ¦¬ λ―ΈμμΌλ‘ μΈν΄ κ°μ Merge λ°μ β μ½λ μΆ©λ & λ²κ·Έ μ¦κ°
main
λΈλμΉμμ μ§μ κ°λ° ν κ°μ Merge μ§ν β μ½λκ° κΌ¬μ΄κ³ μΆ©λ λ°μ. 3οΈβ£ λΈλμΉκ° κΌ¬μ¬μ μ΅μ μ κ²½μ° λ ν¬λ₯Ό μλ‘ μμ±ν΄μΌ νλ μν©
π‘ 1) νμ μ μν Git λΈλμΉ μ λ΅μ λμ (Feature Branch Workflow μ μ©)
π Git λΈλμΉ μ λ΅
- main (λ°°ν¬ λΈλμΉ)
- develop (κ°λ° λΈλμΉ)
βββ feature/{issue-number}-feature-name (κΈ°λ₯ κ°λ° λΈλμΉ)
βββ bugfix/{issue-number}-bug-description (λ²κ·Έ μμ λΈλμΉ)
π μμ λΈλμΉ κ΄λ¦¬ λ°©λ²
# 1. μλ‘μ΄ κΈ°λ₯ κ°λ° μ
git checkout -b feature/12-add-auth-system
# 2. κ°λ° μλ£ ν μ»€λ° & Push
git commit -m "Add authentication system (#12)"
git push origin feature/12-add-auth-system
# 3. PR μμ± ν μ½λ 리뷰 μμ²
# 4. 리뷰 μλ£ ν Merge & λΈλμΉ μμ
π‘ 2) κ°μ Merge λ°©μ§λ₯Ό μν΄ Git κ·μΉ μ립
β
PR μμ΄ mainμ μ§μ Push κΈμ§ (Branch Protection μ€μ )
β
λͺ¨λ PRμ μ΅μ 1λͺ
μ΄μμ μ½λ 리뷰 ν Merge
β
Merge μ μ λ°λμ develop
λΈλμΉμμ Pull ν Conflict ν΄κ²°
π Branch Protection μ€μ μμ (GitHub μ€μ )
main
λΈλμΉμ μ§μ Push λΆκ°λ₯νλλ‘ μ€μ . π‘ 3) Git μ»€λ° λ©μμ§ λ° λΈλμΉ λ€μ΄λ° κ·μΉ ν΅μΌ
β
Issue λ²νΈ κΈ°λ° λΈλμΉ λ€μ΄λ°
β
μ»€λ° λ©μμ§ κ·μΉ μ€μ β feat:
, fix:
, docs:
, refactor:
λ±μ Prefix μ¬μ©
π μμ
feat: Add authentication system (#12)
fix: Resolve login bug (#23)
docs: Update API documentation (#30)
π νμ μ΄ ν¨μ¬ μ¬μμ§!
π μ½λ νμ§ κ°μ !
π νμλ€μ Git μ¬μ© λ₯λ ₯ ν₯μ
β
Git λΈλμΉ μ λ΅μ΄ μμΌλ©΄ νμ
μ΄ λΆκ°λ₯νλ€!
β
νΌμ κ°λ°ν λλ νμ μμ§λ§, ν νλ‘μ νΈμμλ Git μ λ΅μ΄ νμλ€.
β
PRμ ν΅ν μ½λ 리뷰 κ³Όμ μ΄ μ½λ νμ§μ ν¬κ² ν₯μμν¨λ€.
β
κ°μ Mergeλ μ΅μ
μ κ²°κ³Όλ₯Ό μ΄λν μ μλ€ β λ°λμ λΈλμΉ λ³΄νΈ μ€μ μ΄ νμνλ€.
β
λ ν¬λ₯Ό μλ‘ νλ μΌμ μμ΄μΌ νλ€ β Git κ΄λ¦¬κ° 곧 νμ
μ κΈ°λ³Έμ΄λ€.