메뉴 바로가기 검색 및 카테고리 바로가기 본문 바로가기

한빛출판네트워크

파이썬 웹 프레임워크 비교 - Django, Flask, FastAPI 알아보기

한빛미디어

|

2024-07-01

|

by 빌 루바노빅

6,764

세바스티안 라미레즈Sebastián Ramírez가 2018년에 발표한 모던 파이썬 웹 프레임워크, FastAPI는 Flask (플라스크)와 Django (장고)를 따라 빠르게 성장했다. 깃허브 스타 수를 기준으로 보면, 2023년 말에 FastAPI가 Flask를 앞지르면서 두 번째로 인기가 많은 파이썬 웹 프레임워크가 됐다.

 

파이썬 웹 프레임워크의 연도별 깃허브 스타 수 (출처: https://bit.ly/3Laj4J7)

 

이러한 FastAPI의 급격한 성장과 인기 상승을 고려할 때, 기존 Flask나 Django 사용자들이 FastAPI에 관심을 가지는 것은 당연한 일이다. 이에 이번 글에서는 Flask나 Django 같은 인기 있는 파이썬 웹 프레임워크를 사용한 경험이 있는 개발자를 위해 FastAPI의 유사점과 차이점을 짚어보고자 한다. 애플리케이션을 Flask나 Django에서 FastAPI로 마이그레이션할 계획이 있거나, 마이그레이션에 대해 궁금한 점이 있을 때 보다 유용할 것이다.

 

 

Flask

 

 

Flask는 마이크로프레임워크microframework라고 자처한다. 이 프레임워크는 기본 뼈대를 제공하고 필요에 따라 서드파티 패키지를 다운로드해 보완한다. Django보다 덩치가 작으며, 처음 시작할 때 더 빨리 배울 수 있다. Flask는 ASGI가 아닌 WSGI를 기반으로 하는 동기식 프레임워크다. 다만  Quart쿼트라는 새로운 프로젝트가 Flask의 자리를 대신하며 ASGI 지원을 추가하고 있다. Flask와 FastAPI가 웹 라우팅을 어떻게 정의하는지 맨 위부터 살펴본다.

 

1) 경로

Flask와 FastAPI는 모두 최상위 수준에서 데코레이터를 사용해 경로를 웹 엔드포인트와 연결한다. 

 기본적으로 FastAPI는 f"Hello? {who}?" 같은 문자열을 JSON으로 변환해 웹 클라이언트에 반환한다. 반면 Flask의 jsonify() 함수는 인수를 JSON 문자열로 변환해 반환하고, 그 문자열이 JSON임을 나타내는 HTTP 응답 헤더와 함께 반환한다. 

 

딕셔너리(다른 데이터 타입은 제외)를 반환하는 경우, 최신 버전의 Flask는 자동으로 JSON으로 변환해 반환한다. jsonify()를 호출하면 딕셔너리를 포함한 모든 데이터 유형에 대해 명시적으로 작동한다.

 

 

2) 쿼리 매개변수

아래 예시를 통해 FastAPI 쿼리 매개변수는 who를 쿼리 매개변수 (URL에서 ? 뒤 문자열)로 전달하고, Flask는 request 객체에서 요청 값을 가져오는 것을 확인할 수 있다. 이 경우, args는 쿼리 매개변수가 포함된 딕셔너리를 생성한다.

 

3) 본문

Flask는 쿼리 매개변수를 JSON 형태로 입력받아 request.json에 저장한다.

 

4) 헤더

 

 쿼리 매개변수와 마찬가지로, Flask는 request 객체에 요청 데이터를 보관한다. 이번에는 headers dict 속성이다. 헤더 키는 대소문자를 구분하지 않아야 한다.

 

Django

 

 

Django는 Flask나 FastAPI보다 더 크고 복잡하며, ‘마감 기한이 있는 완벽주의자’를 타깃으로 한다. 내장된 객체 관계형 매퍼 object-relational mapper (ORM)는 주요 데이터베이스를 백엔드로 사용하는 웹사이트에 유용하다. 이 프레임워크는 툴킷보다는 모놀리스에 가깝다. 마이크로프레임워크에 복잡성이 추가될지와 학습 곡선이 적정한지 여부는 애플리케이션 요구사항에 따라 다르다.


Django는 전통적인 WSGI 애플리케이션이었지만, 버전 3.0에서 ASGI에 대한 지원이 추가됐다. Flask 및 FastAPI와 달리, Django는 데코레이터를 사용하지 않고 단일 URLConf 테이블에서 (URL을 뷰 함수view functions라는 웹 함수와 연결하는) 경로를 정의하기를 선호한다. 이 경우 모든 경로를 한 곳에서 쉽게 볼 수 있지만, 함수만 볼 때는 어떤 URL이 함수와 연결됐는지 확인하기가 더 어려워진다.

 

 

FastAPI

 

 

FastAPI는 여느 웹 프레임워크처럼 웹 애플리케이션의 구축을 돕는다. 모든 프레임워크가 기능, 생략, 기본값을 통해 일부 작업을 더 쉽게 수행할 수 있도록 설계된다. 이름에서 나타나듯 FastAPI는 웹 API 개발을 목표로 하지만 기존 웹 콘텐츠 애플리케이션에도 사용할 수 있다. FastAPI 웹사이트에서는 FastAPI의 장점을 다음과 같이 설명한다.

  • 성능: 특정한 경우에서 Node.js와 Go에 견줄 만하다.
  • 빠른 개발: 이해하기 어렵거나 이상한 부분이 없다.
  • 향상된 코드 품질: 타입 힌트와 Pydantic 모델은 버그를 줄이는 데 유용하다.
  • 자동 생성된 문서 및 테스트 페이지: OpenAPI 설명을 직접 편집하는 것보다 훨씬 더 쉽다.

 

다음은 FastAPI가 주로 사용하는 기능이다.

  • 파이썬 타입 힌트 
  • 비동기 지원을 포함한 웹 머신용 Starlette
  • 데이터 정의 및 유효성 검사를 위한 Pydantic
  • 다른 기능을 활용하고 확장할 수 있는 특별한 통합 기능


FastAPI는 위 기능을 조합해 웹 애플리케이션, 특히 RESTful 웹 서비스를 위한 쾌적한 개발 환경을 제공한다.

 

 

Django, Flask, FastAPI의 장/단점 한 눈에 보기

프레임워크

장점

단점

Django- 풀스택 프레임워크로 다양한 기능 내장
- 강력한 ORM(object-relational mapper) 제공
- 관리자 인터페이스 자동 생성 
-보안 기능 내장
- 학습 곡선이 가파름
- 소규모 프로젝트에는 과도할 수 있음
- 유연성이 다소 떨어짐
- 비동기 지원이 제한적
Flask- 유연성이 뛰어남
- 가볍고 학습이 쉬움
- 다양한 확장 가능
- 대규모 프로젝트에서는 구조화가 어려울 수 있음
- 기본 기능이 적어 확장이 필요함
- ORM, 폼 검증 등 추가 라이브러리 필요
- 비동기 지원이 제한적
FastAPI- 매우 빠른 성능
- 자동 API 문서 생성
- 비동기 지원
- Django나 Flask에 비해 커뮤니티 규모가 작음
- 일부 기능에 대해 추가 라이브러리 필요

 

세 프레임워크는 모두 기본적인 웹 서버 작업을 처리하지만 학습 곡선이 다르다. FastAPI의 경우, Django나 Flask보다 경로를 지정하는 구문이 더 깔끔하고, ASGI를 지원하므로 타 웹 프레임워크보다 더 빠르게 실행할 수 있는 장점이 있다.

 


위 콘텐츠는 『처음 시작하는 FastAPI』에서 내용을 발췌하여 작성하였습니다.

댓글 입력
자료실

최근 본 책0