FastAPI๋?
FastAPI๋ Python์ผ๋ก ๋ง๋ ์ต์ ์น ํ๋ ์์ํฌ์ด๋ค
๋น ๋ฅธ ์๋, ํ์
ํํธ ์ง์, ์๋ ๋ฌธ์ํ, ๋น๋๊ธฐ(Async) ์ง์ ๋ฑ์ ๊ฐ์ ์ด ์๋ค
RESTful API, ์น์์ผ ๋ฑ ๋ค์ํ ๋ฐฑ์๋ ๊ธฐ๋ฅ์ ์ฝ๊ฒ ๊ฐ๋ฐํ ์ ์๊ฒ ํด์ค๋ค
FastAPI์ ๊ด๋ จ ์ฃผ์ ์ฉ์ด
ASGI (Asynchronous Server Gateway Interface)
- Python์์ ๋น๋๊ธฐ ์น ์๋น์ค๋ฅผ ๋ง๋ค๊ธฐ ์ํ ์ธํฐํ์ด์ค (ํ๋กํ ์ฝ, ํ์ค)
- WSGI1์ ๋น๋๊ธฐ ํ์ฅํ์ผ๋ก, ๋๊ธฐ(Sync)์ ๋น๋๊ธฐ(Async) ๋ชจ๋ ์ง์
- FastAPI, Starlette, Django(3.x ์ดํ) ๋ฑ์ด ASGI๋ฅผ ์ง์
Starlette
- Starlette๋ ASGI ๊ธฐ๋ฐ์ ์ด๊ฒฝ๋ ์น ํ๋ ์์ํฌ
- FastAPI๋ Starlette ์์ ๋ง๋ค์ด์ก์ผ๋ฉฐ, Starlette๊ฐ FastAPI์ ๋ผ๋ ์ญํ
- ๋ผ์ฐํ , ๋ฏธ๋ค์จ์ด, ์์ฒญ/์๋ต ์ฒ๋ฆฌ ๋ฑ ์น ํ๋ ์์ํฌ์ ํต์ฌ ๊ธฐ๋ฅ์ ์ ๊ณต
Uvicorn
- Uvicorn์ ASGI ์๋ฒ๋ก, FastAPI (๋๋ Starlette) ์ฑ์ ์คํ์์ผ์ฃผ๋ ์๋ฒ
- ๋น๋๊ธฐ (Async) ์ง์, ๋น ๋ฅด๊ณ ๊ฐ๋ฒผ์
- Flask์์์ WSGI ์๋ฒ (์: gunicorn, uwsgi ๋ฑ)์ ๋น์ทํ ์ญํ
Gunicorn
- Gunicorn์ WSGI ์๋ฒ๋ก ๋๋ฆฌ ์ฌ์ฉ๋์ด์์ผ๋, ์ต๊ทผ์๋ ASGI ์ ํ๋ฆฌ์ผ์ด์ ๋ ์ง์
- Uvicorn ์์ปค(worker)์ ์กฐํฉํด์ ์ด์ ํ๊ฒฝ์์ ๋ง์ด ์ฌ์ฉ
- Gunicorn์ ๋ฉํฐ ํ๋ก์ธ์ค ๋ฐฉ์์ ์ง์ํ์ฌ, ์ฌ๋ฌ Uvicorn ์ธ์คํด์ค๋ฅผ ๊ด๋ฆฌ
FastAPI ์ ์ฒด ๊ตฌ์กฐ
graph TD Client["ํด๋ผ์ด์ธํธ / ๋ธ๋ผ์ฐ์ ๋๋ ์ฑ)"] -->|ASGI| Uvicorn["Uvicorn - ASGI ์๋ฒ"] Uvicorn --> Starlette["Starlette - ASGI ํ๋ ์์ํฌ"] Starlette --> FastAPI["FastAPI - API ๋น์ฆ๋์ค ๋ก์ง"]
์ด์ ํ๊ฒฝ์์๋ Gunicorn์ด ์ฌ๋ฌ ๊ฐ์ Uvicorn ํ๋ก์ธ์ค๋ฅผ ๊ด๋ฆฌํ๋ ์ญํ ๋ก ์ถ๊ฐ๋ ์ ์์
์์ฝ ํ
์ฉ์ด | ์ค๋ช | FastAPI์์ ๊ด๊ณ |
---|---|---|
ASGI | Python ๋น๋๊ธฐ ์๋ฒ ์ธํฐํ์ด์ค | FastAPI์ ๋์ ๊ธฐ๋ฐ ํ๋กํ ์ฝ |
Starlette | ASGI ๊ธฐ๋ฐ ๊ฒฝ๋ ์น ํ๋ ์์ํฌ | FastAPI์ ๊ธฐ๋ฐ ๋ผ๋ |
Uvicorn | ASGI ์๋ฒ, FastAPI ์คํ ์๋ฒ | FastAPI๋ฅผ ์คํ์์ผ์ฃผ๋ ์๋ฒ |
Gunicorn | ๋ฉํฐ ํ๋ก์ธ์ค WSGI/ASGI ์๋ฒ | Uvicorn๊ณผ ์กฐํฉํ์ฌ ์ด์ |
FastAPI | Starlette ๊ธฐ๋ฐ ์ต์ API ํ๋ ์์ํฌ | ์ค์ API ์์ฑ ์์น |
FastAPI ์คํ ์์
๊ฐ๋ฐ(๋ก์ปฌ)
uvicorn main:app --reload
python -m fastapi dev app/main.py
์ด์(๋ฐฐํฌ)
gunicorn -k uvicorn.workers.UvicornWorker main:app
Footnotes
-
Python ์น ์๋ฒ์ ์น ์ฑ(ํ๋ ์์ํฌ)์ ์ฐ๊ฒฐํด์ฃผ๋ ๋๊ธฐ ์ธํฐํ์ด์ค โฉ