에코프로.AI

[Python 모델 서빙] FastApi vs Flask vs Django 비교 본문

AI Miscellany

[Python 모델 서빙] FastApi vs Flask vs Django 비교

AI_HitchHiker 2024. 12. 15. 15:31

 

데이터 분석 결과를 웹으로 서빙할 때 FastAPI, Flask, Django는 각각 고유한 특징과 장단점을 가지고 있습니다. 이들을 비교해보겠습니다.


FastAPI

FastAPI는 현대적이고 빠른 (고성능) 웹 프레임워크로, Python 3.6+ 버전의 표준 타입 힌트에 기반하여 API를 구축하는 데 사용됩니다

  • 장점
    • 높은 성능: 비동기 처리를 지원하여 매우 빠른 속도를 제공합니다
    • 자동 API 문서화: Swagger UI를 통해 API 문서를 자동으로 생성합니다
    • 타입 힌팅: 코드의 가독성을 높이고 개발자 간 협업을 용이하게 합니다
    • 간편한 데이터 검증: Pydantic을 사용하여 데이터 모델을 쉽게 정의하고 검증할 수 있습니다
  • 단점
    • 상대적으로 새로운 프레임워크로, 커뮤니티와 리소스가 다른 프레임워크에 비해 적을 수 있습니다

Flask

Flask는 간결하고 유연한 마이크로 웹 프레임워크입니다

  • 장점
    • 간단하고 직관적인 API로 빠른 개발이 가능합니다
    • 유연성이 높아 개발자가 원하는 대로 구조를 설계할 수 있습니다
    • 작은 프로젝트나 프로토타입 개발에 적합합니다
  • 단점
    • 대규모 프로젝트에서는 구조화에 추가적인 노력이 필요할 수 있습니다
    • 기본적으로 제공되는 기능이 적어 추가 라이브러리 설치가 필요할 수 있습니다

 

Django

Django는  풀스택 웹 프레임워크로, 많은 기능을 기본적으로 제공합니다

  • 장점
    • 강력한 ORM을 제공하여 데이터베이스 작업을 쉽게 할 수 있습니다
    • 관리자 인터페이스가 기본으로 제공되어 데이터 관리가 용이합니다
    • 보안 기능이 내장되어 있어 안전한 웹 애플리케이션 개발이 가능합니다
  • 단점
    • 학습 곡선이 높을 수 있으며, 작은 프로젝트에는 과도할 수 있습니다
    • 상대적으로 무거워 성능면에서 FastAPI나 Flask보다 떨어질 수 있습니다

 

 

1. 성능

  • FastAPI
    • ASGI 기반이며, StarlettePydantic으로 구동됩니다.
    • 비동기(Asynchronous)를 기본으로 하여 속도가 빠르고, 실시간 애플리케이션이나 마이크로서비스에 적합합니다.
  • Flask
    • 동기(Synchronous)를 기본으로 하는 WSGI 기반.
    • 일반적인 웹 애플리케이션에는 적합하지만, 동시성이 필요한 작업에서는 성능이 떨어질 수 있습니다.
  • Django
    • 동기를 기본으로 하지만, 최근에는 ASGI를 지원합니다.
    • 무거운 구조로 인해 API 중심 프로젝트에서는 성능이 FastAPI보다 떨어질 수 있습니다.

WSGI, ASGI 란???

WSGI(Web Server Gateway Interface)와 ASGI(Asynchronous Server Gateway Interface)는 파이썬 웹 애플리케이션과 웹 서버 간의 표준 인터페이스를 제공하는 프로토콜입니다.

WSGI는 2003년에 파이썬 표준으로 도입된 동기식 웹 서버 게이트웨이 인터페이스입니다.

ASGI는 WSGI의 후속작으로, 비동기 프로그래밍을 지원하기 위해 만들어졌습니다

 

Starlette,Pydantic 란?

Starlette는 경량 ASGI 프레임워크/툴킷으로, Python에서 비동기 웹 서비스를 구축하는 데 이상적입니다

Pydantic은 Python용 데이터 검증 및 설정 관리 라이브러리입니다

 

2. 개발 속도

  • FastAPI
    • Pydantic을 이용한 자동 데이터 검증 및 OpenAPI 스펙 지원 덕분에 API 개발에 최적화되어 있습니다.
    • Django보다 보일러플레이트 코드(반복적인 코드)가 적습니다.
  • Flask
    • 가볍고 최소한의 기능만 제공하며, 필요한 기능은 직접 추가해야 합니다.
    • 작은 프로젝트에서는 빠르게 개발이 가능하지만, 규모가 커질 경우 확장에 시간이 더 걸립니다.
  • Django
    • ORM, 인증, 관리자 페이지 등 필요한 기능이 기본으로 제공되므로 빠르게 복잡한 애플리케이션을 구축할 수 있습니다.
    • 초기 설정은 시간이 더 걸릴 수 있습니다.

 

ORM?

ORM(Object-Relational Mapping)은 객체와 관계형 데이터베이스 사이의 매핑을 자동화하는 기술입니다

 

3. 사용 사례

  • FastAPI
    • API 및 마이크로서비스 구축에 적합.
    • 머신러닝 모델 배포, 데이터 처리 파이프라인, 비동기 작업이 필요한 애플리케이션에 유리.
  • Flask
    • 웹 애플리케이션, API 또는 경량 서비스를 구축할 때 유용.
    • 커스터마이징이 필요한 간단한 프로젝트에 적합.
  • Django
    • 대규모 데이터베이스 중심 웹 애플리케이션에 적합.
    • 전자상거래, 콘텐츠 관리 시스템(CMS), 멀티 유저 플랫폼 등에 유리.

마이크로서비스 ?

소프트웨어 개발을 위한 아키텍처 접근 방식으로, 하나의 큰 애플리케이션을 작고 독립적인 서비스들의 모음으로 구성하는 방식입니다.

 

4. 학습 난이도

  • FastAPI
    • Python을 알고, 타입 힌트와 비동기 프로그래밍에 익숙하다면 배우기 쉬움.
    • 명확하고 자세한 문서를 제공하여 초보자도 쉽게 접근 가능.
  • Flask
    • 간단하고 직관적인 구조로 초보자도 쉽게 배울 수 있음.
    • 웹 개발 입문자에게 적합.
  • Django
    • 방대한 기능과 규칙적인 구조로 인해 학습 난이도가 다소 높음.
    • 기본 제공 기능들을 제대로 활용하려면 시간을 투자해야 함.

5. 생태계와 확장성

  • FastAPI
    • 비교적 새로 등장했지만 빠르게 성장 중.
    • SQLModel, Pydantic, 비동기 ORM 등 최신 라이브러리와 잘 통합됨.
  • Flask
    • 성숙한 생태계를 갖추고 있으며, 필요한 기능을 확장할 수 있는 다양한 확장 프로그램이 제공됨.
    • ORM, 인증 등은 직접 추가해야 함.
  • Django
    • 가장 큰 Python 웹 개발 생태계 중 하나로, 대부분의 기능이 기본 제공되거나 서드파티 앱으로 지원됨.
    • "배터리 포함(batteries-included)" 방식으로 외부 라이브러리 의존도를 줄여줌.

 

"배터리 포함(batteries-included)" 방식 ?

프트웨어 개발 철학 중 하나로, 프로그래밍 언어나 프레임워크가 기본적으로 많은 기능과 도구를 내장하고 있어 별도의 설치나 구성 없이 바로 사용할 수 있는 상태를 의미합니다.

 

6. 커뮤니티와 문서

  • FastAPI
    • 아직 커뮤니티 규모는 작지만 빠르게 성장 중.
    • 훌륭한 문서를 제공.
  • Flask
    • 오래된 프레임워크로 커뮤니티가 크고, 관련 자료와 확장 프로그램이 풍부함.
  • Django
    • 가장 큰 커뮤니티 중 하나를 보유.
    • 방대한 공식 문서와 튜토리얼, 서드파티 지원이 뛰어남.

7. 확장성과 규모

  • FastAPI
    • 비동기 작업을 기본으로 지원하므로 매우 확장성이 높음.
    • 클라우드 기반 마이크로서비스 아키텍처에 적합.
  • Flask
    • 잘 확장할 수 있지만, 큰 프로젝트의 경우 설정 및 추가 작업이 필요.
  • Django
    • 대규모 단일 애플리케이션에는 적합하지만, 마이크로서비스 아키텍처로 확장하려면 최적화가 필요할 수 있음.

각 프레임워크의 추천 사용 시점

  • FastAPI:
    • 고성능 API나 비동기 작업이 필요한 프로젝트.
    • 예: 머신러닝 API, 실시간 서비스, 경량 마이크로서비스.
  • Flask:
    • 작은 규모의 애플리케이션이나 커스터마이징이 중요한 프로젝트.
    • 예: 프로토타이핑, 간단한 웹 애플리케이션.
  • Django:
    • 대규모 데이터베이스 중심 애플리케이션.
    • 예: 전자상거래, 소셜 네트워크, 콘텐츠 관리 시스템.

결론

  • FastAPI: 현대적인 Python 비동기 기능이 필요한 고성능 API 중심 프로젝트.
  • Flask: 가볍고 유연한 애플리케이션을 빠르게 만들고 싶을 때.
  • Django: 복잡하고 기능이 많은 대규모 웹 애플리케이션에 적합

공식사이트 및 튜토리얼

구분 FastAPI Flask Django
공식사이트 https://fastapi.tiangolo.com https://flask.palletsprojects.com https://www.djangoproject.com
튜토리얼 https://fastapi.tiangolo.com/tutorial/ https://flask.palletsprojects.com/en/stable/tutorial/ https://docs.djangoproject.com/en/5.1/intro/tutorial01/

https://www.w3schools.com/django/

 

 

 

끝~