매일 업데이트
2022-12-06 09:42 8 min

둘 중 어느 것이 당신에게 적합합니까?

웹 애플리케이션 개발 시, Python 프로그래밍 언어에서 자주 접하게 되는 프레임워크로는 FastAPI와 Flask가 있습니다.

Python은 백엔드 개발, 데이터 과학, 앱 개발 등 다양한 분야에서 활용되는 대표적인 프로그래밍 언어입니다.

개발자들이 Python을 선호하는 이유는 기능적, 객체 지향적, 반영적 프로그래밍 등 다양한 스타일을 웹 또는 소프트웨어 애플리케이션 개발에 적용할 수 있기 때문입니다.

웹 프레임워크는 개발자들이 스레드 관리나 프로토콜 같은 복잡한 요소에 대한 고민 없이 애플리케이션 개발에 집중할 수 있도록 함수, 모듈, 라이브러리 및 클래스들을 모아 제공합니다. Django나 Ruby on Rails 등이 이러한 프레임워크의 예시입니다.

반면, 마이크로 프레임워크는 필요 최소한의 기능만을 갖춘 소규모 프레임워크를 의미합니다.

FastAPI는 프레임워크로 분류되는 반면, Flask는 마이크로 프레임워크로 분류됩니다. Ruby의 Sinatra도 마이크로 프레임워크의 대표적인 예입니다.

개발자로서 여러 프레임워크나 마이크로 웹 프레임워크를 접해봤을 것이며, 본인의 개발 필요에 가장 적합한 프레임워크를 결정하는 데 어려움을 느낄 수도 있습니다. 여기서는 FastAPI와 Flask 프레임워크의 작동 방식에 대해 자세히 알아보겠습니다.

FastAPI란 무엇인가?

FastAPI는 REST API 및 고속 웹 애플리케이션 개발을 위한 Python 기반 웹 프레임워크입니다. 2018년에 처음 등장했으며 Python 3.6 버전 이상을 지원합니다.

이름처럼 FastAPI는 빠른 속도를 자랑하며, 성능 면에서 GO나 NodeJS와 비교될 정도로 뛰어납니다. 이미 Uber나 Netflix 같은 주요 기업들이 앱 개발에 FastAPI 프레임워크를 적극적으로 활용하고 있습니다.

FastAPI의 주요 특징

  • 의존성 주입: FastAPI는 클래스 간의 직접적인 종속성을 줄이는 의존성 주입 기능을 내장하고 있습니다. 이로 인해 코드 변경이 용이해지고, 코드 모듈성이 향상되어 확장성이 높아집니다.
  • 동시성 지원: FastAPI는 즉시 사용 가능한 동시성 기능을 제공하여 비동기/대기 관리 또는 이벤트 루프를 생성하는 번거로움을 줄여줍니다.
  • 내장된 유효성 검사: FastAPI는 데이터 유효성 검사 기능을 내장하고 있어 외부 도구 없이도 데이터 유효성 검증이 가능합니다. 이 프레임워크는 잘못된 데이터 타입을 감지하고 JSON 형식으로 오류를 반환합니다. Pydantic 라이브러리를 통해 데이터 유효성 검사가 이루어져 코드 작성 중 발생하는 오류를 줄여줍니다.

FastAPI의 장점 👍

  • 고속 처리: FastAPI는 Python 프레임워크 중에서도 빠른 속도를 자랑합니다. 프로그래밍 경험이 부족하더라도 FastAPI를 활용해 API를 쉽게 만들 수 있습니다.
  • 내장 모니터링 도구: FastAPI는 특정 임계값에 도달했을 때 경고를 제공하는 내장 모니터링 도구를 제공합니다.
  • 쉬운 적응성: FastAPI는 툴킷 기반 접근 방식을 채택하여 모든 것을 처음부터 만들 필요 없이 다양한 상용구를 활용하여 강력한 API를 구축할 수 있습니다.

FastAPI의 단점 👎

  • 내장 보안 시스템 미흡: FastAPI는 기본적으로 내장 보안 시스템을 제공하지 않지만, fastapi.security 모듈을 통해 보안 기능을 추가할 수 있습니다.
  • 상대적으로 새로운 프레임워크: FastAPI는 아직 개발이 진행 중이며 개선의 여지가 많습니다. 커뮤니티가 성장하고 있지만, 다른 Python 프레임워크와 비교했을 때 규모가 작은 편입니다.

Flask란 무엇인가?

Flask는 단순하고 확장 가능한 코어를 갖춘 가벼운 오픈 소스 Python 마이크로 프레임워크입니다. Flask는 특정 라이브러리나 도구를 필요로 하지 않으며, 요청 처리 및 라우팅과 같은 웹 개발에 필수적인 구성 요소들을 제공합니다.

2010년에 출시된 Flask는 Werkzeug 및 Jinja2를 기반으로 합니다. Flask-RESTful, Flask-RESTPlus, Flask-Classful 등과 같은 확장 기능을 활용해 REST 애플리케이션을 지원합니다. Flask를 사용하여 소셜 미디어 봇, 정적 웹사이트, 전자 상거래 플랫폼 등을 개발할 수 있습니다. Netflix, Lyft, Zillow 등 유명 기업들이 Flask를 활용하고 있습니다.

Flask의 주요 특징

  • 내장 서버 및 빠른 디버거: Flask는 내장 서버를 통해 실제 서비스 환경을 시뮬레이션할 수 있습니다. 따라서 앱을 실제 환경에 배포하지 않고도 디버깅을 수행할 수 있습니다.
  • Jinja2 템플릿 엔진: Jinja2는 표현력이 풍부하고 빠르며 확장 가능한 템플릿 엔진입니다. 템플릿 내에 Python 구문과 유사한 코드를 작성할 수 있는 특수한 자리 표시자를 사용할 수 있습니다.
  • 경량 웹 프레임워크: Flask는 가볍지만 확장성이 뛰어난 웹 프레임워크입니다. 새로운 기능을 필요에 따라 추가하여 시간을 절약할 수 있습니다.
  • 단위 테스트 통합 지원: Flask는 단위 테스트를 위한 통합 지원 기능을 제공합니다. 따라서 다양한 시나리오를 시뮬레이션하고 앱을 쉽게 테스트할 수 있습니다.
  • 활발한 커뮤니티: Flask는 2010년부터 사용되어 왔으며, 뛰어난 문서화와 활발한 커뮤니티를 자랑합니다.

Flask의 장점 👍

  • 높은 유연성: 개발자는 Flask를 통해 앱의 작동 방식과 디자인을 자유롭게 제어할 수 있습니다.
  • 뛰어난 확장성: Flask는 대규모 애플리케이션 개발에도 적합하며, 최소한의 노력으로 필요한 작업을 수행할 수 있습니다.
  • 다양한 타사 라이브러리: Flask와 호환되는 다양한 타사 라이브러리를 활용하여 더욱 다양한 기능을 구현할 수 있습니다.

Flask의 단점 👎

  • 복잡한 구조: Flask의 작동 방식을 이해하는 것이 다소 어려울 수 있으며, 사용하기 위해서는 프로그래밍에 대한 기본적인 지식이 필요합니다.
  • 상대적으로 느린 속도: FastAPI와 비교했을 때, Flask는 속도 면에서 다소 느립니다.

FastAPI vs Flask: 기능 비교

데이터 유효성 검사

FastAPI는 데이터 유효성 검사를 위한 Pydantic 라이브러리를 내장하고 있어 데이터 유효성 검사가 용이합니다. 개발자는 FastAPI를 사용해 매개변수에 대한 유효성 검사 규칙과 추가 정보를 쉽게 정의할 수 있습니다.

반면, Flask는 유효성 검사 기능이 부족합니다. 예를 들어, 프로그램이 정수를 입력받아야 하지만 문자열을 입력받으면 오류가 발생합니다. Flask를 사용하는 개발자는 데이터 유효성 검사를 직접 처리해야 합니다. Flask-Marshmallow 또는 Flask-Inputs와 같은 커뮤니티 라이브러리를 활용하여 데이터 유효성 검사를 할 수 있지만, 이러한 라이브러리는 기본 프레임워크와 별도로 개발되어 호환성 문제가 발생할 수도 있습니다.

문서 지원

문서는 API를 사용하는 다른 사람들에게 사용 방법을 안내하는 데 필수적입니다. FastAPI로 API를 구축하면 문서가 자동으로 생성됩니다. FastAPI는 깔끔한 사용자 인터페이스(UI)를 제공하며, 프런트엔드 코드가 없더라도 API를 쉽게 테스트할 수 있습니다.

FastAPI 사용 시, /docs 또는 /redoc에 접속하여 Swagger UI를 통해 자동화된 문서에 쉽게 접근할 수 있습니다. 문서에는 API의 모든 엔드포인트가 자세히 나열되어 있습니다.

Flask는 자동 문서화 기능을 제공하지 않습니다. 문서화 기능을 지원하지만 수동으로 작성해야 합니다.

WSGI 및 ASGI

Flask는 서버와 웹 애플리케이션 간의 인터페이스를 정의하는 Python 표준인 WSGI(Web Server Gateway Interface)를 사용합니다. WSGI는 초보자에게 다소 어려울 수 있지만, Ruby 또는 PHP 경험이 있는 개발자에게는 익숙할 수 있습니다.

FastAPI 개발자들은 ASGI(Asynchronous Server Gateway Interface)를 도입했습니다. ASGI를 사용하면 비동기 이벤트 기반 웹 애플리케이션을 만들 수 있습니다. ASGI는 비동기 Python 웹 서버, 애플리케이션, 프레임워크 간의 표준 인터페이스입니다.

FastAPI 앱 위에 Flask와 같은 WSGI 프레임워크의 앱을 탑재할 수도 있습니다. 이렇게 하면 루트 폴더에 FastAPI 앱을 두고 Flask(WSGI)가 다른 경로에서 요청을 처리하도록 설정할 수 있습니다.

오류 메시지 표시

FastAPI는 JSON 형식으로 오류 메시지를 표시하는 반면, Flask는 HTML 페이지를 사용하여 오류 메시지를 표시합니다.

Flask는 2010년에 처음 등장했으며 오랜 시간 동안 탄탄한 커뮤니티를 형성해 왔습니다. FastAPI는 2018년에 개발되어 아직 커뮤니티 규모가 크지 않습니다. 코딩 중 막히는 경우, 활발한 커뮤니티는 큰 도움이 됩니다. 또한 대규모 커뮤니티는 프레임워크의 새로운 기능 개발에도 기여할 가능성이 높습니다.

Flask FastAPI
데이터 검증 검증 기능 없음 내장 검증 기능 제공
커뮤니티 활발한 커뮤니티 상대적으로 작은 커뮤니티
오류 메시지 표시 HTML 페이지에 표시 JSON 형식으로 표시
문서 지원 수동으로 작성 자동 생성
비동기 작업 지원 지원 안 함 지원 함
성능 WSGI 환경에서 제약 ASGI 환경

FastAPI를 써야 할 때, Flask를 써야 할 때

FastAPI와 Flask는 모두 훌륭한 프레임워크이지만, 각각 다른 사용 사례에 더 적합합니다. Flask는 마이크로 프레임워크이지만, FastAPI는 Flask를 기반으로 개발되었다는 점을 고려해야 합니다.

Flask는 마이크로 프레임워크인 반면, FastAPI는 API 개발에 필요한 모든 도구를 갖춘 풀 스택 프레임워크입니다.

FastAPI는 API를 개발할 때 적합합니다. FastAPI는 코딩 경험이 부족한 개발자도 빠르게 백엔드 서버를 만들 수 있도록 다양한 기능을 제공합니다. 속도와 성능이 중요한 경우에는 FastAPI가 최적의 선택입니다. 대용량 트래픽을 처리해야 하는 CDN을 개발할 때도 유용합니다.

반면, Flask는 다양한 도구를 제공하며 새로운 아이디어를 구현하거나 애플리케이션 프로토타입을 만들 때 유용합니다. 엔드포인트가 적은 마이크로 서비스를 만들 때도 좋은 선택입니다. 또한, 작은 애플리케이션을 개발하면서 향후 확장 가능성을 고려해야 하는 경우에도 Flask가 적합합니다.

FastAPI는 언제 사용하나요?

  • 웹 API 개발
  • 오류가 적고 안정적인 API 개발

Flask는 언제 사용하나요?

  • 프로토타입 개발
  • 웹 애플리케이션 개발

결론

Python 앱 개발에 FastAPI를 사용할지 Flask를 사용할지 선택하는 것은 개발 필요와 선호도에 달려 있습니다. 고성능 웹 API를 개발해야 한다면 FastAPI가 훌륭한 선택입니다. 반면, 빠른 프로토타입 개발이나 마이크로 서비스 개발을 위해서는 Flask가 더 적합할 수 있습니다.

저자
Korea

기술 트렌드와 실용적인 팁을 전하는 लेखक입니다.