[FastAPI] 왜 인기일까...?

SIK407·2025년 12월 30일

Python & FastAPI

목록 보기
5/6
post-thumbnail

◽ Python 웹 프레임워크


Reflex, Streamlit, Gradio 등등... 수많은 파이썬 웹 프레임워크가 있지만...

2025년 기준 Stack Overflow 사용자를 대상으로 한 웹 프레임워크 사용 설문에서
FastAPIFlaskDjango 순으로 사용한다고 응답했다.

[출처] Stackoverflow 2025 Developer Survey


✔ Django

Django인증, 어드민, ORM 등 많은 것들을 '기본 내장'으로 제공한다.
복잡한 서비스도 프레임워크가 정해준 레일 위에서 빠르게 만들기 좋다.

그래서 오래 굴릴 서비스(모놀리식/관리형 웹앱)에 강하다.

✔ Flask

공식 문서Flask는 시작부터 이렇게 소개한다.

Flask is a lightweight WSGI(Web Server Gateway Interface) web application framework.

Flask의 가장 큰 장점은 가벼워서
빠르게 시작하고 필요하면 복잡한 앱까지 확장 가능하다는 장점이 있다.

그래서 '간단한 API', '프로토타입' 등 빠르게 만들 수 있어 진입장벽이 낮고,
팀 취향대로 구성을 선택하기 좋아서 수요가 많다.

✔ FastAPI

FastAPI is a modern, fast (high-performance),
web framework for building APIs with Python based on standard Python type hints.
(FastAPI는 표준 파이썬 유형 힌트를 기반으로 파이썬으로 API를 구축하기 위한 최신의 빠른(고성능) 웹 프레임워크다.)

공식 문서에서
"고성능(빠름) + 표준 Python Typehint 기반 API 프레임워크"라고 강조한다.

게다가 2024년도 Stack Overflow 설문 기준보다 2025년도 사용률이 5%가 증가하여
강력한 추세를 보여주며, 파이썬 생태계의 전반적인 강점을 반영한다고 나와있다.

FastAPI의 사용률이 증가하는 추세인지, 더 알아보고자 한다.



◽ FastAPI

3.7+ 버전의 표준 타입 힌트(Type Hints) 기반, 빠른(고성능) 웹 프레임워크


✔ 구조

FastAPI는 내부적으로 Starlette라는 ASGI 프레임워크를 기반으로 동작한다.

ASGI (Asynchronous Server Gateway Interface)
Python 웹 서버, 프레임워크 및 애플리케이션 간의 비동기 표준 인터페이스

웹 프레임워크가 클라이언트와 "무엇을" 통신할지 담당한다면,
ASGI"어떻게" 이걸 응답할지 담당하는 방식을 관리한다.

Python 2는 WSGI를 통해 동기 방식으로 진행됐다.
하지만 Python 3가 출시되면서 비동기 작업을 처리하기 위한 구문이 추가되었다.

✔ Django & Flask의 비동기

Flask의 경우, {Async, await}을 최근에 사용할 수 있게 바뀌었다.
하지만 WSGI(동기) 라는 것은 변함이 없다.

- [흐름] 요청 → A DB에서 읽어옴 → 처리 → B DB에서 읽어옴 → 응답
- (1번 요청)이 들어옴
- 1[A DB로 I/O 요청] → await
- 1[B DB로 I/O 요청] → await
- 둘 다 응답오면 요청에 대한 응답
- 그 다음 (요청 2번)이 들어옴
한 요청에 대한 작업 중, 비동기 처리가 가능한 작업만 처리할 뿐,
여러 요청 자체는 비동기 적으로 받을 수 없다. WSGI 구조는 변하지 않기 때문이다.
(공식 문서 조차 Flask대신 Quart를 사용하라고 안내해주고 있다.)

Django의 경우 reddit 글과 공식문서를 참고했다.

ASGI로 실행하게 되면 '전체 요청 스택'을 async로 돌릴 수 있다고 한다.
또한 WSGI로 실행을 해도 비동기가 작동은 하지만, 성능 저하가 일어날 수 있다고 한다.

✔ Uvicorn

웹 프레임워크를 고성능 이벤트 루프(uvloop) 위에서 실행해 주는 ASGI 서버

'Asyncio' 기반으로 개발된 가볍고 효율적인 ASGI 서버다.

ASGI 서버
외부에서 들어오는 HTTP/WebSocket 연결을 받아 웹 프레임워크(애플리케이션)에 전달하고,
만든 응답을 다시 전송하는 역할을 Uvicorn 같은 ASGI 서버가 수행한다.

FastAPI는 기반 프레임워크인 Starlette의 처리 흐름 위에서 동작한다.
(Route / 미들웨어 / Request·Response 등)

그 과정에서 FastAPI
의존성 주입(Depends), Pydantic 기반 검증/직렬화, OpenAPI 문서 생성 등 추가로 수행한 뒤,
응답을 Uvicorn에 넘긴다.


✔ Uvloop

Asyncio 이벤트 루프를 완벽하게 대체할 수 있는 라이브러리다.
벤치마크 결과에 따르면 uvloop를 사용하면 Asyncio가 2~4배 빨라지는 것으로 나타났다.

✔ Gunicorn & WSGI

Gunicorn
Python WSGI로 WEB Server(Nginx 등)로부터 서버사이드 요청을 받으면 WSGI를 통해 서버 애플리케이션로 전달해주는 역할을 수행.

WSGI(Web Server Gateway Interface)
파이썬 애플리케이션이(파이썬 스크립트) WEB Server(Nginx 등)와 통신하기 위한 인터페이스
(Gunicorn, uWSGI 등)

Gunicorn을 사용하는 이유는
파이썬 웹 애플리케이션(Django, Flask 등)을 실제 서비스 환경에서 안정적이고 효율적으로 실행하기 위함이다.

WSGI 표준을 준수하면서 빠른 성능, 멀티 프로세스(워커) 관리, 설정 용이성, WEB Server 연동
제공하여 애플리케이션 서버 역할을 수행하기 때문이다.


✔ 아키텍처

GunicornUvicorn처럼 여러 ASGI 서버 워커를 실행한다. (멀티 프로세스)
프로세스 관리자 역할을 하며, 특정 포트와 IP 주소에서 요청을 Uvicorn으로 전달한다.

Uvicorn데이터를 ASGI 표준 형식으로 변환하고,
FastAPI는 이 표준을 활용하여 비동기 프로그래밍이 가능해진다.

profile
감자 그 자체

0개의 댓글