Flask와 FastAPI는

Hyunwoo·2025년 4월 7일

Flask와 FastAPI는 둘 다 파이썬으로 웹 애플리케이션과 API를 만들기 위한 웹 프레임워크이지만, 설계 철학, 성능, 주요 기능 등에서 중요한 차이점들이 있습니다.

https://www.youtube.com/watch?v=Un4Q2AVjW8g

다음은 주요 차이점입니다.

1. 성능 및 비동기 지원 (Performance & Async Support)

  • FastAPI:
    • 매우 높은 성능: Node.js나 Go와 비슷한 수준의 성능을 목표로 설계되었습니다.
    • ASGI 기반: 비동기 서버 게이트웨이 인터페이스(ASGI)를 기반으로 구축되어, async/await 문법을 사용한 비동기 코드 작성을 네이티브하게 지원합니다. 이는 I/O 바운드 작업(네트워크 요청, 데이터베이스 쿼리 등)이 많은 애플리케이션에서 뛰어난 성능을 발휘합니다.
    • Starlette과 Pydantic 기반: 내부적으로 고성능 ASGI 프레임워크인 Starlette과 데이터 유효성 검사 라이브러리인 Pydantic을 사용하여 성능과 개발 편의성을 높였습니다.
  • Flask:
    • WSGI 기반: 전통적인 웹 서버 게이트웨이 인터페이스(WSGI)를 기반으로 합니다. 기본적으로 동기식으로 동작합니다.
    • 비동기 지원 추가: Flask 2.0 버전부터 async/await를 지원하지만, FastAPI처럼 프레임워크 자체가 비동기 우선으로 설계된 것은 아닙니다. 비동기 기능을 활용하려면 Uvicorn, Hypercorn 같은 ASGI 서버나 Gunicorn의 특정 워커(예: gevent) 설정이 필요할 수 있습니다.
    • 성능: 일반적인 웹 애플리케이션에는 충분하지만, 비동기 I/O 처리가 중요한 고성능 API 환경에서는 FastAPI보다 성능이 떨어질 수 있습니다.

2. 데이터 유효성 검사 및 직렬화 (Data Validation & Serialization)

  • FastAPI:
    • Pydantic 내장: 파이썬 타입 힌트(Type Hints)를 활용하여 자동으로 요청/응답 데이터의 유효성을 검사하고 직렬화/역직렬화합니다. 이는 코드의 안정성을 높이고 개발 시간을 단축시키는 핵심 기능입니다.
    • 개발자는 Pydantic 모델을 정의하기만 하면 FastAPI가 알아서 처리해 줍니다.
  • Flask:
    • 내장 기능 없음: 기본적으로 데이터 유효성 검사나 직렬화 기능이 내장되어 있지 않습니다.
    • 확장 라이브러리 필요: Marshmallow, Flask-RESTX, Flask-Pydantic 등의 외부 라이브러리를 추가로 설치하고 설정해야 합니다.

3. API 문서 자동 생성 (Automatic API Documentation)

  • FastAPI:
    • 자동 생성: Pydantic 모델과 타입 힌트를 기반으로 자동으로 OpenAPI (이전 Swagger) 및 ReDoc 문서를 생성해 줍니다. /docs/redoc 경로로 접속하면 상호작용 가능한 API 문서를 바로 확인할 수 있습니다. 이는 API 개발 및 협업에 매우 유용합니다.
  • Flask:
    • 내장 기능 없음: API 문서를 생성하려면 Flask-RESTX, Flasgger, apispec 등의 확장 라이브러리를 사용해야 하며, 수동 설정이 더 많이 필요합니다.

4. 타입 힌트 의존성 (Type Hint Dependency)

  • FastAPI:
    • 핵심 기능: 파이썬 타입 힌트를 적극적으로 활용하며, 이것이 데이터 검증, 직렬화, 문서 자동 생성의 기반이 됩니다. 타입 힌트에 익숙해야 제대로 활용할 수 있습니다.
  • Flask:
    • 선택 사항: 타입 힌트 사용이 강제되지 않습니다. 전통적인 파이썬 코드 스타일로도 개발이 가능합니다.

5. 프레임워크 철학 (Framework Philosophy)

  • FastAPI:
    • API 우선: 이름에서 알 수 있듯이 API 개발에 매우 특화되어 있으며, 현대적인 API 구축에 필요한 기능(비동기, 데이터 검증, 문서화 등)을 기본으로 제공합니다.
  • Flask:
    • 마이크로 프레임워크: 핵심 기능(라우팅, 요청/응답 처리)만 제공하고 나머지는 개발자가 필요한 확장을 선택하여 추가하는 방식입니다. 유연성이 높지만, 기능을 추가하려면 직접 찾아 설정해야 합니다. 웹 애플리케이션 전반(템플릿 렌더링 포함)에 걸쳐 사용될 수 있습니다.

6. 생태계 및 커뮤니티 (Ecosystem & Community)

  • FastAPI:
    • 비교적 최신 프레임워크지만 매우 빠르게 성장하고 있으며, 특히 API 개발 커뮤니티에서 인기가 높습니다.
  • Flask:
    • 오래되고 성숙한 프레임워크로, 방대한 커뮤니티와 수많은 확장 라이브러리, 풍부한 자료를 가지고 있습니다.

요약:

특징FlaskFastAPI
주요 용도웹 앱, 간단한 API, 프로토타이핑고성능 API, 마이크로서비스
성능좋음 (WSGI), 고부하 I/O 시 상대적 약점매우 높음 (ASGI), 고부하 I/O 처리 탁월
비동기 지원추가됨 (Flask 2.0+), 네이티브 설계 아님내장, 비동기 우선 설계 (Async First)
데이터 유효성 검사확장 라이브러리 필요 (e.g., Marshmallow)내장 (Pydantic 기반, 자동)
API 문서화확장 라이브러리 필요 (e.g., Flask-RESTX)자동 생성 (OpenAPI/Swagger, ReDoc)
타입 힌트선택 사항핵심 기능
서버 인터페이스WSGIASGI
학습 곡선쉬움 (기본), 확장 추가 시 복잡도 증가쉬움 (타입 힌트/비동기 익숙 시), 기능 풍부
생태계매우 성숙하고 넓음빠르게 성장 중, API 중심

언제 무엇을 선택해야 할까?

  • Flask 선택:
    • 전통적인 웹 애플리케이션(서버 사이드 렌더링 포함)을 만들 때
    • 간단한 API나 프로토타입을 빠르게 만들고 싶을 때
    • 프레임워크의 유연성을 중요하게 생각하고 필요한 기능을 직접 선택하고 싶을 때
    • 성숙하고 방대한 생태계와 자료가 필요할 때
  • FastAPI 선택:
    • 고성능 API 서버가 필요할 때
    • 비동기 처리가 중요한 애플리케이션을 만들 때
    • 타입 힌트를 통한 코드 안정성과 자동 데이터 검증/직렬화를 원할 때
    • API 문서 자동 생성이 중요할 때
    • 현대적인 API 개발 방식을 선호할 때
profile
현우

0개의 댓글