๐ ์ฝ 1๋ถ ์ฝ๋ ๋ฐ ์์๋ฉ๋๋ค
์ด์ ๊ธ ๋ณด๊ธฐ(FastAPI ์ฑ ํ ์คํธ-PyTest)
์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ฐํ๋ ๊ฒ๋งํผ์ด๋ ์ค์ํ ๊ฒ์ด ๋ฐ๋ก ๋ฐฐํฌ๋ค. FastAPI๋ ๋น๋๊ธฐ ์ฒ๋ฆฌ์ ๋์ ์ฑ๋ฅ ๋๋ถ์ ํ๋์ ์ธ ๋ฐฑ์๋ ๊ฐ๋ฐ์ ์ ํฉํ์ง๋ง, ๋ฐฐํฌ๋ฅผ ์ํด์๋ ๋ช ๊ฐ์ง ๊ตฌ์ฑ ์์๋ฅผ ํจ๊ป ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค.
์ด๋ฒ ๊ธ์์๋ ์จํ๋ ๋ฏธ์ค ํ๊ฒฝ, ์ฆ ์์ฒด ์๋ฒ ํน์ Windows PC์์ ์ง์ FastAPI ์ ํ๋ฆฌ์ผ์ด์
์ ์คํํ๊ณ ์๋น์คํ๋ ๋ฐฉ๋ฒ์ ์ค์ ์ ์ผ๋ก ๋ค๋ฃฌ๋ค. Uvicorn
, Gunicorn
, ๊ทธ๋ฆฌ๊ณ Docker
๋ฅผ ํ์ฉํ์ฌ ์ค์ ์์ ๋ฐ๋ก ์ ์ฉํ ์ ์๋ ๋ฐฐํฌ ๊ณผ์ ์ ํจ๊ป ์ดํด๋ณด์.
๐ง Uvicorn์ผ๋ก ์ ํ๋ฆฌ์ผ์ด์ ์คํํ๊ธฐ
FastAPI๋ ์์ฒด์ ์ผ๋ก ASGI(Asynchronous Server Gateway Interface)๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋์ํ๋ค. ์ด๋, ASGI ์๋ฒ ์ญํ ์ ํด์ฃผ๋ ๊ฒ์ด ๋ฐ๋ก Uvicorn์ด๋ค.
Uvicorn์ ๊ฐ๋ณ๊ณ ๋น ๋ฅธ Python ASGI ์๋ฒ๋ก, FastAPI์ ๊ธฐ๋ณธ ๋ฐ์ฒ๋ค.
Uvicorn ์ค์น
๋จผ์ ์๋ ๋ช ๋ น์ด๋ก Uvicorn์ ์ค์นํ์.
pip install uvicorn
์ค์น๊ฐ ์๋ฃ๋๋ฉด, main.py
๋ผ๋ ํ์ผ์ด ์๋ค๊ณ ๊ฐ์ ํ๊ณ ๋ค์ ๋ช
๋ น์ด๋ก ์ ํ๋ฆฌ์ผ์ด์
์ ์คํํ ์ ์๋ค.
uvicorn main:app --reload
main
: FastAPI ์ธ์คํด์ค๋ฅผ ๋ด๊ณ ์๋ ํ์ผ๋ช (ํ์ฅ์ ์ ์ธ)app
: FastAPI ๊ฐ์ฒด ์ด๋ฆ--reload
: ์ฝ๋ ๋ณ๊ฒฝ ์ ์๋์ผ๋ก ์๋ฒ ์ฌ์์ (๊ฐ๋ฐ์ฉ)
ํ์ง๋ง ์ด ๋ฐฉ์์ ๊ฐ๋ฐ ํ๊ฒฝ์ฉ์ด๊ธฐ ๋๋ฌธ์, ์ค์ ์ด์ ํ๊ฒฝ์์๋ ์ ํฉํ์ง ์๋ค. ์ด์์์๋ --reload
์์ด ์คํํ๊ฑฐ๋, ๋ ๋์๊ฐ Gunicorn๊ณผ ํจ๊ป ์ฌ์ฉํ๋ ๊ฒ์ด ์์ ์ฑ๊ณผ ์ฑ๋ฅ ๋ฉด์์ ์ ๋ฆฌํ๋ค.
๐ฅ Gunicorn๊ณผ ํจ๊ป Uvicorn ์ฌ์ฉํ๊ธฐ
Linux ํ๊ฒฝ์์๋ Gunicorn + Uvicorn Worker ์กฐํฉ์ด ๋ฐฐํฌ ํ์ค์ผ๋ก ์๋ฆฌ์ก๊ณ ์๋ค. ๊ทธ๋ฌ๋ Windows ํ๊ฒฝ์์๋ Gunicorn์ด ๊ณต์์ ์ผ๋ก ์ง์๋์ง ์๋๋ค. ๋ฐ๋ผ์ ์จํ๋ ๋ฏธ์ค Windows ํ๊ฒฝ์์๋ Uvicorn ๋จ๋ ์คํ, ๋๋ Docker๋ฅผ ์ด์ฉํ Linux ํ๊ฒฝ ๊ฐ์ํ๋ฅผ ํตํด Gunicorn์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค.
์ด์ ํ๊ฒฝ์์ Uvicorn์ ์ฌ์ฉํ๋ ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ๋ช ๋ น์ ๋ค์๊ณผ ๊ฐ๋ค.
uvicorn main:app --host 0.0.0.0 --port 8000
--host 0.0.0.0
: ์ธ๋ถ์์ ์ ๊ทผ ๊ฐ๋ฅํ๊ฒ ํจ--port
: ์ํ๋ ํฌํธ ์ค์
์ด ๋ช
๋ น์ ์คํ ์ฝ์์์ ์ง์ ์
๋ ฅํ๊ฑฐ๋ .bat
ํ์ผ๋ก ๋ง๋ค์ด ์๋ ์คํ๋ ์ ์๋ค.
๐ณ Docker๋ก ๋ฐฐํฌํ๊ธฐ
Windows ํ๊ฒฝ์์ FastAPI ์ ํ๋ฆฌ์ผ์ด์ ์ ์์ ์ ์ผ๋ก ์คํํ๊ธฐ ์ํ ์ต๊ณ ์ ๋ฐฉ๋ฒ ์ค ํ๋๋ Docker๋ฅผ ํ์ฉํ๋ ๊ฒ์ด๋ค. Docker๋ ์ปจํ ์ด๋ ๊ธฐ๋ฐ ๊ฐ์ํ ๊ธฐ์ ๋ก, ์ด๋ค ํ๊ฒฝ์์๋ ๋์ผํ๊ฒ ์คํํ ์ ์๋๋ก ํด์ค๋ค.
Docker ์ค์น (Windows)
- Docker Desktop ๊ณต์ ํํ์ด์ง์์ Docker Desktop์ ๋ค์ด๋ก๋ํ๋ค.
- ์ค์น ํ, ์ฌ๋ถํ ํ๊ณ Docker๊ฐ ์ ์์ ์ผ๋ก ์คํ๋๋์ง ํ์ธํ๋ค.
- PowerShell์์ ์๋ ๋ช ๋ น์ด๋ก ์ ์ ๋์ ์ฌ๋ถ๋ฅผ ํ์ธํ๋ค.
docker --version
Dockerfile ์์ฑ
๋ค์์ FastAPI + Uvicorn์ Docker๋ก ํจํค์งํ๊ธฐ ์ํ Dockerfile ์์ ์ด๋ค.
# ๋ฒ ์ด์ค ์ด๋ฏธ์ง
FROM python:3.11
# ์์
๋๋ ํ ๋ฆฌ ์ค์
WORKDIR /app
# ํ์ํ ํ์ผ ๋ณต์ฌ
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
# ์ฑ ๋ณต์ฌ
COPY . .
# ํฌํธ ์คํ
EXPOSE 8000
# ์คํ ๋ช
๋ น
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]
requirements.txt ์์ฑ
FastAPI์ Uvicorn์ด ํฌํจ๋ ์์กด์ฑ ํ์ผ์ ์์ฑํ์.
fastapi
uvicorn
Docker ์ด๋ฏธ์ง ๋น๋
๋ค์ ๋ช ๋ น์ด๋ก Docker ์ด๋ฏธ์ง๋ฅผ ๋น๋ํ๋ค.
docker build -t fastapi-app .
Docker ์ปจํ ์ด๋ ์คํ
docker run -d -p 8000:8000 --name fastapi-container fastapi-app
-d
: ๋ฐฑ๊ทธ๋ผ์ด๋ ์คํ-p
: ํธ์คํธ ํฌํธ:์ปจํ ์ด๋ ํฌํธ ๋งคํ--name
: ์ปจํ ์ด๋ ์ด๋ฆ
์ด์ ๋ธ๋ผ์ฐ์ ์์ http://localhost:8000
์ผ๋ก ์ ์ํ๋ฉด FastAPI ์ ํ๋ฆฌ์ผ์ด์
์ด ์ ์์ ์ผ๋ก ์คํ๋๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
๐งฑ Windows ์๋น์ค๋ก ๋ฑ๋กํ๊ธฐ
์จํ๋ ๋ฏธ์ค ํ๊ฒฝ์์๋ ์ ํ๋ฆฌ์ผ์ด์
์ ์๋์ผ๋ก ์คํํ๊ณ ๊ณ์ ์ด์ ์๋๋ก ์ ์งํ๋ ๊ฒ์ด ์ค์ํ๋ค. ์ด๋ฅผ ์ํด NSSM
(Non-Sucking Service Manager)์ด๋ผ๋ ํด์ ์ฌ์ฉํด๋ณด์.
NSSM ์ค์น ๋ฐ ์ฌ์ฉ
- NSSM์ ๋ค์ด๋ก๋ํ๊ณ ์์ถ์ ํผ๋ค.
- ๊ด๋ฆฌ์ ๊ถํ CMD ๋๋ PowerShell์ ์ด๊ณ ๋ค์์ ์คํํ๋ค.
nssm install fastapi-service
- ์คํ ํ์ผ ์์น์๋ Python ์คํ ๊ฒฝ๋ก๋ฅผ, ์ธ์์๋ Uvicorn ์คํ ์คํฌ๋ฆฝํธ๋ฅผ ๋ฃ๋๋ค.
์:
- Path:
C:\Users\username\venv\Scripts\python.exe
- Arguments:
-m uvicorn main:app --host 0.0.0.0 --port 8000
์ด์ ์์คํ ๋ถํ ์ FastAPI๊ฐ ์๋์ผ๋ก ์คํ๋๋ ์๋์ฐ ์๋น์ค๊ฐ ์์ฑ๋๋ค.
๐ ๋ณด์ ๋ฐ ์ฑ๋ฅ ํ
- ๋ฐฉํ๋ฒฝ ์์ธ ๋ฑ๋ก: Windows ๋ฐฉํ๋ฒฝ์์ 8000๋ฒ ํฌํธ๋ฅผ ํ์ฉํด์ผ ์ธ๋ถ์์ ์ ์ ๊ฐ๋ฅํ๋ค.
- ๋ฆฌ๋ฒ์ค ํ๋ก์ ์ค์ : ์ค์ ์๋น์ค ํ๊ฒฝ์์๋
Nginx
๋Apache
๋ฅผ ์๋จ์ ๋๊ณ ๋ฆฌ๋ฒ์ค ํ๋ก์๋ฅผ ๊ตฌ์ฑํ๋ ๊ฒ์ด ์ผ๋ฐ์ ์ด๋ค. ์ด๋ HTTPS ์ ์ฉ, ๋ก๋ ๋ฐธ๋ฐ์ฑ, ์บ์ฑ ๋ฑ์ ๊ฐ๋ฅํ๊ฒ ํ๋ค. - ๋ชจ๋ํฐ๋ง: ์จํ๋ ๋ฏธ์ค ํ๊ฒฝ์์๋
prometheus
,grafana
,logrotate
๋ฑ์ ํ์ฉํด ๋ก๊ทธ ๋ฐ ์ํ ๋ชจ๋ํฐ๋ง์ ๊ตฌ์ฑํ๋ฉด ์ข๋ค.
โ ๋ง๋ฌด๋ฆฌํ๋ฉฐ
FastAPI๋ ๊ฐ๋ณ๊ณ ๊ฐ๋ ฅํ ํ๋ ์์ํฌ์ธ ๋งํผ, ๋ฐฐํฌ ๋ํ ๋จ์ํ๊ณ ํจ์จ์ ์ผ๋ก ๊ตฌ์ฑํ ์ ์๋ค. ํนํ Windows ํ๊ฒฝ์์๋ Docker๋ฅผ ํ์ฉํ๋ฉด ๋ฆฌ๋ ์ค ๊ธฐ๋ฐ์ ๋ฐฐํฌ ๊ตฌ์กฐ๋ฅผ ๋์ผํ๊ฒ ์ฌ์ฉํ ์ ์์ด ์ด์์ฑ๊ณผ ์ ์ง๋ณด์๊ฐ ์ฌ์์ง๋ค.
์ด๋ฒ ๊ธ์์๋ ์จํ๋ ๋ฏธ์ค ํ๊ฒฝ์์์ ๋ฐฐํฌ์ ์ค์ ์ ๋์์ง๋ง, ์ดํ์๋ AWS, Vercel ๋ฑ ํด๋ผ์ฐ๋ ๊ธฐ๋ฐ์ ๋ฐฐํฌ ๋ฐฉ๋ฒ๋ ์๊ฐํ ์์ ์ด๋ค. ๋ก์ปฌ ํ๊ฒฝ์์ ์ถฉ๋ถํ ํ ์คํธํ๊ณ , ์์ ์ ์ธ ๋ฐฐํฌ๊ฐ ๊ฐ๋ฅํด์ก๋ค๋ฉด ๋ค์ ๋จ๊ณ๋ก ํด๋ผ์ฐ๋ ์ด์ ๋ ๊ณ ๋ คํด๋ณด์.
FastAPI ๊ณต์ ๋ฌธ์ : https://fastapi.tiangolo.com/ko/
