[FastAPI] 소개

1 minute read

개요

웹 서비스를 이용하여 자료 제공을 위해 REST API 개발이 필요하게 되었습니다.

간편하게 개발할 수 있는 방법을 찾던 중 FastAPI 라는 프레임워크를 알게 되어 간단하게 내용 정리를 하려 합니다.

FastAPI란?

  • Python 기반의 프레임워크 (python 3.6 이상에서 지원)
  • 비동기 기반의 웹 프레임워크
  • 자동 문서화(Swagger, ReDoc) 제공
  • Pydantic 기반의 데이터 검증과 직렬화 지원
  • RESTful API 개발에 최적화되어 있으며, 고성능 API 서버를 손쉽게 구축할 수 있게 해줌

FastAPI 의 주요 특징

특징 설명
비동기 지원 async/await를 통해 높은 처리량과 빠른 응답을 제공
자동 문서화 Swagger UI, ReDoc 문서 자동 생성 (OpenAPI 3 기반)
타입 기반 데이터 검증 Python 타입 힌트 + Pydantic 으로 Request/Response 검증
성능 Uvicorn 등 ASGI 서버와 함께 사용하면 성능이 매우 우수
간결한 코드 선언적이고 간결한 코드 스타일
모듈성 & 확장성 의존성 주입(Dependency Injection) 지원

다른 파이썬 웹 프레임워크와 비교

항목 FastAPI Flask Django REST Framework
비동기 처리 내장 지원 (ASGI 기반) 기본 지원 없음 (추가 모듈 필요) 부분적, 복잡함
성능 매우 빠름 (Node.js 수준) 중간 느림
타입 검증 자동 (타입 힌트 + Pydantic) 수동 수동 또는 serializers
문서 자동화 내장 Swagger/ReDoc 수동 구성 Swagger 제공 (설정 필요)
학습 곡선 보통 (타입 힌트 필요) 매우 쉬움 높음
생산성 높음 높음 높음
프로젝트 구조 유연 매우 유연 정형화됨 (Django 스타일)

설치 방법

FastAPI 를 사용하기 위해서는 python 이 필요합니다.

python 설치 과정은 생략하도록 하겠습니다.

pip를 이용하여 FastAPI 설치

$ pip install fastapi

Uvicorn 설치 (비동기 웹서버)

$ pip install fastapi uvicorn

코드 작성 및 실행

  • main.py 파일 작성
from typing import Union

from fastapi import FastAPI

app = FastAPI()


@app.get("/")
def read_root():
    return {"Hello": "World"}


@app.get("/items/{item_id}")
def read_item(item_id: int, q: Union[str, None] = None):
    return {"item_id": item_id, "q": q}
  • uvicorn 을 이용하여 서버 실행
$ uvicorn main:app --reload

  • 동작 확인
$ curl http://127.0.0.1:8000
{"Hello":"World"}

$ curl http://127.0.0.1:8000/items/5?q=somequery
{"item_id":5,"q":"sonequery"}

정리

FastAPI 는 python 기반의 프레임워크로 REST API 개발에 특화되어 있습니다.

개발이 쉽고 직관적이며, 특히 API 문서 자동화 기능이 좋아보입니다.

다른 웹 서비스를 같이 수행해야 한다면 DJango 와 같은 프레임워크를 사용할 수 있겠지만, REST API 개발이 목적이라면 FastAPI가 좋은 선택이 될 수 있을 것 같습니다.

참고

  • https://fastapi.tiangolo.com/ko/

Leave a comment