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의 강력한 기능을 활용하여 입력 데이터의 유효성과 데이터 타입을 간편하게 확인할 수 있습니다. 이를 통해 안정적이고 신뢰성 있는 웹 애플리케이션을 개발할 수 있습니다.