[python] FastAPI에서 유효성 검사 구현하기

FastAPI는 Python을 위한 현대적이고 빠른 웹 프레임워크입니다. 이 프레임워크는 뛰어난 성능과 간결한 구문을 제공하여 개발자가 효율적인 웹 애플리케이션을 구축할 수 있도록 도와줍니다.

이번 포스트에서는 FastAPI에서 유효성 검사를 구현하는 방법에 대해 알아보겠습니다.

유효성 검사란?

유효성 검사는 입력 데이터가 특정 조건을 충족하는지 확인하는 과정입니다. 예를 들어, 사용자가 회원가입을 할 때 사용자 이름, 이메일, 비밀번호 등의 데이터가 올바른 형식으로 제공되었는지 확인하는 것이 유효성 검사의 한 예입니다.

Pydantic을 통한 유효성 검사

FastAPI는 Pydantic 라이브러리를 내부적으로 사용하여 유효성 검사를 구현합니다. Pydantic은 데이터 유효성 검사와 JSON 직렬화를 위한 강력한 도구로, FastAPI와의 통합이 용이합니다.

from fastapi import FastAPI
from pydantic import BaseModel

app = FastAPI()

class User(BaseModel):
    username: str
    email: str
    password: str

@app.post("/user")
async def create_user(user: User):
    # user 객체가 유효한지 확인
    # 유효하지 않을 경우 에러 응답을 반환
    if not is_valid_user(user):
        return {"error": "Invalid user data"}
    
    # 유효한 경우, 유저 생성 로직 구현
    # ...
    
    return {"message": "User created successfully"}

위의 예시에서는 User 라는 Pydantic 모델을 정의하였습니다. 이 모델은 username, email, password의 세 가지 필드로 구성되어 있습니다.

create_user 엔드포인트에서는 POST 요청으로 User 모델의 인스턴스를 받습니다. FastAPI는 자동으로 전송된 요청 데이터를 User 모델과 일치시킵니다. 이때, 데이터의 유효성을 확인하고 유효하지 않을 경우 에러 응답을 반환합니다.

is_valid_user 함수는 User 모델의 인스턴스가 유효한지를 확인하는 사용자 정의 함수입니다. 유효하지 않은 경우 에러 응답을 반환하도록 구현할 수 있습니다.

필수 필드 및 데이터 타입 검사

Pydantic은 필드의 유효성 검사 외에도 필수 필드 여부와 데이터 타입 검사를 지원합니다.

from fastapi import FastAPI
from pydantic import BaseModel

app = FastAPI()

class Item(BaseModel):
    name: str
    price: float
    quantity: int

@app.post("/item")
async def create_item(item: Item):
    # 필수 필드 (name, price, quantity)의 존재 여부 확인
    if not item.name or not item.price or not item.quantity:
        return {"error": "Missing required fields"}
    
    # 유효성 검사가 통과하면 아이템 생성 로직 구현
    # ...
    
    return {"message": "Item created successfully"}

위의 예시에서는 Item 모델에 name, price, quantity 필드가 필수로 포함되어야 함을 선언하였습니다. 만약 이러한 필수 필드가 누락된 경우 에러 응답을 반환합니다.

데이터 타입 검사 또한 Pydantic과 함께 사용할 수 있습니다. price 필드는 float 타입, quantity 필드는 int 타입으로 정의되어 있으므로, 유효성 검사에서 데이터 타입이 일치하는지도 확인할 수 있습니다.

결론

FastAPI와 Pydantic을 함께 사용하면 간단하게 유효성 검사를 구현할 수 있습니다. Pydantic의 강력한 기능을 활용하여 입력 데이터의 유효성과 데이터 타입을 간편하게 확인할 수 있습니다. 이를 통해 안정적이고 신뢰성 있는 웹 애플리케이션을 개발할 수 있습니다.