FastAPI - 현대적인 Python 백엔드 프레임워크의 정수

2025. 4. 13. 16:05Framework/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 - 자바스크립트로 백엔드를 만든다는 것의 의미에 대해서라는 내용의 주제를 다룰 예정이다.