๐ ์ฝ 1๋ถ ์ฝ๋ ๋ฐ ์์๋ฉ๋๋ค
โ ํ๋ ์น ๊ฐ๋ฐ์ ์ํ ์ด๊ณ ์ Python ํ๋ ์์ํฌ ์๊ฐ
“๋น ๋ฅด๊ณ ๊ฐ๊ฒฐํ๋ฉฐ ๊ฐ๋ ฅํ๋ค!” FastAPI๋ ํ์ด์ฌ์ผ๋ก ์น ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ API ์๋ฒ๋ฅผ ๋ง๋ค๊ณ ์ ํ ๋, ๊ฐ์ฅ ๊ฐ๊ด๋ฐ๋ ํ๋ ์์ํฌ ์ค ํ๋์ ๋๋ค. ์ด ๊ธ์์๋ FastAPI์ ๊ฐ๋ ๊ณผ ํน์ง, ๊ทธ๋ฆฌ๊ณ ๊ธฐ์กด ํ๋ ์์ํฌ๋ค๊ณผ์ ์ฐจ์ด์ ์ ์์๋ณด๋ฉฐ ์ ์ง๊ธ FastAPI๋ฅผ ๊ณต๋ถํด์ผ ํ๋์ง ์ค๋ช ํฉ๋๋ค.
๐ FastAPI ๋?
FastAPI๋ Python 3.6 ์ด์์ ๊ธฐ๋ฐ์ผ๋ก ๋ง๋ค์ด์ง ๋น๋๊ธฐ ์น ํ๋ ์์ํฌ์ ๋๋ค. RESTful API ์๋ฒ๋ฅผ ๋งค์ฐ ๋น ๋ฅด๊ณ ์ง๊ด์ ์ผ๋ก ๋ง๋ค ์ ์๋๋ก ์ค๊ณ๋์์ต๋๋ค.
FastAPI์ ํต์ฌ ์ฒ ํ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- ๋น ๋ฅธ ๊ฐ๋ฐ ์๋ (Fast to code)
- ๋์ ์ฑ๋ฅ (High performance)
- ์๋ ๋ฌธ์ํ (Automatic Docs)
- ๊ฐ๋ ฅํ ํ์ ํํธ ๊ธฐ๋ฐ ๊ฒ์ฆ (Type hints + Pydantic)
์ด ํ๋ ์์ํฌ๋ ์ค์ ๋ก “๋น ๋ฅธ ๊ฐ๋ฐ, ์ ์ ๋ฒ๊ทธ”๋ฅผ ๊ฐ๋ฅํ๊ฒ ํด์ฃผ๋ฉฐ, ํนํ API ๊ธฐ๋ฐ ๋ฐฑ์๋ ์๋ฒ๋ฅผ ๊ตฌ์ถํ ๋ ๊ทธ ์ง๊ฐ๋ฅผ ๋ฐํํฉ๋๋ค.
โก๏ธ FastAPI ์ ์ฃผ์ ํน์ง
1. ๋น๋๊ธฐ ์ง์ (Asynchronous Support)
FastAPI๋ Python์ async
/await
๋ฌธ๋ฒ์ ์์ฐ์ค๋ฝ๊ฒ ์ง์ํฉ๋๋ค. ์ด๋ฅผ ํตํด, ๋๊ท๋ชจ ํธ๋ํฝ ํ๊ฒฝ์์๋ ๋์ ์ฑ๋ฅ์ ๋ผ ์ ์์ผ๋ฉฐ, I/O ์์
(์: DB ์กฐํ, ์ธ๋ถ API ํธ์ถ ๋ฑ)์ ํจ์จ์ ์ผ๋ก ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
@app.get("/items/{item_id}")
async def read_item(item_id: int):
return {"item_id": item_id}
2. ์๋ ๋ฌธ์ํ
FastAPI๋ ๋ฌธ์๋ฅผ ์๋์ผ๋ก ์์ฑํด์ฃผ๋ ๊ธฐ๋ฅ์ด ํ์ฌ๋์ด ์์ต๋๋ค. ๋ณ๋์ ์ค์ ์์ด๋ OpenAPI ๊ธฐ๋ฐ์ API ๋ฌธ์๋ฅผ ์ ๊ณตํ๋ฉฐ, ์๋ ๋ ๊ฐ์ง ์ธํฐํ์ด์ค๋ฅผ ๊ธฐ๋ณธ ์ ๊ณตํ์ฃ :
- Swagger UI (
/docs
) - ReDoc (
/redoc
)
๐ ๊ฐ๋ฐ์ ์ ์ฅ์์๋ ํ ์คํธ์ ํ์ ์ด ๋๋๋๋ก ์ฌ์์ง๋๋ค!
3. Pydantic ๊ธฐ๋ฐ์ ๋ฐ์ดํฐ ๊ฒ์ฆ
FastAPI๋ Pydantic์ด๋ผ๋ ๋ฐ์ดํฐ ๊ฒ์ฆ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ, ํ์ ํํธ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์๋ ๊ฒ์ฆ ๋ฐ ํ์ฑ์ ์ํํฉ๋๋ค.
from pydantic import BaseModel
class Item(BaseModel):
name: str
price: float
Pydantic์ JSON ๋ฐ์ดํฐ๋ฅผ Python ๊ฐ์ฒด๋ก ๋ณํํ๋ฉด์ ๋์์ ํ์ ์ ์ฒดํฌํด์ค๋๋ค. ๋ฐ์ดํฐ ์ ํจ์ฑ ๊ฒ์ฌ๊ฐ ์๋์ผ๋ก ์ฒ๋ฆฌ๋์ด ๋งค์ฐ ๊ฐ๋ ฅํ์ฃ .
4. IDE ์นํ์ ์ธ ๊ฐ๋ฐ ๊ฒฝํ
FastAPI๋ ํ์ ํํธ๋ฅผ ์ ๊ทน์ ์ผ๋ก ํ์ฉํ๊ธฐ ๋๋ฌธ์, VSCode๋ PyCharm ๊ฐ์ IDE์์ ์๋์์ฑ๊ณผ ํ์ ๊ฒ์ฌ๊ฐ ํ์ํ๊ฒ ๋์ํฉ๋๋ค. ๊ฐ๋ฐ์์ ์์ฐ์ฑ๊ณผ ์ฝ๋ ์์ ์ฑ์ด ๋์์ ์ฌ๋ผ๊ฐ๋๋ค.
๐ฅ FastAPI vs ๋ค๋ฅธ ํ๋ ์์ํฌ
ํญ๋ชฉ | Flask | Django | FastAPI |
---|---|---|---|
๋น๋๊ธฐ ์ง์ | โ ์ ํ์ | โ ๋งค์ฐ ์ ํ์ | โ ์์ ์ง์ |
์๋ ๋ฌธ์ํ | โ ์์ | โ ๋ณ๋ ํจํค์ง ํ์ | โ ๊ธฐ๋ณธ ์ ๊ณต |
๋ฐ์ดํฐ ๊ฒ์ฆ | โ ์๋ ์ฒ๋ฆฌ | โ Form ๊ธฐ๋ฐ | โ Pydantic ๊ธฐ๋ฐ ์๋ ๊ฒ์ฆ |
ํ์ ๊ธฐ๋ฐ ๊ฐ๋ฐ | โ ๋ถ๊ฐ๋ฅ | โ ์ ํ์ | โ ์์ ์ง์ |
์ฑ๋ฅ (Starlette ๊ธฐ์ค) | ์ค | ์ค | ๋์ |
FastAPI๋ ์ฑ๋ฅ ๋ฉด์์๋ Node.js ์์ค์ด๋ฉฐ, ๊ฐ๋ฐ ํธ์์ฑ ๋ฉด์์๋ Django, Flask๋ฅผ ๋ชจ๋ ๋ฐ์ด๋๋ ํ๋์ ์ธ API ์๋ฒ ๊ฐ๋ฐ ํ๊ฒฝ์ ์ ๊ณตํฉ๋๋ค.
๐งโ๐ป FastAPI ๋ฅผ ์ฌ์ฉํ๋ฉด ์ข์ ์ผ์ด์ค
- REST API ๋ฐฑ์๋ ์๋ฒ ๊ตฌ์ถ
- ๋น๋๊ธฐ ์์ ์ด ๋ง์ ์๋น์ค (์ฑํ , ์ค์๊ฐ ํผ๋ ๋ฑ)
- ๋จธ์ ๋ฌ๋ ๋ชจ๋ธ์ ์น์ผ๋ก ์๋นํ ๋ (FastAPI + Uvicorn ์กฐํฉ)
- ๋ง์ดํฌ๋ก์๋น์ค ์ํคํ ์ฒ์์ API Gateway ์ญํ
๐งพ ๋ง๋ฌด๋ฆฌ: ์ FastAPI ์ธ๊ฐ?
FastAPI๋ ๋จ์ํ “๋น ๋ฅธ ์น ํ๋ ์์ํฌ”๊ฐ ์๋๋๋ค. ์์ฐ์ฑ, ์ฑ๋ฅ, ์์ ์ฑ, ํ์ฅ์ฑ์ ๋ชจ๋ ๊ฐ์ถ ์ง์ง ์ค์ฉ์ ์ธ ํ๋ ์์ํฌ์
๋๋ค.
์ง๊ธ์ด์ผ๋ง๋ก Flask๋ Django์์ ํํผํด, FastAPI๋ฅผ ํ์ตํ๊ณ ํ์ฉํด๋ณผ ์ ํธ์ ๊ธฐํ์
๋๋ค.
๋ค์ ํธ์์๋ FastAPI๋ฅผ ์ค์นํ๊ณ , “Hello, FastAPI!”๋ฅผ ์คํํด๋ณด๋ ์ค์ต์ ์งํํ ์์ ์ ๋๋ค.
๐ ์ด์ด์ [2. ๊ฐ๋ฐ ํ๊ฒฝ ์ค์ ] ๋จ๊ณ๋ก ๋์ด๊ฐ๋ด ์๋ค.
FastAPI ๊ณต์ ๋ฌธ์ : https://fastapi.tiangolo.com/ko/
