
| 항목 | Flask | FastAPI |
|---|---|---|
| 기반 | WSGI(Web Server Gateway Interface) | ASGI(Asynchronous Server Gateway Interface) |
| 성능 | 동기 처리 중심, 비동기 지원 제한 | 비동기 처리 지원(async/await), 고성능 |
| 문서화 | 자동 문서화 없음 → Swagger 등 직접 설정 필요 | Swagger UI, ReDoc 자동 생성 |
| 데이터 검증 | 수동 처리 (request 데이터 직접 검증) | Pydantic 기반 자동 검증 |
| 학습 곡선 | 간단, 직관적 | Python 타입 힌트 이해 필요 |
| 생태계 | 오래된 프레임워크, 라이브러리 풍부 | 최신 프레임워크, 빠르게 성장 중 |
| 배포 | Gunicorn, uWSGI 등 WSGI 서버 | Uvicorn, Hypercorn 등 ASGI 서버 |
from flask import Flask, request, jsonify
app = Flask(__name__)
@app.route("/predict", methods=["POST"])
def predict():
data = request.get_json()
result = model.predict(data["features"])
return jsonify({"prediction": result})
if __name__ == "__main__":
app.run(host="0.0.0.0", port=5000)
장점: 직관적, 빠르게 시작 가능
단점: 데이터 검증, 문서화, 비동기 처리 직접 구현 필요
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
class PredictRequest(BaseModel):
features: list[float]
class PredictResponse(BaseModel):
prediction: float
@app.post("/predict", response_model=PredictResponse)
async def predict(req: PredictRequest):
result = model.predict(req.features)
return {"prediction": result}
장점
PredictRequest로 데이터 자동 검증
/docs 접속 시 Swagger UI 자동 생성
비동기 처리(async def)로 성능 향상 가능
단점
장점
오래된 프레임워크 → 레퍼런스와 예제 풍부
간단한 API 서버에 적합
기존 레거시 시스템과 호환성 높음
단점
비동기 처리 어려움 → 대규모 트래픽에 한계
자동 문서화 없음 → API 명세 관리 부담
데이터 검증 로직을 직접 작성해야 함
장점
비동기 지원 → 외부 API 호출, DB I/O 성능 향상
자동 문서화 → 협업 효율 ↑
타입 기반 데이터 검증 → 안정성 ↑
최신 Python 문법 적극 활용
단점
상대적으로 생태계가 신생 → 일부 라이브러리 호환성 이슈 가능
타입 힌트와 Pydantic 모델 작성이 번거로울 수 있음
소규모, 간단한 API → Flask
(빠른 개발, 학습 곡선 낮음)
대규모, 비동기 처리 필요, 협업 문서화 중요 → FastAPI
(성능, 유지보수, 자동 문서화)
현재 Flask로 작성된 머신러닝 API를 FastAPI로 변환하면
성능 향상: 비동기 처리로 응답 속도 개선
문서 자동화: /docs로 API 스펙 공유
데이터 안정성: 잘못된 요청 데이터 자동 차단