Web Development

Django, Flask, FastAPI 중 최고의 Python 웹 프레임워크는?

Read this post in other languages:

Python 웹 프레임워크를 검색하면 Django, Flask, FastAPI의 세 가지 이름이 꾸준히 등장합니다. 최신 Python 개발자 설문조사 결과에서도 이 세 가지 프레임워크는 여전히 Python을 사용하는 백엔드 웹 개발에서 개발자들이 가장 선호하는 선택지입니다.

세 프레임워크 모두 오픈 소스이며 최신 Python 버전과 호환됩니다. 

그렇다면 프로젝트에 가장 적합한 웹 프레임워크를 어떻게 결정할 수 있을까요? 각 프레임워크의 장단점을 살펴보고 서로 어떻게 비교되는지 살펴보겠습니다.

Django

Django는 Instagram, Spotify, Dropbox 등 여러 기업에서 사용하는 ‘배터리 포함’ 철학의 풀스택 웹 프레임워크입니다. “마감을 앞둔 완벽주의자를 위한 웹 프레임워크”라는 콘셉트로 잘 알려진 Django 프레임워크는 강력한 웹 애플리케이션을 더 쉽고 빠르게 개발할 수 있도록 설계되었습니다.

Django는 2005년 오픈 소스로 처음 공개된 이래, 20년이 지난 현재까지도 활발히 개발되고 있는 안정적인 프로젝트입니다. 소셜 미디어, 이커머스, 뉴스, 엔터테인먼트 사이트 등 다양한 웹 애플리케이션에 적합합니다.

Django는 모델-뷰-템플릿(MVT) 아키텍처를 따르며, 각 구성 요소는 특정 역할을 담당합니다. 모델은 데이터를 처리하고 데이터 구조를 정의합니다. 뷰는 비즈니스 로직을 관리하고 요청을 처리하며 모델에서 필요한 데이터를 가져옵니다. 마지막으로 템플릿은 모델-뷰-컨트롤러(MVC) 아키텍처의 뷰와 유사하게 최종 사용자에게 이 데이터를 표시합니다. 

풀스택 웹 프레임워크인 Django는 전체 웹앱(데이터베이스부터 HTML 및 JavaScript 프런트엔드까지)을 빌드하는 데 사용할 수 있습니다.

또는, Django REST 프레임워크의 사용으로 Django를 프런트엔드 프레임워크(예: React)와 결합하여 모바일 및 브라우저 기반 앱을 모두 빌드할 수 있습니다.

포괄적인 Django 가이드를 통해 필수 지식에 대한 개요, 체계적인 학습 경로, 프레임워크를 익히는 데 도움이 되는 추가 리소스를 살펴봅니다. 

Django의 장점

Django가 여전히 가장 널리 사용되는 Python 웹 프레임워크 중 하나인 이유는 다음과 같이 다양합니다.

  • 광범위한 기능: ‘배터리 포함’ 철학의 접근 방식을 통해 Django는 인증, 캐시 처리, 데이터 유효성 검사 및 세션 관리와 같은 기본 제공 기능을 제공합니다. 중복 제거(DRY) 원칙으로 개발 속도가 빨라지고 버그가 줄어듭니다. 
  • 간편한 설정: Django는 기본 제공 기능으로 종속성 관리를 간소화하여 외부 패키지의 필요성을 낮출 수 있습니다. 따라서 초기 설정이 간소화되고 호환성 문제가 최소화되므로 더 빨리 시작하고 실행할 수 있습니다. 
  • 데이터베이스 지원: Django의 ORM(객체 관계형 매핑)은 데이터 처리를 더욱 간단하게 만들어 SQL 지식 없이도 SQLite, MySQL, PostgreSQL과 같은 데이터베이스로 작업이 가능합니다. 하지만 MongoDB와 같은 비관계형 데이터베이스에는 적합하지 않습니다.
  • 보안: 크로스 사이트 스크립팅(XSS), SQL 삽입, 클릭재킹과 같은 일반적인 취약성에 대한 기본 제공 방어 기능으로 인해 앱을 처음부터 빠르게 보호할 수 있습니다. 
  • 확장성: Django는 모놀리식이지만 애플리케이션 아키텍처(비즈니스 로직 및 템플릿)의 수평적 확장, 데이터베이스 부하를 완화하는 캐시 처리, 효율성을 개선하는 비동기 처리 기능을 지원합니다. 
  • 커뮤니티 및 문서: Django는 방대하고 활발한 커뮤니티와 상세한 문서가 보유하고 있으므로 튜토리얼과 지원도 쉽게 이용할 수 있습니다. 

Django의 단점

Django의 많은 장점에도 불구하고, 차후 웹앱을 개발할 때에는 Django 이외의 옵션을 고려해야 할 몇 가지 이유도 있습니다.

  • 무거움: ‘배터리 포함’ 철학 방식의 설계는 소규모 앱에는 너무 무거울 수 있습니다. 그러한 Flask와 같은 가벼운 프레임워크가 더 적합할 수 있습니다. 
  • 학습 곡선: 신규 개발자에게 도움이 되는 리소스도 많지만, Django의 광범위한 기능으로 인해 당연하게도 학습 곡선이 가파른 편입니다.
  • 성능: Django는 일반적으로 Flask나 FastAPI 같은 다른 프레임워크에 비해 속도가 느립니다. 단, 기본 제공되는 캐시 처리와 비동기 처리를 통해 응답 시간을 개선할 수도 있습니다.

Flask

Flask는 백엔드 웹 개발을 위한 Python 기반의 마이크로 프레임워크입니다. 하지만 ‘마이크로’라는 용어에 속지 마세요. 곧 살펴보겠지만, Flask는 소규모 웹앱에만 국한되지는 않으니까요. 

대신 Flask는 Werkzeug WSGI(웹 서버 게이트웨이 인터페이스)와 Jinja2 템플릿을 기반으로 하는 단순한 코어로 설계되었습니다. Flask의 주요 사용자로는 Netflix, Airbnb, Reddit이 있습니다.

Flask는 만우절 농담으로 시작되어 Django보다 몇 년 뒤인 2010년에 오픈 소스 프로젝트로 출시되었습니다. 마이크로 프레임워크의 접근 방식은 Django와는 근본적으로 다릅니다. Django는 ‘배터리 포함’ 철학의 접근 방식으로 웹앱 빌드에 필요한 많은 기능을 제공하는 반면, Flask는 이보다 훨씬 간결합니다.

마이크로 프레임워크의 철학은 개발자마다 선호하는 방식이 다르므로 자신에게 맞는 구성 요소를 자유롭게 선택할 수 있어야 한다는 데 있습니다. 이러한 이유로 Flask에는 데이터베이스, ORM(객체 관계형 매퍼) 또는 ODM(객체-문서 매퍼)이 포함되어 있지 않습니다. 

Flask로 웹앱을 빌드할 때 미리 결정되는 것은 거의 없습니다. 아래에서 설명하겠지만 이러한 특징은 상당한 이점을 가져올 수 있습니다.

Flask의 장점

개발자 에코시스템 현황 조사를 통해 확인한 바에 따르면, 지난 5년 동안 Flask의 사용량이 꾸준히 증가하여 2021년에는 처음으로 Django를 추월했습니다. 

백엔드 웹 프레임워크로 Flask를 선택하는 데에는 몇 가지 이유가 있습니다.

  • 가벼운 디자인: Flask의 간결한 접근 방식은 Django 대비 유연한 대안을 제공하므로 Django의 광범위한 기능이 과도하게 느껴질 수 있는 소규모 애플리케이션이나 프로젝트에 이상적입니다. 하지만 Flask는 소규모 프로젝트에만 국한되지 않고 필요에 따라 확장할 수 있습니다.
  • 유연성: Flask를 사용하면 데이터 처리 및 사용자 인증과 같은 핵심 기능을 위한 라이브러리와 프레임워크를 선택할 수 있습니다. 이를 통해 프로젝트에 가장 적합한 도구를 선택하고 예상 밖의 다양한 방향으로 확장할 수 있습니다. 
  • 확장성: Flask는 모듈식 설계로 수평적 확장이 용이합니다. NoSQL 데이터베이스 레이어를 사용하면 확장성을 더 높일 수 있습니다. 
  • 얕은 학습 곡선: Flask는 설계가 단순하기에 쉽게 배울 수 있습니다. 단, 더 복잡한 앱을 만들려면 확장 기능을 탐색해야 할 수도 있습니다. 
  • 커뮤니티 및 문서: Flask에는 광범위한(다소 기술적인) 문서와 명확한 코드베이스가 있습니다. 커뮤니티는 Django보다 작지만 Flask 역시 활발하게 활동 중이며 꾸준히 성장하고 있습니다. 

Flask의 단점

Flask는 많은 기능을 제공하지만 차후 웹 개발 프로젝트에 사용하기 전에 살펴볼 몇몇 고려 사항이 있습니다.

  • 각자 직접 구성하는 방식(BYOE): Flask의 마이크로 프레임워크 설계와 유연성으로 인해 데이터 유효성 검사, 세션 관리, 캐시 처리 등 핵심 기능의 대부분은 사용자가 직접 처리해야 합니다. 이러한 유연성은 장점일 수 있지만, 기존 라이브러리를 찾거나 기능을 처음부터 빌드해야 하므로 개발 프로세스가 느려질 수도 있습니다. 또한, Flask와의 호환성을 유지하기 위해서는 시간이 지나면서 종속성을 지속적으로 관리해야 합니다. 
  • 보안: Flask에는 기본 제공되는 보안 기능이 최소 수준입니다. 클라이언트 측 쿠키를 보호하는 것 외에도 웹 보안 모범 사례를 구현하고 필요에 따라 업데이트를 적용하여 포함된 종속성 보안을 보장해야 합니다. 
  • 성능: Flask는 Django보다 성능은 약간 더 낫지만, FastAPI보다는 떨어집니다. Flask는 일부 ASGI 지원(FastAPI에서 사용하는 표준)을 제공하지만 WSGI에 더 밀접하게 연결되어 있습니다.

FastAPI

이름에서 알 수 있듯이 FastAPI는 Python으로 고성능 웹 API를 빌드하기 위한 마이크로 프레임워크입니다. FastAPI는 2018년 오픈 소스 프로젝트로 처음 출시된 비교적 새로운 프레임워크임에도 개발자 사이에서 빠르게 인기를 얻으며 2021년 이후 가장 인기 있는 Python 웹 프레임워크 목록에서 3위를 차지했습니다.

FastAPI는 ASGI(비동기 서버 게이트웨이 인터페이스) 서버인 Uvicorn과 웹 마이크로 프레임워크인 Starlette을 기반으로 합니다. FastAPI는 데이터 유효성 검사, 직렬화 및 문서화 기능을 추가하여 웹 API 빌드를 간소화합니다.

이 마이크로 프레임워크를 개발한 제작자는 다양한 프레임워크와 도구로 작업한 경험을 바탕으로 FastAPI를 개발했습니다. Django는 React나 Vue.js와 같은 프런트엔드 JavaScript 웹 프레임워크가 본격적으로 등장하기 전에 개발된 반면, FastAPI는 이러한 환경을 고려해 설계되었습니다. 

지난 몇 년 동안 API를 구조화하고 문서화하는 형식으로 OpenAPI(이전의 Swagger)가 등장하면서 FastAPI가 활용할 수 있는 업계 표준이 마련되었습니다.

RESTful API를 생성하는 암묵적인 사용 사례 외에도 FastAPI는 메시징 플랫폼이나 대시보드와 같이 실시간 응답이 필요한 애플리케이션에 이상적입니다. 고성능 및 비동기 기능으로 머신러닝 모델, 데이터 처리, 분석 등 데이터 집약적인 앱에 적합합니다.

FastAPI의 장점

2021년 개발자 에코시스템 현황 조사에서 응답자의 14%가 마이크로 프레임워크를 사용하면서 FastAPI는 처음으로 독자적인 카테고리를 갖게 되었습니다. 

그 이후 사용률은 20%로 증가했으며, Flask와 Django의 사용률은 약간 감소했습니다. 

다음의 몇몇 이유로 개발자들은 FastAPI를 선택합니다.

  • 성능: 속도를 위해 설계된 FastAPI는 비동기 처리와 양방향 웹 소켓을 지원합니다(Starlette 제공). 벤치마크 테스트에서 Django와 Flask보다 높은 성능을 보여 트래픽이 많은 애플리케이션에 이상적입니다. 
  • 확장성: Flask와 마찬가지로 FastAPI도 고도로 모듈화되어 있어 확장이 용이하고 컨테이너화된 배포에 이상적입니다.
  • 업계 표준 준수: FastAPI는 OAuth 2.0, OpenAPI(이전의 Swagger), JSON 스키마와 완벽하게 호환됩니다. 따라서 최소한의 노력으로 보안 인증을 구현하고 API 문서를 생성할 수 있습니다.
  • 사용 편의성: FastAPI는 타입 힌트 및 유효성 검사에 Pydantic을 사용하여 타입 검사, 자동 완성, 요청 검증을 제공하므로 개발 속도를 크게 높일 수 있습니다.
  • 문서: FastAPI는 방대한 문서를 보유하고 타사 리소스도 점차 늘어나고 있어, 모든 수준의 개발자들이 쉽게 접근할 수 있습니다.

FastAPI의 단점

다음 프로젝트에 가장 적합한 프레임워크를 결정하기 전 다음 사항을 염두에 둡니다.

  • 성숙도: FastAPI는 새로운 프레임워크이기 때문에 Django나 Flask에 비해 성숙도가 부족합니다. 커뮤니티가 더 작고 적용 범위가 넓지 않아 사용자 경험이 덜 능률적일 수 있습니다. 
  • 호환성: 마이크로 프레임워크인 FastAPI는 완전한 기능을 갖춘 앱을 위한 추가 기능이 필요합니다. 호환되는 라이브러리가 Django나 Flask에 비해 적기 때문에 자체 확장 기능을 개발해야 할 수도 있습니다. 

Flask, Django, FastAPI 중 선택하는 방법

그렇다면 최고의 Python 웹 프레임워크는 무엇일까요? 많은 프로그래밍이 그렇듯이 대답은 ‘상황에 따라 다르다’입니다.

즉, 어떤 종류의 앱을 만드는가? 우선순위는 무엇인가? 프로젝트는 앞으로 어떻게 성장할 것으로 예상하는가? 등의 질문에 대한 답이 무엇인가에 따라 알맞은 선택이 다릅니다.

세 개의 인기 있는 Python 웹 프레임워크 모두 고유한 강점을 가지고 있으므로 애플리케이션의 맥락에서 이를 평가하면 최선의 결정을 내리는 데 도움이 됩니다. 

Django는 별도 설정 없이 바로 사용할 수 있도록 표준 웹앱 기능이 필요한 경우 유용한 옵션으로, 보다 견고한 구조가 필요한 프로젝트에 적합합니다. 특히 관계형 데이터베이스를 사용하는 경우 ORM이 데이터 관리를 간소화하고 보안 기능을 기본 제공하기 때문에 더욱 유리합니다. 그러나 소규모 프로젝트나 간단한 애플리케이션에는 광범위한 기능이 부담스럽게 느껴질 수 있습니다.

반면 Flask는 더 큰 유연성을 제공합니다. 미니멀한 설계로 개발자가 원하는 확장 기능과 라이브러리를 골라 선택할 수 있어 기능을 사용자 지정해야 하는 프로젝트에 적합합니다. 이 접근 방식은 요구 사항이 빠르게 변화하고 발전할 수 있는 스타트업이나 MVP에 적합합니다. Flask는 시작하기는 쉽지만 더 복잡한 애플리케이션을 구축하려면 다양한 확장 기능을 살펴봐야 한다는 점에 유의해야 합니다.

FastAPI는 속도가 중요한 경우, 특히 API 우선 접근 방식의 프로젝트나 머신러닝 프로젝트에서 강력한 선택지입니다. 타입 힌트와 같은 최신 Python 기능을 사용해 자동 데이터 유효성 검사 및 문서화를 제공합니다. FastAPI는 마이크로서비스나 데이터 기반 API와 같이 고성능이 필요한 애플리케이션에 탁월한 선택지입니다. 하지만 기본 제공되는 기능 면에서 Django나 Flask만큼 풍부하지 않을 수 있으므로 추가 기능을 수동으로 구현해야 할 수도 있습니다. 

Django와 다른 웹 프레임워크를 자세히 비교하려면 다음의 다른 가이드를 참조하세요.

Python 웹 프레임워크 개요

  Django Flask FastAPI
설계 철학 관계형 데이터베이스를 사용하는 웹앱을 위해 설계된 풀스택 프레임워크 가벼운 백엔드 마이크로 프레임워크 웹 API를 빌드하기 위한 가벼운 마이크로 프레임워크
사용 편의성 ‘배터리 포함’ 철학의 접근 방식은 필요한 모든 것이 기본 제공되므로 개발 속도가 빨라집니다. 하지만 사용 가능한 기능의 양이 많기 때문에 학습 곡선이 가파를 수 있습니다. Flask는 마이크로 프레임워크이므로 미리 익혀야 할 코드가 적고, 원하는 라이브러리와 확장 기능을 선택할 수 있는 유연성이 높습니다. 그러나 기본적으로 제공되는 기능이 적은 만큼 더 많은 외부 종속성이 필요합니다. Flask와 마찬가지로 Django에 비해 기본 제공되는 기능이 적습니다. 타입 힌트 및 유효성 검사는 개발 속도를 높이고 오류를 줄여줍니다. 자동 API 참조 문서를 위해 OpenAPI와 호환됩니다.
기능확장성 셋 중에서 호환되는 패키지의 선택의 폭이 가장 넓습니다. 호환되는 패키지의 수가 많습니다. Flask나 Django보다 호환되는 패키지의 수가 적습니다.
성능 양호하지만 Flask나 FastAPI만큼 빠르지는 않습니다. Django보다 약간 빠르지만 FastAPI만큼은 아닙니다. 셋 중에서 가장 빠릅니다.
시스템확장성 모놀리식 설계로 인해 확장성이 제한될 수 있습니다. 비동기 처리를 지원하므로 높은 부하 상황에서 성능을 높일 수 있습니다. 가벼운 모듈식 설계로 확장성이 뛰어납니다. 가벼운 모듈식 설계로 확장성이 뛰어납니다.
보안 다양한 사이버 보안 기능이 기본 제공됩니다. 기본적으로 클라이언트 측 쿠키가 보호됩니다. 기타 보안 보호 기능을 추가해야 하며 종속성에 취약점이 있는지 확인해야 합니다. OAuth 2.0을 기본적으로 지원합니다. 기타 보안 보호 기능을 추가해야 하며 종속성에 취약점이 있는지 확인해야 합니다.
성숙도 2005년부터 오픈 소스로 제공되며, 정기적으로 업데이트되고 있습니다. 2010년부터 오픈 소스로 제공되며, 정기적으로 업데이트되고 있습니다. 2018년부터 오픈 소스로 제공되며, 정기적으로 업데이트되고 있습니다.
커뮤니티 대규모의 활발한 팔로워가 있습니다. Flask의 인기가 계속 유지됨에 따라 활발하고 계속 성장할 가능성이 높습니다. Django나 Flask보다 팔로워 수가 적습니다.
문서 가장 활발하고 탄탄한 공식 문서를 제공합니다.  광범위한 공식 문서를 제공합니다. 나온 지 얼마 안 되는 만큼 공식 문서가 가장 적습니다.

더 읽어볼 자료

PyCharm으로 웹 개발 프로젝트 시작하기

주로 사용하는 프레임워크에 관계없이 단일 IDE에서 모든 필수 웹 개발 도구에 액세스할 수 있습니다. PyCharm은 Django, FastAPI 및 Flask를 기본적으로 지원하며 React, Angular 및 Vue.js와 같은 프런트엔드 프레임워크와 최고 수준의 통합을 제공합니다.

 
 
게시물 원문 작성자
Evgenia Verbina

Evgenia Verbina

image description

Discover more