개요

FastAPIPython 기반의 고성능 비동기 웹 프레임워크로, **타입 힌트(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 프레임워크 중 최고 수준:

프레임워크언어상대 성능
GinGo매우 빠름
FastAPIPythonPython 최고 수준
ExpressNode.js빠름
FlaskPythonFastAPI의 ~50%
DjangoPythonFastAPI의 ~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

항목FastAPIDjango
접근법최소 구성, API 특화풀배터리, 빠른 시작
ORMSQLAlchemy, SQLModel 선택내장 ORM
성능고성능 (비동기)보통 (동기 기본)
자동 문서OpenAPI 자동 생성DRF Swagger 수동
관리자 패널없음 (별도 구성)/admin 자동 생성
적합API 서버, 마이크로서비스전통적 웹앱, 어드민

장단점

장점:

  • Python 타입 힌트만으로 검증+문서+자동완성 해결
  • 학습 비용 낮음 (Python 개발자라면 즉시 사용)
  • 비동기 성능 우수
  • ML/AI 모델 서빙에 적합 (Python 생태계)

단점:

  • ORM, 관리자 패널 등 Django 수준의 기본 제공 기능 없음
  • 대규모 프로젝트 아키텍처 가이드 부족
  • ASGI 서버(Uvicorn/Gunicorn) 별도 설정 필요

관련 항목