[Python] FastAPI: 현대적이고 빠른 웹 프레임워크
ㅁ 들어가며
동년배 친구가 사업을 구상하면서 빠른 백엔드 개발을 위해 FastAPI를 사용하고 있었다.
FastAPI는 Python 3.6+ 버전을 기반으로 한 현대적이고 빠른 웹 프레임워크다.
API를 구축하는데 특화되어 있으며, 높은 성능과 개발 속도를 자랑한다.
이 글에서는 FastAPI의 주요 장점과 기본적인 사용 방법에 대해 알아보겠다.
ㅁ FastAPI의 주요 장점
ㅇ 빠른 성능
FastAPI는 Starlette와 Pydantic을 기반으로 하여 NodeJS 및 Go와 대등한 수준의 매우 높은 성능을 제공한다.
ㅇ 빠른 코딩
타입 힌트를 활용한 자동 문서화, 자동 검증 등의 기능으로 개발 속도가 매우 빠르다.
ㅇ 적은 버그
강력한 타입 체크와 자동 검증 기능으로 인해 버그 발생 가능성이 낮다.
ㅇ 직관적
Python 타입 힌트를 사용하여 코드가 직관적이고 이해하기 쉽다.
ㅇ 쉬운 학습
문서화가 잘 되어 있어 학습 곡선이 낮다.
ㅇ 자동 문서화
Swagger UI와 ReDoc을 통한 자동 대화형 API 문서를 제공한다.
ㅇ 표준 기반
OpenAPI(Swagger)와 JSON Schema 등 개방형 표준을 따른다.
ㅁ FastAPI 사용 방법
pip install fastapi
pip install uvicorn
ㅇ FastAPI와 ASGI 서버인 Uvicorn을 설치한다.
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
async def root():
return {"message": "Hello World"}
ㅇ 기본 애플리케이션 생성
ㅇ main.py로 간단한 FastAPI 애플리케이션을 생성한다.
uvicorn main:app --reload
ㅇ 서버 실행
ㅇ Uvicorn을 사용하여 서버를 실행한다.
ㅇ main: main.py 파일 (파이썬 "모듈").
ㅇ app: the object created inside of main.py with the line app = FastAPI()
ㅇ --reload: 코드가 변경된 후 서버 재시작하기. 개발환경에서만 사용
from pydantic import BaseModel
class Item(BaseModel):
name: str
price: float
is_offer: bool = None
@app.post("/items/")
async def create_item(item: Item):
return item
ㅇ 요청 본문
ㅇ Pydantic 모델을 사용하여 요청 본문을 정의하고 검증할 수 있다.
@app.get("/items/{item_id}")
async def read_item(item_id: int):
return {"item_id": item_id}
ㅇ 경로 매개변수
ㅇ URL에서 매개변수를 받아 사용할 수 있다.
@app.get("/items/")
async def read_item(skip: int = 0, limit: int = 10):
return {"skip": skip, "limit": limit}
ㅇ 쿼리 매개변수
ㅇ URL의 쿼리 문자열에서 매개변수를 받을 수 있다.
ㅇ 문서 확인
ㅇ 서버를 실행한 후, /docs
또는 /redoc
경로로 접속하면 자동 생성된 API 문서를 확인할 수 있다.
from typing import Union
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
class Item(BaseModel):
name: str
price: float
is_offer: Union[bool, None] = None
@app.get("/")
def read_root():
return {"Hello": "World"}
@app.get("/items/{item_id}")
def read_item(item_id: int, q: Union[str, None] = None):
return {"item_id": item_id, "q": q}
@app.put("/items/{item_id}")
def update_item(item_id: int, item: Item):
return {"item_name": item.name, "item_id": item_id}
ㅇ 최종 소스
ㅁ 마무리
FastAPI는 현대적인 Python 웹 개발의 강력한 도구다. 쉽고 빠르게 API 개발이 가능하다. 특히 타입 힌트는 개발자에게 꼭 필요한 기능으로 자동 문서화와 검증 기능은 개발 생산성을 크게 향상시킨다.
FastAPI를 사용하면 복잡한 API도 쉽고 빠르게 개발할 수 있으며, 자동 생성되는 대화형 문서는 API 사용자들에게 큰 도움이 된다. Python을 사용하는 백엔드 개발자라면 FastAPI를 한번 시도해 볼 만한 가치가 충분히 있다.