1. 개요
#!syntax python
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
async def index():
return {"Hello": "World"}
# ASGI 서버 (예: Uvicorn)를 통해 실행
# uvicorn main:app
FastAPI는 Python 3.7+ 버전의 표준 타입 힌트(Type Hints)를 기반으로 API를 구축하기 위한 현대적이고 빠른(고성능) 웹 프레임워크이다. 이름처럼 개발 속도의 빠름(Fast to code)과 요청 처리의 빠름(Fast to run)을 핵심 가치로 내세운다.
FastAPI는 웹 프레임워크 기능의 기반으로 ASGI 프레임워크인 Starlette을 사용하고, 데이터 유효성 검사, 직렬화 및 자동 문서 생성을 위해 Pydantic 라이브러리를 핵심적으로 활용한다. 이 덕분에 개발자는 복잡한 설정 없이 표준 파이썬 타입 힌트만으로 강력한 기능을 쉽게 구현할 수 있다. MIT 라이선스 하에 배포되는 완전한 오픈 소스 프로젝트이다.
2. 특성
FastAPI는 현대적인 API 개발에 필요한 다양한 기능을 간결하고 효율적으로 제공한다.- 고성능: Starlette과 Pydantic을 기반으로 하여 Node.js 및 Go와 비견될 만한 매우 높은 처리 성능을 제공한다.
- 직관성 및 쉬운 학습 곡선: 잘 구조화되어 있고 사용하기 쉽도록 설계되었다. 공식 문서가 매우 상세하고 다양한 예제를 제공하여 배우기 쉽다.
- 간결한 코드: 코드 중복을 최소화하도록 설계되었다. 예를 들어, 함수 매개변수에 타입 힌트를 선언하는 것만으로 요청 본문(request body), 경로 매개변수(path parameter), 쿼리 매개변수(query parameter), 쿠키 등을 정의하고 데이터 유효성 검사까지 동시에 수행할 수 있다.
- 표준 기반: API 명세 작성을 위한 OpenAPI 표준과 데이터 구조 정의를 위한 JSON 스키마 표준을 완벽하게 지원하고 이를 기반으로 동작한다.
- 타입 힌트의 적극적 활용: Pydantic과 연계하여 파이썬 표준 타입 힌트만으로 데이터 유효성 검사, 직렬화/역직렬화, 설정 관리 등을 처리한다.
- 비동기 지원: 파이썬의 async, await 문법을 완벽하게 지원하여, ASGI 기반 위에서 높은 동시성 처리가 필요한 비동기 API를 쉽게 구현할 수 있다. 동기 함수 역시 일반적인 방식으로 지원한다.[1]
FastAPI의 코드는 대부분 Python으로 작성되었으며, 핵심적인 웹 기능과 데이터 처리 성능은 각각 Starlette과 Pydantic에 크게 의존한다.
3. 여담
- Flask와 비교하면 데이터 검증, 비동기 처리, 자동 문서 생성 등 더 많은 기능을 내장하고 있으며, 풀스택 프레임워크인 Django보다는 가볍고 REST API 개발에 더 특화되어 있다.
- FastAPI가 큰 인기를 얻으며 제출되는 이슈나 Pull Request(PR)의 양이 상당하지만, 프로젝트의 핵심적인 최종 검토 및 결정 권한은 여전히 창시자인 세바스티안 라미레스(tiangolo)에게 집중되어 있는 편이다. 이로 인해 기여 사항(PR)의 검토 및 병합에 병목 현상이 발생하여, 프로젝트의 규모나 커뮤니티의 기대에 비해 새로운 기능의 추가나 개선 속도가 상대적으로 더디다는 비판 혹은 우려 섞인 시각이 존재한다.[2]