FastAPI로 기존 Flask API 마이그레이션 후기
배경
사내 데이터 처리 API가 Flask로 되어 있었는데, 동시 요청이 늘면서 응답 속도가 느려지는 문제가 있었다. 재택 근무 체제로 전환되면서 API 사용량이 2배 이상 증가했고, 근본적인 개선이 필요했다.
FastAPI를 검토하게 된 이유는 세 가지였다:
- async/await 기반의 비동기 처리
- Pydantic을 통한 자동 validation
- OpenAPI 문서 자동 생성
마이그레이션 과정
기존 Flask 코드:
@app.route('/api/users', methods=['POST'])
def create_user():
data = request.get_json()
if not data.get('email'):
return {'error': 'email required'}, 400
# validation 로직 계속...
return {'id': user_id}, 201
FastAPI로 변경:
from fastapi import FastAPI
from pydantic import BaseModel, EmailStr
class UserCreate(BaseModel):
email: EmailStr
name: str
age: int
@app.post('/api/users')
async def create_user(user: UserCreate):
# validation은 자동 처리됨
return {'id': user_id}
type hint만으로 validation이 끝나니 보일러플레이트 코드가 크게 줄었다.
성능 측정
locust로 부하 테스트를 돌렸다.
- Flask: 평균 응답시간 450ms (100 users)
- FastAPI: 평균 응답시간 180ms (100 users)
단순 비교는 무리가 있지만, 비동기 처리 덕분에 체감 성능은 확실히 개선되었다.
주의사항
- Flask extension들을 그대로 쓸 수 없어서 대체 라이브러리를 찾아야 했다
- async/await에 익숙하지 않은 팀원들을 위한 가이드 문서가 필요했다
- DB 접근도 async driver로 바꿔야 효과를 제대로 볼 수 있다
결론
새 프로젝트라면 FastAPI를 우선 고려할 만하다. type hint 기반 개발이 익숙하다면 러닝 커브도 낮다. 다만 레거시 시스템 마이그레이션은 점진적으로 하는 게 안전하다.