개요
FastAPI는 Python 기반의 고성능 비동기 웹 프레임워크로, **타입 힌트(Type Hints)**를 활용하여 API를 빠르게 개발하고 OpenAPI 문서를 자동 생성합니다. Node.js, Go 수준의 성능을 Python에서 달성하며, 현대적인 API 서버 개발의 표준으로 자리잡고 있습니다.
- 출시: 2018년 (Sebastián Ramírez)
- 라이선스: MIT
- 웹사이트: https://fastapi.tiangolo.com
- 기반: Starlette (ASGI) + Pydantic (데이터 검증)
핵심 특징
| 특징 | 설명 |
|---|---|
| 타입 힌트 기반 | Python 타입 힌트로 요청/응답 자동 검증 |
| OpenAPI 자동 생성 | Swagger UI (/docs) + ReDoc (/redoc) 자동 제공 |
| 비동기 (async/await) | ASGI 기반, async def로 고성능 비동기 처리 |
| Pydantic 통합 | 데이터 검증, 직렬화, 설정 관리 |
| 의존성 주입 | Depends()로 클린한 의존성 관리 |
| 자동 완성 | 타입 힌트 → IDE 자동 완성 지원 극대화 |
기본 예제
from fastapi import FastAPI, Depends
from pydantic import BaseModel
app = FastAPI()
class Item(BaseModel):
name: str
price: float
is_offer: bool = False
@app.get("/")
async def root():
return {"message": "Hello World"}
@app.get("/items/{item_id}")
async def read_item(item_id: int, q: str | None = None):
return {"item_id": item_id, "q": q}
@app.post("/items/")
async def create_item(item: Item):
return item# 실행
pip install fastapi uvicorn
uvicorn main:app --reload
# 자동 생성 문서 접속
# Swagger UI: http://localhost:8000/docs
# ReDoc: http://localhost:8000/redoc성능 비교
ASGI 서버(Uvicorn) 기반으로 Python 프레임워크 중 최고 수준:
| 프레임워크 | 언어 | 상대 성능 |
|---|---|---|
| Gin | Go | 매우 빠름 |
| FastAPI | Python | Python 최고 수준 |
| Express | Node.js | 빠름 |
| Flask | Python | FastAPI의 ~50% |
| Django | Python | FastAPI의 ~30% |
Pydantic
FastAPI의 데이터 검증 엔진:
from pydantic import BaseModel, Field, EmailStr
class User(BaseModel):
name: str = Field(min_length=1, max_length=50)
email: EmailStr
age: int = Field(ge=0, le=150)
# 자동 검증 — 잘못된 데이터는 422 에러 반환- v2: Rust 코어로 재작성 → 검증 속도 5~50배 향상
- JSON Schema 자동 생성 → OpenAPI 문서에 반영
- 환경변수 설정 관리 (
BaseSettings)
vs Django
| 항목 | FastAPI | Django |
|---|---|---|
| 접근법 | 최소 구성, API 특화 | 풀배터리, 빠른 시작 |
| ORM | SQLAlchemy, SQLModel 선택 | 내장 ORM |
| 성능 | 고성능 (비동기) | 보통 (동기 기본) |
| 자동 문서 | OpenAPI 자동 생성 | DRF Swagger 수동 |
| 관리자 패널 | 없음 (별도 구성) | /admin 자동 생성 |
| 적합 | API 서버, 마이크로서비스 | 전통적 웹앱, 어드민 |
장단점
장점:
- Python 타입 힌트만으로 검증+문서+자동완성 해결
- 학습 비용 낮음 (Python 개발자라면 즉시 사용)
- 비동기 성능 우수
- ML/AI 모델 서빙에 적합 (Python 생태계)
단점:
- ORM, 관리자 패널 등 Django 수준의 기본 제공 기능 없음
- 대규모 프로젝트 아키텍처 가이드 부족
- ASGI 서버(Uvicorn/Gunicorn) 별도 설정 필요