
주요 특징
빠른 성능: Starlette(ASGI)와 Pydantic을 기반으로 하여 매우 빠른 요청 처리 속도를 제공
자동 문서화: Swagger UI와 ReDoc을 통한 API 문서 자동 생성
타입 힌트 기반 개발: Python의 타입 힌트를 활용해 데이터 검증 및 직렬화 자동 처리
비동기 지원: async/await 문법을 통한 비동기 처리 가능
자동 문서화 덕분에 프론트엔드/백엔드 협업 시 API 스펙 공유가 용이
데이터 검증 로직을 별도로 작성할 필요 없이 Pydantic 모델로 처리 가능
외부 API 호출, DB 쿼리 등 I/O 작업이 많은 서비스에서 성능 향상
예: 채팅 서버, 실시간 데이터 처리 API
경량 프레임워크라서 컨테이너(Docker) 배포에 유리
API Gateway와 함께 사용하기 좋음
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
# 데이터 모델 정의
class Item(BaseModel):
name: str
price: float
is_offer: bool = None
# GET 요청 예시
@app.get("/")
def read_root():
return {"message": "Hello FastAPI"}
# Path Parameter 예시
@app.get("/items/{item_id}")
def read_item(item_id: int, q: str = None):
return {"item_id": item_id, "q": q}
# POST 요청 예시
@app.post("/items/")
def create_item(item: Item):
return {"item": item}
uvicorn main:app --reload
main:app → main.py 파일의 app 객체
--reload → 코드 변경 시 자동 재시작
장점
개발 속도 빠름
자동 문서화로 협업 효율 ↑
비동기 지원으로 성능 ↑
타입 기반 데이터 검증
단점
Django처럼 ORM, Admin 등 풀스택 기능은 없음
대규모 프로젝트에서는 구조 설계 필요
ASGI 기반이므로 WSGI 환경과 호환성 제한
데이터 검증: Pydantic 모델을 적극 활용하되, 복잡한 검증 로직은 별도 함수로 관리
비동기 처리: DB 드라이버나 외부 API 라이브러리가 비동기를 지원하는지 확인 필요
배포 환경: 프로덕션에서는 uvicorn 단독 실행보다 gunicorn + uvicorn workers 조합 권장
실무에서는 FastAPI를 API Gateway 뒤에서 마이크로서비스로 운영하거나, 서버리스 환경(AWS Lambda, Azure Functions)에서 경량 API로 활용하는 경우가 많습니다.