FastAPI는 현대적인 웹 API를 빠르게 구축할 수 있도록 도와주는 경량의 웹 프레임워크입니다. Python의 비동기 기능을 활용하여 매우 높은 성능을 제공하며, 개발자에게는 사용의 용이성과 명확한 문서화를 제공합니다. 본 글에서는 FastAPI 서버 개발과 Pydantic을 이용한 데이터 모델링에 대해 자세히 설명하겠습니다.
1. FastAPI란?
FastAPI는 Python 3.6 이상의 타입 힌트를 적극적으로 활용하여 API 문서를 자동으로 생성할 수 있는 프레임워크입니다. RESTful API, GraphQL API를 쉽게 만들 수 있으며, 비동기 처리를 지원하여 높은 성능을 제공합니다.
1.1 특징
- 높은 성능: 스타트업과 규모가 큰 프로젝트에서 동시에 사용할 수 있을 정도로 빠릅니다.
- 간편한 사용법: Flask와 유사한 방식으로 쉽게 배울 수 있습니다.
- 자동 문서화: OpenAPI와 JSON Schema를 기반으로 API 문서가 자동으로 생성됩니다.
- 타입 안전성: Pydantic과의 통합을 통해 데이터 검증과 변환이 매우 쉽고 안전합니다.
2. Pydantic이란?
Pydantic은 Python 데이터 검증 및 설정 관리 도구입니다. Python의 타입 힌트를 활용하여 입력된 데이터의 유효성을 검사하고, 데이터 변환 및 직렬화를 관리합니다. FastAPI는 Pydantic을 모델의 입력 및 출력을 다루는 데 활용합니다.
2.1 Pydantic의 주요 기능
- 데이터 유효성 검사: 입력된 데이터가 지정된 형식에 맞는지 확인합니다.
- 데이터 직렬화 및 역직렬화: 모델 인스턴스를 JSON과 같은 형식으로 쉽게 변환할 수 있습니다.
- 에러 메시지: 데이터 검증 시 쉽게 이해할 수 있는 에러 메시지를 제공합니다.
- 환경 변수 지원: .env 파일을 통해 환경 변수를 쉽게 로드할 수 있습니다.
3. FastAPI 및 Pydantic 설치하기
FastAPI와 Pydantic은 pip를 통해 쉽게 설치할 수 있습니다. 다음 명령어를 사용하여 설치합니다:
pip install fastapi uvicorn pydantic
여기서 uvicorn
은 ASGI 서버로 FastAPI 애플리케이션을 실행하는 데 사용됩니다.
4. FastAPI 서버 개발하기
우선 FastAPI 애플리케이션을 생성한 후, Pydantic 모델을 사용하여 데이터 모델링을 시작합니다. 간단한 예제로 북(Book) API를 만들어보겠습니다.
4.1 FastAPI 애플리케이션 생성
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
async def root():
return {"message": "Hello, FastAPI!"}
4.2 Pydantic 모델 생성
이제 API에 사용할 Pydantic 모델을 정의해 보겠습니다. 북(Book) 모델을 정의하려면 다음과 같이 작성할 수 있습니다:
from pydantic import BaseModel
from typing import Optional
class Book(BaseModel):
id: int
title: str
author: str
description: Optional[str] = None
year: Optional[int] = None
4.3 API 엔드포인트 추가하기
이제 FastAPI 애플리케이션에 북 데이터를 추가하고 가져오는 엔드포인트를 추가합니다:
books = []
@app.post("/books/", response_model=Book)
async def create_book(book: Book):
books.append(book)
return book
@app.get("/books/{book_id}", response_model=Book)
async def read_book(book_id: int):
for book in books:
if book.id == book_id:
return book
return {"error": "Book not found"}
5. API 테스트하기
API를 테스트하기 위해서는 Uvicorn 서버를 실행하고, Postman이나 curl과 같은 도구를 사용할 수 있습니다. 아래 명령어로 서버를 실행합니다:
uvicorn main:app --reload
이제 브라우저에서 http://127.0.0.1:8000/docs
에 접속하면 FastAPI가 자동으로 생성한 API 문서를 확인할 수 있습니다.
6. Pydantic의 고급 기능
Pydantic은 단순한 데이터 모델링 외에도 다음과 같은 여러 고급 기능을 제공합니다:
6.1 Validation (유효성 검사)
Pydantic은 유효성 검사기를 사용자 정의하여 제대로 사용하지 않은 형식이나 잘못된 값에 대해 쉽게 제어할 수 있습니다:
from pydantic import constr
class User(BaseModel):
username: constr(min_length=4, max_length=20)
email: EmailStr
class Config:
anystr_strip_whitespace = True
6.2 Nested Models (중첩 모델)
Pydantic 모델은 서로 중첩될 수 있어 복잡한 데이터 구조를 작업하는 데 매우 유용합니다:
class Publisher(BaseModel):
name: str
address: Optional[str] = None
class BookWithPublisher(BaseModel):
title: str
author: str
publisher: Publisher
7. 결론
FastAPI와 Pydantic을 함께 사용하면 효율적이고 강력한 웹 API를 쉽게 구축할 수 있습니다. FastAPI의 비동기 처리 능력과 Pydantic의 데이터 유효성 검사는 개발 생산성을 극대화하는 데 주요한 요소입니다. 본 강좌에서는 간단한 예제를 통해 FastAPI와 Pydantic을 사용하여 데이터 모델링의 기초를 살펴봤습니다. 이를 바탕으로 더 복잡한 API를 설계하고 구현할 수 있습니다. FastAPI와 Pydantic을 통해 여러분의 프로젝트에 강력한 웹 API를 추가해보시기 바랍니다.