Skip to content

๋ฒค์น˜๋งˆํฌ

๋…๋ฆฝ์ ์ธ TechEmpower ๋ฒค์น˜๋งˆํฌ์— ๋”ฐ๋ฅด๋ฉด Uvicorn์—์„œ ์‹คํ–‰๋˜๋Š” FastAPI ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๊ฐ€์žฅ ๋น ๋ฅธ Python ํ”„๋ ˆ์ž„์›Œํฌ ์ค‘ ํ•˜๋‚˜๋กœ Starlette๊ณผ Uvicorn ๋‹ค์Œ์œผ๋กœ ๋†’์€ ์ˆœ์œ„์ž…๋‹ˆ๋‹ค. (FastAPI์—์„œ ๋‚ด๋ถ€์ ์œผ๋กœ ์‚ฌ์šฉ). (*)

๊ทธ๋Ÿฌ๋‚˜ ๋ฒค์น˜๋งˆํฌ๋ฅผ ํ™•์ธํ•˜๊ณ  ๋น„๊ตํ•  ๋•Œ ๋‹ค์Œ ์‚ฌํ•ญ์„ ์—ผ๋‘์— ๋‘์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋ฒค์น˜๋งˆํฌ ๋ฐ ์†๋„

๋ฒค์น˜๋งˆํฌ๋ฅผ ํ™•์ธํ•  ๋•Œ ์„œ๋กœ ๋‹ค๋ฅธ ์œ ํ˜•์˜ ์—ฌ๋Ÿฌ ๋„๊ตฌ๋ฅผ ๋™๋“ฑํ•˜๊ฒŒ ๋น„๊ตํ•˜๋Š” ๊ฒƒ์ด ์ผ๋ฐ˜์ ์ž…๋‹ˆ๋‹ค.

ํŠนํžˆ (๋‹ค๋ฅธ ๋งŽ์€ ๋„๊ตฌ ์ค‘์—์„œ) Uvicorn, Starlette ๋ฐ FastAPI๋ฅผ ํ•จ๊ป˜ ๋น„๊ตํ•˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ•์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

๋„๊ตฌ๋กœ ๋ฌธ์ œ๋ฅผ ๊ฐ„๋‹จํ•˜๊ฒŒ ํ•ด๊ฒฐํ• ์ˆ˜๋ก ๋” ๋‚˜์€ ์„ฑ๋Šฅ์„ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋Œ€๋ถ€๋ถ„์˜ ๋ฒค์น˜๋งˆํฌ๋Š” ๋„๊ตฌ์—์„œ ์ œ๊ณตํ•˜๋Š” ์ถ”๊ฐ€ ๊ธฐ๋Šฅ์„ ํ…Œ์ŠคํŠธํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๊ณ„์ธต ๊ตฌ์กฐ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • Uvicorn: ASGI ์„œ๋ฒ„
  • Starlette: (Uvicorn ์‚ฌ์šฉ) ์›น ๋งˆ์ดํฌ๋กœํ”„๋ ˆ์ž„์›Œํฌ

    • FastAPI: (Starlette ์‚ฌ์šฉ) API ๊ตฌ์ถ•, ๋ฐ์ดํ„ฐ ๊ฒ€์ฆ ๋“ฑ์„ ์œ„ํ•œ ๋ช‡ ๊ฐ€์ง€ ์ถ”๊ฐ€ ๊ธฐ๋Šฅ์ด ์žˆ๋Š” API ๋งˆ์ดํฌ๋กœํ”„๋ ˆ์ž„์›Œํฌ
  • Uvicorn:

  • ์„œ๋ฒ„ ์ž์ฒด๋ฅผ ์ œ์™ธํ•˜๊ณ  ์ถ”๊ฐ€ ์ฝ”๋“œ๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์ตœ๊ณ ์˜ ์„ฑ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
  • Uvicorn์—์„œ ์ง์ ‘ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ฆ‰, ์‚ฌ์šฉ์ž์˜ ์ฝ”๋“œ์—๋Š” ์ ์–ด๋„ Starlette(๋˜๋Š” FastAPI)์—์„œ ์ œ๊ณตํ•˜๋Š” ๋ชจ๋“  ์ฝ”๋“œ๊ฐ€ ํฌํ•จ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ฒŒ ํ•˜๋ฉด ์ตœ์ข… ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์€ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์•ฑ ์ฝ”๋“œ์™€ ๋ฒ„๊ทธ๋ฅผ ์ตœ์†Œํ™”ํ•˜๋Š” ๊ฒƒ๊ณผ ๋™์ผํ•œ ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ๊ฐ–๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
  • Uvicorn์„ ๋น„๊ตํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด Daphne, Hypercorn, uWSGI ๋“ฑ์˜ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ ์„œ๋ฒ„์™€ ๋น„๊ตํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.
  • Starlette:
  • Uvicorn ๋‹ค์Œ์œผ๋กœ ์ตœ๊ณ ์˜ ์„ฑ๋Šฅ์„ ๋ณด์ž…๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ Starlette๋Š” Uvicorn์„ ์‚ฌ์šฉํ•˜์—ฌ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋” ๋งŽ์€ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— Uvicorn๋ณด๋‹ค ๋Š๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๊ทธ๋Ÿฌ๋‚˜ ๊ฒฝ๋กœ ๋“ฑ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋Š” ๋ผ์šฐํŒ…์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ„๋‹จํ•œ ์›น ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ๋Š” ๋„๊ตฌ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
  • Starlette์„ ๋น„๊ตํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด Sanic, Flask, Django ๋“ฑ์˜ ์›น ํ”„๋ ˆ์ž„์›Œํฌ(๋˜๋Š” ๋งˆ์ดํฌ๋กœํ”„๋ ˆ์ž„์›Œํฌ)์™€ ๋น„๊ตํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.
  • FastAPI:
  • Starlette์ด Uvicorn์„ ์‚ฌ์šฉํ•˜์—ฌ ๋น ๋ฅธ ์†๋„๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ FastAPI๋Š” Starlette์„ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ ๋ฌด์ฒ™ ๋น ๋ฅธ ์†๋„๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
  • FastAPI๋Š” Starlette์— ์ถ”๊ฐ€์ ์œผ๋กœ ๋” ๋งŽ์€ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๊ทธ ๊ธฐ๋Šฅ๋“ค์€ ๋ฐ์ดํ„ฐ ๊ฒ€์ฆ ๋ฐ ์ง๋ ฌํ™”์™€ ๊ฐ™์ด API๋ฅผ ๊ตฌ์ถ•ํ•  ๋•Œ ๊ฑฐ์˜ ๋งค๋ฒˆ ํ•„์š”ํ•œ ๊ฒƒ๋“ค ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ทธ๊ฒƒ๋“ค์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ฌด๋ฃŒ๋กœ ์ž๋™ ๋ฌธ์„œ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค (์ž๋™ ๋ฌธ์„œ๋Š” ์‹คํ–‰ ์ค‘์ธ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์— ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜์ง€ ์•Š์œผ๋ฉฐ ์‹œ์ž‘ ์‹œ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค).
  • FastAPI๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  Starlette (๋˜๋Š” Sanic, Flask, Responder ๋“ฑ๊ณผ ๊ฐ™์€ ๋‹ค๋ฅธ ๋„๊ตฌ) ๋ฅผ ์ง์ ‘ ์‚ฌ์šฉํ•œ ๊ฒฝ์šฐ ๋ชจ๋“  ๋ฐ์ดํ„ฐ ๊ฒ€์ฆ ๋ฐ ์ง๋ ฌํ™”๋ฅผ ์ง์ ‘ ๊ตฌํ˜„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ตœ์ข… ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์€ FastAPI๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌ์ถ•๋œ ๊ฒƒ๊ณผ ๋™์ผํ•œ ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ๊ฐ–๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ, ๋ฐ์ดํ„ฐ ๊ฒ€์ฆ ๋ฐ ์ง๋ ฌํ™”๋Š” ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์—์„œ ์ž‘์„ฑ๋œ ์ฝ”๋“œ ์ค‘ ๊ฐ€์žฅ ๋งŽ์€ ์–‘์„ ์ฐจ์ง€ํ•ฉ๋‹ˆ๋‹ค.
  • ๋”ฐ๋ผ์„œ FastAPI๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐœ๋ฐœ ์‹œ๊ฐ„, ๋ฒ„๊ทธ, ์ฝ”๋“œ ์–‘์„ ์ ˆ์•ฝํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ์™€ ๋™์ผํ•˜๊ฑฐ๋‚˜ ๋” ๋‚˜์€ ์„ฑ๋Šฅ์„ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • FastAPI๋ฅผ ๋น„๊ตํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด Flask-apispec, NestJS, Molten ๋“ฑ๊ณผ ๊ฐ™์€ ๋ฐ์ดํ„ฐ ๊ฒ€์ฆ, ์ง๋ ฌํ™” ๋ฐ ๋ฌธ์„œํ™”๋ฅผ ์ œ๊ณตํ•˜๋Š” ์›น ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ ํ”„๋ ˆ์ž„์›Œํฌ (๋˜๋Š” ๋„๊ตฌ ์ง‘ํ•ฉ) ์™€ ๋น„๊ตํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.