๋ฒค์น๋งํฌ¶
๋ ๋ฆฝ์ ์ธ 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 ๋ฑ๊ณผ ๊ฐ์ ๋ฐ์ดํฐ ๊ฒ์ฆ, ์ง๋ ฌํ ๋ฐ ๋ฌธ์ํ๋ฅผ ์ ๊ณตํ๋ ์น ์์ฉ ํ๋ก๊ทธ๋จ ํ๋ ์์ํฌ (๋๋ ๋๊ตฌ ์งํฉ) ์ ๋น๊ตํ๋ ๊ฒ์ด ์ข์ต๋๋ค.