
FastAPI๋ Python์ผ๋ก API ์๋ฒ๋ฅผ ๋ง๋ค๊ธฐ ์ํ ํ๋์ ์ธ ์น ํ๋ ์์ํฌ๋ค.
์ด๋ฆ์ ๋ค์ด์๋ Fast๋ ๋จ์ํ โ์ฑ๋ฅ์ด ๋น ๋ฅด๋คโ๊ฐ ์๋๋ผ,
๐ ์ฆ, FastAPI๋ โ๋ง๋ค๊ธฐ๋ ๋น ๋ฅด๊ณ , ์คํ๋ ๋น ๋ฅธโ ํ๋ ์์ํฌ๋ค
API๊ฐ ๋ญ์ง ๊ฐ์ด ์ ์กํ๋ฉด ๋ ์คํ ๋์ผ๋ก ์๊ฐํ๋ฉด ์ฝ๋ค.
์๋์ด โ๊น์น์ฐ๊ฐ ์ฃผ์ธ์โ๋ผ๊ณ ์ฃผ๋ฌธํ๋ฉด,
์จ์ดํฐ๊ฐ ์ฃผ๋ฐฉ์ ์ ๋ฌํ๊ณ ,
์ฃผ๋ฐฉ์ด ์๋ฆฌํด์,
์จ์ดํฐ๊ฐ ๋ค์ ๊ฐ์ ธ๋ค์ค๋ค.
์ด์ฒ๋ผ API๋ ์์ฒญ๊ณผ ์๋ต์ ์ ๋ฌํ๋ ์ค๊ฐ ์ญํ ์ ํ๋ค.
๐ ์ด โ์ฃผ๋ฌธ โ ์ ๋ฌ โ ์ฒ๋ฆฌ โ ์ ๋ฌโ ๊ตฌ์กฐ๊ฐ ๋ฐ๋ก API์ ํต์ฌ ํ๋ฆ์ด๋ค
FastAPI๋ฅผ ์คํํ๋ ค๋ฉด ์ผ๋จ ์ค์น๊ฐ ํ์ํ๋ค.
๊ทธ๋ฆฌ๊ณ ์ค์น ์ ์ ๊ฑฐ์ ํญ์ ๊ฐ์ด ๋์ค๋ ๋จ์ด๊ฐ ์๋ค.
๐ ๊ฐ์ํ๊ฒฝ(virtual environment).
๊ฐ์ํ๊ฒฝ์ ํ๋ก์ ํธ๋ง๋ค ๋ ๋ฆฝ๋ Python ํจํค์ง ๊ณต๊ฐ์ ๋ง๋ ๋ค.
๊ฐ์ํ๊ฒฝ์ด ์์ผ๋ฉด ์ ์ญ ์ค์น๋ ํจํค์ง๋ค์ด ์๋ก ์ถฉ๋ํด์ ์ด๋ ๋ ๊ฐ์๊ธฐ โ์ด์ ๋๋ ๊ฒ ์ค๋ ์๋จโ ํ์์ด ํฐ์ง๋ค.
๐ ๊ทธ๋์ FastAPI ์์ ์ , ๊ฐ์ํ๊ฒฝ์ ์ฌ์ค์ ํ์๋ค
FastAPI๋ ์ฌ๋ฌ ๋ฐฉ์์ผ๋ก ์ค์นํ ์ ์๋ค. ํ์ง๋ง ์ ๋ฌธ์๋ผ๋ฉด ์๋๊ฐ ๊ฐ์ฅ ๋ฌด๋ํ๋ค.
pip install "fastapi[standard]"
์ฌ๊ธฐ์ [standard]๋ โFastAPI๋ง ์ค์นโ๊ฐ ์๋๋ผ,
๊ฐ๋ฐ์ ์์ฃผ ํ์ํ ๊ตฌ์ฑ ์์๋ฅผ ํจ๊ป ์ค์นํ๋ ์ต์
์ด๋ค.
| ์ค์น ๋ช ๋ น์ด | ํฌํจ ๋ด์ฉ | ์ถ์ฒ ์ํฉ |
|---|---|---|
| pip install "fastapi[standard]" | FastAPI + ๊ฐ๋ฐ์ฉ ๊ธฐ๋ณธ ๋๊ตฌ๋ค | ์ฒ์ ์์ํ ๋ ๊ฐ์ฅ ์ถ์ฒ |
| pip install fastapi | FastAPI๋ง ์ค์น | ์ต์ ์ค์น๋ง ํ์ํ ๋ |
| pip install "fastapi[standard-no-fastapi-cloud-cli]" | ๊ฐ๋ฐ ๋๊ตฌ ํฌํจ (์ผ๋ถ CLI ์ ์ธ) | ํน์ ๊ธฐ๋ฅ์ด ํ์ ์์ ๋ |
FastAPI ํํ ๋ฆฌ์ผ์ ์ฝ๋ ๋ธ๋ก์ ๋๋ถ๋ถ ๋ณต์ฌํด์ ํ์ผ๋ก ์ ์ฅํ๋ฉด ๊ทธ๋๋ก ์คํ ๊ฐ๋ฅํ๊ฒ ์์ฑ๋์ด ์๋ค.
๋จผ์ โFastAPI๊ฐ ์ด๋ค ๋ฐฉ์์ผ๋ก ์คํ๋๋์ง ํ๋ฆโ์ ๋จผ์ ์ก์.
์์ ์ฝ๋๋ฅผ ์คํํ๋ ค๋ฉด ๋จผ์ ํ์ผ์ด ํ์ํ๋ค.
main.py ํ์ผ์ ์์ฑํ๋ค
๐ ์ง๊ธ ๋จ๊ณ์์๋ โ์ฝ๋๋ฅผ ์๋ฒฝํ ์ดํดโํ๋ ๊ฒ๋ณด๋ค
FastAPI ์คํ ํ๋ฆ์ ๋์ผ๋ก ํ์ธํ๋ ๊ฒ ๋ ์ค์ํ๋ค
FastAPI๋ ๊ฐ๋ฐ ์๋ฒ๋ฅผ ๋์ธ ๋ ์๋ ๋ช ๋ น์ด๋ฅผ ๋ง์ด ์ด๋ค.
fastapi dev main.py
์ฌ๊ธฐ์ dev๋ development(๊ฐ๋ฐ)์ ์ฝ์๋ค.
์ฆ โ๊ฐ๋ฐ ๋ชจ๋๋ก ์คํํ๊ฒ ๋คโ๋ผ๋ ๋ป์ด๋ค.
๊ฒ๋ณด๊ธฐ์ โ์๋ฒ๊ฐ ์ผ์ก๋คโ์ง๋ง, ์ค์ ๋ด๋ถ์์ ์ฌ๋ฌ ๋จ๊ณ๊ฐ ์๋ค.
main.py ํ์ผ์ ์ฝ๋๋ค(๋ก๋)app)๋ฅผ ๋ง๋ ๋ค
๐ ํต์ฌ:
FastAPI๋ ํ๋ ์์ํฌ์ด๊ณ
์ค์ ๋ก ์์ฒญ์ ๋ฐ๋ ์ญํ ์ ASGI ์๋ฒ(Uvicorn)๊ฐ ํ๋ค
๋๋ถ๋ถ ๊ฐ๋ฐ ํ๊ฒฝ์์๋ ์ด๋ฐ ์ฃผ์๊ฐ ๋์จ๋ค.
http://127.0.0.1:8000http://127.0.0.1:8000/docsFastAPI์ ์ฅ์ ์ค ํ๋๋ API ๋ฌธ์๋ฅผ ์๋ ์์ฑํด์ค๋ค๋ ์ ์ด๋ค.
๐ ์๋ฒ๋ง ์ผ๋ฉด, ๋ฌธ์๊ฐ ์๋์ผ๋ก ์๊ธด๋ค.
๊ฐ๋ฐ ์๋ฒ๋ฅผ ๋์ฐ๋ฉด ์ฝ์์ ์ฌ๋ฌ ๋ฌธ์ฅ์ด ๋ฌ๋ค. ๋ณดํต ์ด๋ฐ ๊ฒ๋ค์ ๋ณด๊ฒ ๋๋ค:
| ๊ธฐ๋ฅ | ์ค๋ช | ํจ๊ณผ |
|---|---|---|
| ํ์ ์ฒดํฌ | ๋ณ์/์ ๋ ฅ/์ถ๋ ฅ ํ์ ์ ๋ฐํ์ผ๋ก ์ค๋ฅ ๊ฐ์ง | ์คํ ์ ์ ์ค์๋ฅผ ์ก์์ค |
| ์๋์์ฑ | FastAPI๊ฐ ํ์ ํํธ๋ฅผ ์ ๊ทน ํ์ฉ | ์์ฑ ์๋ ์ฆ๊ฐ + ์คํ ๊ฐ์ |
| ์ ์ ์ฝ๋๋ | ๊ฐ์ ๊ธฐ๋ฅ์ ๋ ์งง๊ฒ ํํ | ๊ฐ๋ ์ฑ/์ ์ง๋ณด์ โ |
Python์ ์๋ ํ์ ์ ์ ์จ๋ ๋๋ ์ธ์ด์ง๋ง, FastAPI๋ ํ์ ํํธ๋ฅผ ์ ๊ทน์ ์ผ๋ก ์ฌ์ฉํ๋ค.
์๋๋ฉด ํ์ ํํธ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก
์ด๋ฐ ๊ฒ๋ค์ด โ์๋์ผ๋กโ ๋๊ธฐ ๋๋ฌธ์ด๋ค.
# ํ์
ํํธ ์์
def greet(name):
return "์๋
ํ์ธ์, " + name
# ํ์
ํํธ ์ฌ์ฉ
def greet(name: str) -> str:
return "์๋
ํ์ธ์, " + name
๐ ํ์
ํํธ๋ โ๊ท์ฐฎ์ ๋ฌธ๋ฒโ์ด ์๋๋ผ
FastAPI์ ์๋ํ ๊ธฐ๋ฅ์ ๋์ด๋ด๋ ํต์ฌ ์ฌ๋ฃ๋ค
# main.py
# 1. FastAPI ํด๋์ค๋ฅผ ๋ถ๋ฅด๊ธฐ
from fastapi import FastAPI
# 2. FastAPI ์ธ์คํด์ค๋ฅผ ์์ฑ
# ์ด app ๊ฐ์ฒด๊ฐ API ์๋ฒ์ ํต์ฌ์
๋๋ค
app = FastAPI()
# 3. ๊ฒฝ๋ก(path)์ ์์
(operation)์ ์ ์
# @app.get("/")๋ "๋ฃจํธ ๊ฒฝ๋ก์ GET ์์ฒญ์ด ์ค๋ฉด"์ด๋ผ๋ ์๋ฏธ
@app.get("/")
async def root():
# 4. ํด๋ผ์ด์ธํธ์๊ฒ ๋ณด๋ผ ์๋ต์ ๋ฐํํฉ๋๋ค
# ๋์
๋๋ฆฌ๋ ์๋์ผ๋ก JSON ํ์์ผ๋ก ๋ณํ๋ฉ๋๋ค
return {"message": "Hello World"}
# fastapi dev: ๊ฐ๋ฐ ๋ชจ๋๋ก ์๋ฒ ์คํ
# main.py: ์คํํ ํ์ผ ์ด๋ฆ
# ๊ฐ๋ฐ ๋ชจ๋์์๋ ์ฝ๋ ๋ณ๊ฒฝ ์ ์๋ฒ๊ฐ ์๋์ผ๋ก ์ฌ์์๋จ.
fastapi dev main.py

์ฌ๊ธฐ์ 127.0.0.1์ localhost๋ฅผ ์๋ฏธํ๋ฉฐ 8000์ ํฌํธ๋ฒํธ์ด๋ค
http://127.0.0.1:8000์ ์ ์ํ๋ฉด ๋ค์๊ณผ ๊ฐ์ JSON ์๋ต์ ๋ณผ ์ ์๋ค.
{"message": "Hello World"}
fastapi dev main.py๋ฅผ ์คํํ๋ฉด Uvicorn ์๋ฒ๊ฐ ๋จ๊ณ ์์ฒญ์ ๋ฐ๋๋ค/docs์์ ์๋ ๋ฌธ์(Swagger UI)๋ฅผ ๋ฐ๋ก ํ์ธํ ์ ์๋ค