티스토리 뷰

IT/FastAPI

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

Stv 2025. 4. 13. 16:05

목차


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