π§ λ°±μλ κ°λ° κ°μ΄λ
μ΄κ°μ΄ νλ‘μ νΈμ λ°±μλ μλ²λ FastAPI νλ μμν¬λ₯Ό κΈ°λ°μΌλ‘ ꡬμΆλμμΌλ©°, λΌμ¦λ² 리νμ΄, LLM μλ², νλ‘ νΈμλ μ ν리μΌμ΄μ κ³Όμ μμ μ μΈ ν΅μ μ λ΄λΉν©λλ€. μ¬μ©μ λ±λ‘, λ³΅μ½ κΈ°λ‘ μ μ₯, μ€μΌμ€ κΈ°λ° μλ¦Ό μ μ΄, μμ± ν μ€νΈ μ λ¬ λ± λ€μν κΈ°λ₯μ API λ¨μλ‘ μ²λ¦¬νλ©°, λͺ¨λ μ²λ¦¬λ κ²½λνλ ꡬ쑰 λ΄μμ μ€μκ°μΌλ‘ μνλ©λλ€.
β μλ² μν€ν μ²
- νλ μμν¬: FastAPI
- λ°°ν¬ νκ²½: AWS EC2 (Ubuntu 22.04 LTS κΈ°μ€)
- νλ‘μΈμ€ κ΄λ¦¬: Node.js κΈ°λ°μ PM2 νμ©
- λ°μ΄ν°λ² μ΄μ€: SQLite (ν μ€νΈμ©, ν₯ν PostgreSQL νμ₯ κ°λ₯)
API μλ²λ /apiλ‘ μμλλ RESTful λΌμ°ν
ꡬ쑰λ₯Ό λ°λ₯΄λ©°, μ£Όμ κΈ°λ₯λ³λ‘ λΌμ°ν°κ° λΆλ¦¬λμ΄ μμ΅λλ€.
π λ°°ν¬ λ° μλν μν¬νλ‘μ°
- GitHub Actions λλ μλ λ°©μ λͺ¨λ μ§μ
mainλΈλμΉλ‘ μ½λκ° pushλλ©΄, EC2 μλ²μμ μλμΌλ‘git pullβpm2 restartμμλ‘ μ€νdeploy-cicd.ymlμ€ν¬λ¦½νΈλ‘ λ€μμ μν:- μ μ₯μ pull
- λ³κ²½λ μμ‘΄μ± μ€μΉ
- μλ² νλ‘μΈμ€ μ¬μμ (pm2 κΈ°λ°)
π μ€ν λ°©μ
1. FastAPI μλ² μ€ν
uvicorn main:app --host 0.0.0.0 --port 8000
#λλ
λ°°ν¬ νκ²½μμλ
pm2λ‘ μ€ννλ©° λ°±κ·ΈλΌμ΄λ μ μ§ λ° μλ μ¬μμμ 보μ₯ν©λλ€.
2. PM2 κ΄λ¦¬
pm2 start "python main.py" --name main
pm2 restart main
pm2 logs main
- λ‘κ·Έ νμΌ μμΉ:
~/.pm2/logs/main-out.log - μλ¬ λ‘κ·Έ:
~/.pm2/logs/main-error.log
π μΈμ¦ λ° μ¬μ©μ κ΄λ¦¬
- κ΄λ¦¬μ, 보νΈμ, μΌλ° μ¬μ©μλ‘ κ΅¬λΆλ μΈμ¦ ꡬ쑰λ μΆν OAuth λλ JWT κΈ°λ°μΌλ‘ νμ₯ μμ
- νμ¬λ λ‘κ·ΈμΈ μμλ§ ν ν° κΈ°λ° κ²μ¦ λ‘μ§μ μ¬μ© μ€ (κ°λ° νΈμ λͺ©μ )
π μ μ§λ³΄μ μ λ΅
- EC2 μλ²λ
ufwλ°©νλ²½μΌλ‘ ν¬νΈλ₯Ό μ ννκ³ , API μλ²λ8000ν¬νΈλ§ μΈλΆμ κ³΅κ° - SSH μ μμ 곡κ°ν€ κΈ°λ° μΈμ¦ μ¬μ©
- μΆνμλ
Nginx리λ²μ€ νλ‘μ μ€μ λ° HTTPS μ μ© μμ
π λ§λ¬΄λ¦¬
μ΄κ°μ΄ λ°±μλ μλ²λ λ€μν λλ°μ΄μ€μμ μ°λμ μ μ λ‘ μ€κ³λ κ²½λνλκ³ μ μ°ν REST API μμ€ν
μ
λλ€.
FastAPI κΈ°λ° κ΅¬μ‘°λ λΉλκΈ° μ²λ¦¬μ λͺ¨λ νμ₯μ κ°μ μ κ°μ§λ©°, EC2μ PM2λ₯Ό ν΅ν΄ λμ μμ μ±κ³Ό μ΄μ ν¨μ¨μ±μ ν보νκ³ μμ΅λλ€.
AI μΆλ‘ , μμ± λ°μ΄ν° μμ§, λ³΅μ½ μ€μΌμ€ κ΄λ¦¬ λ± λ€μν κΈ°λ₯μ΄ νλμ λ°±μλ μμ€ν
μΌλ‘ ν΅ν©λμ΄ μμΌλ©°, μΆν μ¬μ©μ μΈμ¦/보μ κ°ν, λ°μ΄ν° μκ°ν κΈ°λ₯λ μ§μ νμ₯λ μμ μ
λλ€. ```