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์™€์˜ ๊ด€๊ณ„
ASGIPython ๋น„๋™๊ธฐ ์„œ๋ฒ„ ์ธํ„ฐํŽ˜์ด์ŠคFastAPI์˜ ๋™์ž‘ ๊ธฐ๋ฐ˜ ํ”„๋กœํ† ์ฝœ
StarletteASGI ๊ธฐ๋ฐ˜ ๊ฒฝ๋Ÿ‰ ์›น ํ”„๋ ˆ์ž„์›ŒํฌFastAPI์˜ ๊ธฐ๋ฐ˜ ๋ผˆ๋Œ€
UvicornASGI ์„œ๋ฒ„, FastAPI ์‹คํ–‰ ์„œ๋ฒ„FastAPI๋ฅผ ์‹คํ–‰์‹œ์ผœ์ฃผ๋Š” ์„œ๋ฒ„
Gunicorn๋ฉ€ํ‹ฐ ํ”„๋กœ์„ธ์Šค WSGI/ASGI ์„œ๋ฒ„Uvicorn๊ณผ ์กฐํ•ฉํ•˜์—ฌ ์šด์˜
FastAPIStarlette ๊ธฐ๋ฐ˜ ์ตœ์‹  API ํ”„๋ ˆ์ž„์›Œํฌ์‹ค์ œ API ์ž‘์„ฑ ์œ„์น˜

FastAPI ์‹คํ–‰ ์˜ˆ์‹œ

๊ฐœ๋ฐœ(๋กœ์ปฌ)
uvicorn main:app --reload
python -m fastapi dev app/main.py
์šด์˜(๋ฐฐํฌ)
gunicorn -k uvicorn.workers.UvicornWorker main:app

Footnotes

  1. Python ์›น ์„œ๋ฒ„์™€ ์›น ์•ฑ(ํ”„๋ ˆ์ž„์›Œํฌ)์„ ์—ฐ๊ฒฐํ•ด์ฃผ๋Š” ๋™๊ธฐ ์ธํ„ฐํŽ˜์ด์Šค โ†ฉ