FastAPI - 현대적인 Python 백엔드 프레임워크의 정수
2025. 4. 13. 16:05ㆍFramework/FastAPI
1. FastAPI란?
: FastAPI는 2018년에 등장한 Python 3.6이상 버전 전용 웹 프레임워크로 주요 특징은 다음과 같다.
- 타입 힌트를 기반으로 한 자동 문서화 검증
- 비동기(Async, Await) 처리에 최적화
- Starlette(ASGI 프레임워크) + Pydantic(데이터 검증)의 조합
FastAPI는 개발작 작성한 코드로부터 다음을 자동으로 처리한다.
- 요청 데이터의 유효성 검사(Validation)
- 자동 Swagger 문서 생성
- 라우팅 및 HTTP 메서드 매핑
- OpenAPI 규격 지원
2. FastAPI 장점
기능 | 설명 |
비동기 지원 | async / await를 기본적으로 지원하여 고성능 처리 가능 |
타입 기반 유효성 검사 | Pydantic을 이용해 요청/응답 데이터 자동 검증 |
Swagger 자동 문서화 | /docs에서 바로 확인 가능 |
OpenAPI 호환 | API 문서를 다른 시스템과 쉽게 연동 가능 |
모듈화에 유리 | 대규모 프로젝트에서도 디렉토리 분리 및 의존성 주입 가능 |
3. 기본 코드 에제
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
class Item(BaseModel):
name: str
price: float
@app.get("/")
async def root():
return {"message": "Hello FastAPI!"}
@app.post("/items/")
async def create_item(item: Item):
return {"received": item}
- 자동 생성된 문서를 보려면
- Swagger UI : http://localhost:8080/docs
- ReDoc : http://localhost:8080/redoc
4. 요청/응답 유효성 검사는 어떻게 동작할까?
class User(BaseModel):
username: str
email: EmailStr
age: Optional[int] = None
- 요청 본문에서 email이 이메일 형식이 아니거나 누락되면 400 에러와 함께 에러 메시지 반한됨
5. 비동기(async) 구조란?
: FastAPI는 async def를 기반으로 작성되며 내부적으로 Starlette 프레임워크가 ASGI 서버와 연동되어 비동기 I/O를 처리한다.
📌 예시 : 동기 vs 비동기 비교
# 비동기적으로 외부 API 호출
@app.get("/call-api")
async def call_api():
async with httpx.AsyncClient() as client:
res = await client.get("https://api.example.com/data")
return res.json()
- Node.js처럼 논블로킹 I/O를 기본으로 처리하며, 다수의 요청도 효율적으로 처리 가능
6. 실무에서의 FastAPI 사용 패턴
분야 | 사용 사례 |
MVP 빠른 구축 | 관리자 페이지 + REST API |
마이크로서비스 아키텍처 | 서비스 단위의 API 서버로 구성 |
서버리스 환경 | Lambda, Cloud Function 등 |
데이터 처리 API | 모델 서빙, ETL API 등 |
AI/ML | 학습 모델 결과 API로 제공 (에: Huggingface) |
7. Flask, Django와 비교
항목 | FastAPI | Flask | Django |
문서 자동화 | Swagger 자동 생성 | ❌ 별도 설정 필요 | ❌ 기본 제공 X |
비동기 처리 | ✅ 기본 지원 | ❌ 직접 구성 필요 | ❌ 제한적 |
데이터 검증 | ✅ Pydantic 내장 | ❌ 수동 처리 | ❌ From 기반 |
학습 난이도 | 중간 | 쉬움 | 중간~높음 |
아키텍처 제공 | ❌ 자유로움 | ❌ 자유로움 | ✅ 풀스택 구성 |
8. 프로젝트 구조 예시 (대규모 프로젝트에서)
project/
├── app/
│ ├── main.py
│ ├── routers/
│ │ ├── users.py
│ │ └── items.py
│ ├── schemas/
│ ├── services/
│ └── models/
├── requirements.txt
└── run.py
- Router 단위 분리, Pydantic 스키마 분리, 의존성 주입(DI) 활용 등을 통해 확장 가능한 구조 설계 가능
9. 마무리 요약
- FastAPI는 현대적인 Python 백엔드 개발에 최적화된 프레임워크
- 타입 기반의 자동 검증, 비동기 처리까지 모두 지원
- Flask보다 구조화가 잘 되어 있고, Django보다 경량
- 소규모부터 MSA, AI API까지 다양하게 사용 가능
🔜 다음 포스팅에서는 Node.js - 자바스크립트로 백엔드를 만든다는 것의 의미에 대해서라는 내용의 주제를 다룰 예정이다.