>백엔드 개발 >파이썬 튜토리얼 >플라스크는 죽었는가? FastAPI는 미래인가?

플라스크는 죽었는가? FastAPI는 미래인가?

DDD
DDD원래의
2024-12-27 09:30:10597검색

Is Flask Dead? Is FastAPI the Future?
관련 검색을 해보니 2024년에도 꽤 많은 사람들이 여전히 Flask를 Python 웹 프레임워크로 추천하고 있는 것으로 나타났습니다. 그러나 내 생각에는 "Flask는 사라지고 있으며 FastAPI는 미래를 대표합니다." 이것이 제가 이 글을 쓰는 이유입니다. 토론에 참여하고 반론을 제시하는 모든 분을 환영합니다.

플라스크 대 FastAPI

Flask는 Python 개발자의 마음 속에 중요한 위치를 차지하고 있습니다. 웹 개발자라면 아마도 Flask를 사용해 본 적이 있을 것입니다. 하지만 아마도 FastAPI는 사용해 본 적이 없을 것입니다.

다음 두 가지 증거가 있습니다.

  1. 지난 1~2년 동안 웹 개발과 관련된 눈에 띄는 새로운 Python 프로젝트에서는 웹 개발과 관련된 거의 모든 프로젝트가 FastAPI를 채택했습니다.
  2. 2024년 12월 25일 기준 GitHub에서 FastAPI의 별 개수(78.9k)가 이미 Flask의 별 개수(68.4k)를 넘어섰습니다.

이제 공식 Python 개발자 설문조사에서 웹 프레임워크 비율의 변화를 살펴보겠습니다.

2019년에는 FastAPI가 옵션으로 나열되지도 않았지만 2023년에는 그 점유율이 25%에 도달한 것이 분명합니다. (현재는 2023년까지의 데이터만 있습니다.)

이 비율 데이터는 기존 시스템을 포함하므로 Django와 Flask의 비율이 급격히 떨어지지는 않는다는 점에 유의해야 합니다. 그럼에도 불구하고 추세는 분명합니다.

우리 모두는 웹 프레임워크 분야가 거의 매년 새로운 프레임워크가 등장할 정도로 매우 다양하다는 것을 알고 있습니다. 이러한 프레임워크의 대부분은 수명이 짧지만 일부는 지속됩니다. FastAPI는 2018년 말에 탄생해 2019년 말부터 이름을 알리기 시작했습니다. 그렇다면 어떻게 2010년 말에 탄생한 Flask를 불과 5년 만에 인기 면에서 추월할 수 있었을까요? 다음으로, 더 나은 이해를 위해 Python 웹 프레임워크 및 관련 솔루션의 개발 역사를 타임라인에 따라 추적해 보겠습니다.

웹 프레임워크(플러그인, 도구)의 진화

FastAPI의 저자는 Python 생태계 발전에 각별한 관심을 기울이는 개발자입니다. 확장 읽기 링크 2는 저자가 작성한 "대안, 영감 및 비교"(https://fastapi.tiangolo.com/alternatives/)로, FastAPI가 다양한 라이브러리에서 가져온 참고 자료나 영감을 자세히 설명합니다. 이 글의 개발 역사 부분에서도 이 글을 언급하고 있습니다. FastAPI의 등장 배경과 저자의 일부 디자인 컨셉이 담겨 있으니 원문을 읽어보시길 권합니다.

플라스크

Flask는 Django와는 별개의 "마이크로" 프레임워크입니다. 소수의 핵심 기능만 유지하며, 분리하기 위해 다른 기능을 여러 라이브러리(예: Jinja2, Werkzeug 등)로 분할합니다. 이를 통해 개발자는 충분한 자유를 누리고 관련 기능을 위한 타사 플러그인을 쉽게 작성할 수 있습니다. 청사진, 컨텍스트, 경로, 신호 등을 나타내는 데코레이터와 같은 내부 디자인은 당시 상당히 발전했습니다. 포괄적인 문서와 결합되어 매우 초보자에게 친숙합니다.

플라스크 REST 프레임워크

Flask는 단순성 덕분에 API 구축에 매우 적합합니다. 그러나 Flask 자체에는 내장된 기능이 없기 때문에 전문적인 REST 프레임워크가 필요합니다. 이에 따라 Flask-restful, Flask-RESTPlus, Flask-api 등의 프레임워크가 속속 등장했습니다. 또한 REST 서비스에는 데이터 검증, 구문 분석 및 사양에 대한 요구 사항이 있어 Flask-apispec이 등장할 때까지 Marshmallow, Webargs 및 APISpec이 등장했습니다. 하지만 이 개발 과정 전반에 걸쳐 DRF에 필적하는 Flask REST Framework는 구현된 적이 없습니다.

이 단계에서는 Flask의 단점이 점차 부각되었습니다.

Flask의 본래 강점은 유연성과 미니멀리즘에 있지만 이는 내부적으로 많은 구성요소를 개발해야 한다는 의미이기도 합니다. 이를 위해서는 개발 및 유지를 위한 전담 개발자가 있는 대기업이나 매우 유능한 개인 개발자가 필요합니다. 그렇지 않으면 플러그인이 프로덕션 품질에 도달하기 어렵기 때문에 Flask용 타사 플러그인이 혼합되어 장기 유지 관리가 보장되지 않습니다. 앞서 언급했듯이 이러한 라이브러리 중 상당수는 이미 유지 관리가 중단되었습니다.

따라서 오늘날에도 Flask로 API 서비스를 구축하려면 다양한 구성 요소를 함께 결합해야 합니다. 즉시 업데이트되지 않은 일부 구성 요소의 경우 직접 문제를 해결해야 합니다. 퇴역 군인이라면 감당할 수 있겠지만, 초보자에게는 특히나 최신 사례와 개념을 적용하려는 경우 다소 어려운 작업입니다.

Asyncio 생태계

Python 3.5부터 asyncio가 미래 트렌드가 되었습니다. 그 결과, aiohttp, Starlette, sanic 등 asyncio를 기본적으로 지원하는 일부 웹 프레임워크가 등장했습니다.

이때 플라스크는 적응을 꺼려했습니다. 커뮤니티는 asyncio에 대한 지원을 추가하는 데 시간이 오래 걸렸고 Flask의 원래 작성자는 Rust 작성으로 전환하여 프로젝트를 두 명의 관리자의 손에 맡겼습니다(이제 한 명만 남았습니다).

apistar, molten과 같은 API 서비스 구축 프로젝트는 모두 FastAPI 탄생의 디자인 영감을 제공했습니다.

FastAPI

그래서 FastAPI가 탄생했습니다. 저자는 원래 좋은 해결책을 찾고 있었지만, 위의 상황들은 각각 나름대로의 문제나 한계를 갖고 있었습니다. 그래서 저자는 이 새로운 프레임워크를 만들었습니다.

FastAPI가 돋보이는 이유

기사의 핵심 부분입니다. FastAPI가 Flask를 대체할 수 있는 이유는 바로 다음과 같습니다.

Pydantic을 사용한 사용자 데이터 검증

API 개발 과정에서 데이터 형식 유효성 검사, 구문 분석, 직렬화는 일상적인 작업입니다. 수년에 걸쳐 다양한 솔루션이 등장했으며 현재는 Pydantic이 최고의 선택입니다:

from fastapi import FastAPI
from pydantic import BaseModel


class Item(BaseModel):
    name: str
    description: str | None = None
    price: float
    tax: float | None = None


app = FastAPI()


@app.post("/items/")
async def create_item(item: Item):
    return item

얼핏 보면 이 코드는 ORM이나 데이터 클래스를 작성하는 방식처럼 보일 수 있지만 실제로는 Python의 기본 Type Hints 구문을 사용하여 필드 유형에 주석을 답니다. 예를 들어 위의 예에서는 /items/ 요청의 항목 스키마가 명확하게 정의되었으며 각 필드의 값 유형이 명시적입니다. 스키마 설명이나 하드 코딩을 사용하는 이전 방법과 비교할 때 이 접근 방식은 더 간결하고 Python 스타일에 더 부합하며 더 나은 IDE 지원을 제공합니다.

현재 Pydantic은 사용자 데이터 검증 분야를 장악하고 있습니다. FastAPI가 내장되어 있으므로 검증 프로세스가 크게 단순화되고 오류가 줄어듭니다. 그렇기 때문에 FastAPI 공식 웹사이트에서는 이 솔루션이 개발자의 오류를 최대 40%까지 줄일 수 있다고 언급하고 있습니다. Python과 같은 동적 언어의 경우 유형 검사에 mypy를 사용하지 않는다면 Pydantic을 적용하는 것이 필수적입니다.

또한 Pydantic 통합 덕분에 프로젝트에 ORM(예: SQLAlchemy)을 추가하는 것이 매우 쉬워졌습니다. 데이터 유효성 검사가 이미 완료되었으므로 요청을 통해 얻은 개체를 데이터베이스에 직접 전달할 수 있습니다. 반대로, 데이터베이스에서 검색된 객체를 직접 반환할 수도 있습니다.

반면 Flask는 이런 부분이 부족합니다.

비동기식 디자인

Flask 시대에는 코드 실행이 단일 스레드 및 동기식이었습니다. 즉, 요청은 하나씩 처리해야 했고, 다른 요청은 이전 요청이 완료되기 전에 I/O 작업을 기다리는 데 시간을 낭비하게 되었습니다. 반면 Asyncio는 최적의 솔루션입니다. I/O 작업을 비동기식으로 만들 수 있으므로 작업이 완료될 때까지 기다리지 않고 작업 결과를 얻은 다음 다른 작업 요청을 처리할 수 있습니다.

FastAPI는 기본적으로 동시 및 비동기 코드를 지원합니다. 코드가 올바르게 작성된다면 최고의 효율성을 달성할 수 있습니다. 따라서 NodeJS 또는 Go와 유사한 효율성을 갖춘 현재 가장 빠른 Python 프레임워크로 간주됩니다. 속도와 성능이 핵심이라면 FastAPI는 의심할 여지 없이 최선의 선택입니다.

ASGI에 대한 기본 지원

먼저 WSGI에 대해 언급하겠습니다. 전체 이름은 "Python 웹 서버 게이트웨이 인터페이스"이며 "PEP 3333"(https://peps.python.org/pep-3333/)에서 참조할 수 있습니다. 웹 애플리케이션과 서버 간의 상호 작용을 위해 특별히 작성된 Python 표준입니다. PHP나 Ruby를 사용해 본 적이 있다면 이해하기 더 쉬울 것입니다. Flask는 WSGI 제품군인 Werkzeug에 의존하므로 Flask는 ASGI가 아닌 이 오래된 WSGI 표준을 지원합니다.

WSGI의 문제점은 비동기성을 활용하여 성능과 효율성을 높일 수 없다는 것입니다. 그래서 Django 채널은 ASGI를 개척했습니다. 전체 이름은 "비동기 서버 게이트웨이 인터페이스"로, 반복적이고 거의 완전히 재설계된 표준입니다. 비동기식 서버/애플리케이션 인터페이스를 제공하고 HTTP, HTTP/2 및 WebSocket을 지원합니다. WSGI와 달리 ASGI에서는 각 애플리케이션이 여러 비동기 이벤트를 가질 수 있습니다. 또한 ASGI는 동기 및 비동기 애플리케이션을 모두 지원합니다. 기존 동기식 WSGI 웹 애플리케이션을 ASGI로 마이그레이션하거나 ASGI를 사용하여 새로운 비동기식 웹 애플리케이션을 구축할 수 있습니다.

결론을 내리기 전에 5가지 용어 설명을 추가해 보겠습니다.

  1. ASGI 툴킷: ASGI 관련 기능(예: URL 라우팅, 요청/응답 개체, 템플릿 엔진 등)을 구현하는 라이브러리입니다. 본 글에서는 Flask의 의존성인 Werkzeug에 해당하는 Starlette를 주로 지칭합니다.
  2. ASGI 웹 프레임워크: ASGI 사양(예: FastAPI)을 구현하는 웹 프레임워크인 반면, Flask 및 Django는 WSGI를 구현하는 웹 프레임워크입니다. 이러한 프레임워크는 개발자가 사용하기 쉬운 인터페이스를 통해 애플리케이션을 작성할 수 있도록 설계되었습니다. 개발자는 필요에 따라 비즈니스 로직만 작성하면 됩니다. 초기 프레임워크는 대부분 ASGI 툴킷을 내부적으로 구현했지만 이후 프레임워크는 일반적으로 적합한 툴킷을 결합합니다. 예를 들어 Flask는 Werkzeug(자체)를 사용하고 FastAPI는 Starlette(다른 사용자)를 사용합니다.
  3. 웹 애플리케이션: 웹 프레임워크를 사용하여 만든 애플리케이션은 웹 애플리케이션입니다. 일반적으로 웹 프레임워크에는 개발 및 디버깅을 위해 시작할 수 있는 테스트 서버가 함께 제공됩니다. 성능과 안정성이 문제가 되지 않는다면 이미 브라우저에서 개발 주소에 액세스하여 이 애플리케이션을 방문할 수 있습니다.
  4. 웹 서버: 현실 세계는 예상보다 더 복잡합니다. 웹 애플리케이션이 프로덕션 환경에 배포된 후에는 요청 로드 밸런싱, 정적 파일 제공, 액세스 제어, 역방향 프록시 등의 요구 사항을 고려해야 하며 높은 성능 요구 사항도 있습니다. 웹 프레임워크에 내장된 웹 서버는 이러한 요구 사항을 전혀 충족할 수 없으므로 전문적인 웹 서버가 필요합니다. 현재는 Nginx가 주류를 이루고 있습니다.
  5. ASGI 서버: ASGI 서버는 웹 서버와 웹 애플리케이션 사이의 브리지 역할을 합니다. ASGI 서버도 ASGI 사양을 준수하지만 주요 작업은 요청 전달의 성능 요구 사항을 충족하는 것이므로 주로 ASGI의 "G"(게이트웨이) 부분을 관리합니다. 그 코드는 개발자가 웹 애플리케이션 비즈니스 및 라우팅 로직을 작성하는 데 친숙하지 않습니다. 현재 가장 잘 알려진 ASGI 서버는 Uvicorn이며, 원래 WSGI 서버 Gunicorn에서 가져온 uvicorn.workers.UvicornWorker도 옵션입니다. 프로덕션 환경에서 권장되는 사용법입니다.

과거에는 WSGI용 프로덕션 환경 솔루션이 주로 Nginx Gunicorn Flask(Django)였지만, 현재 ASGI용 프로덕션 환경 솔루션은 Nginx Uvicorn FastAPI입니다.

한 가지 더. FastAPI의 이름과 소개를 보면 API 서비스 구축을 위해 설계된 것이 분명합니다. 실제로 핵심 코드는 바로 그것과 같습니다. 완전히 자체 구현되는 전통적인 프레임워크라기보다는 다양한 프레임워크의 장점을 결합한 프레임워크에 가깝다고 할 수 있습니다. 빈 껍질에서 시작하여 필요하고 적합한 구성 요소를 조립합니다. 예를 들어 템플릿 엔진이 없습니다. 템플릿 렌더링이 필요한 웹 애플리케이션을 구축하기 위해 이를 사용해야 하는 경우 필요한 템플릿 엔진을 선택하고 결합할 수 있습니다. 물론 Starlette에 내장된 Jinja2를 사용할 수도 있습니다(예, Flask에도 내장되어 있습니다).

플라스크가 죽었다고 말하는 이유

위에 언급된 FastAPI의 장점만으로는 Flask가 죽었다고 결론을 내리기에는 부족합니다. 그렇다면 나는 왜 이런 견해를 갖고 있는가? 이는 주로 개발자와 사용자 사이의 인기로 귀결됩니다.

여기서 '인기'는 다소 주관적입니다. 제가 생각할 수 있는 지표는 다음과 같습니다.

  1. 커뮤니티 활동(https://github.com/pallets/flask/issues): 프로젝트의 이슈 수와 풀 요청 수를 예로 들어보세요. Flask에는 한 자리 숫자만 있으며 FastAPI와는 완전히 다른 리그에 속합니다. 이는 실제로 프로젝트가 더 이상 활성화되지 않는다는 측면에서 반영됩니다. 프로젝트가 활성화되면 기존 사용자는 더 많은 요구 사항을 갖게 됩니다. 그들이 질문을 하지 않는다면 그것은 그들이 떠났다는 것을 의미합니다. 그리고 새로운 사용자는 분명히 온갖 문제를 겪게 될 것입니다. 상세한 문서가 있더라도 질문하고 코드를 제공하기 위해 오는 사용자가 여전히 많이 있어야 합니다. 이러한 상황이 없다는 것은 사용자 수가 적다는 것을 의미합니다.
  2. 토론열: 즉, 블로그 게시물, Stack Overflow, 기타 웹사이트에서 문의 및 토론의 인기가 높습니다. 요즘 Flask에 관해 글을 쓰는 사람이 거의 없다는 것은 분명한 사실입니다.
  3. 개발 반복 빈도(https://github.com/pallets/flask/pulls): 커밋 기록을 보면 Flask에는 주요 기능 없이 가끔 버그를 수정하는 관리자가 한 명뿐이라는 것을 알 수 있습니다. 개발 중입니다.
  4. 주요 인물의 영향: 프로젝트 개시자인 Flask의 핵심 인물은 오랫동안 프로젝트 참여를 중단했습니다. 프로젝트 기여 기록에 따르면 Armin Ronacher는 6년 전 마지막으로 개발에 기여했습니다.

제 생각에는 이 모든 상황은 Flask의 전성기가 지나고 FastAPI가 떠오르는 스타임을 시사합니다.

마지막으로 Flask/FastAPI 배포에 이상적인 플랫폼인 Leapcell을 소개하겠습니다.

Leapcell은 최신 분산 애플리케이션을 위해 특별히 설계된 클라우드 컴퓨팅 플랫폼입니다. 종량제 가격 모델을 통해 유휴 비용이 발생하지 않으므로 사용자는 실제로 사용한 리소스에 대해서만 비용을 지불하면 됩니다.

Is Flask Dead? Is FastAPI the Future?

WSGI/ASGI 애플리케이션을 위한 Leapcell의 고유한 장점:

1. 다국어 지원

  • JavaScript, Python, Go 또는 Rust에서의 개발을 지원합니다.

2. 무제한 프로젝트 무료 배포

  • 사용량에 따라 요금이 부과됩니다. 요청이 없을 시에는 요금이 부과되지 않습니다.

3. 비교할 수 없는 비용 효율성

  • 유휴 수수료 없이 사용한 만큼만 지불하세요.
  • 예를 들어 25달러로 694만 개의 요청을 지원할 수 있으며 평균 응답 시간은 60밀리초입니다.

4. 단순화된 개발자 경험

  • 손쉬운 설정을 위한 직관적인 사용자 인터페이스.
  • 완전 자동화된 CI/CD 파이프라인 및 GitOps 통합.
  • 실행 가능한 통찰력을 제공하는 실시간 지표 및 로그.

5. 손쉬운 확장성과 고성능

  • 높은 동시성을 쉽게 처리할 수 있는 자동 확장.
  • 운영 오버헤드가 없어 개발자가 개발에 집중할 수 있습니다.

문서에서 자세히 알아보세요!

Leapcell 트위터: https://x.com/LeapcellHQ

위 내용은 플라스크는 죽었는가? FastAPI는 미래인가?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.