
Pydantic은 파이썬의 타입들을 활용한 데이터 검증 라이브러리입니다. 주로 주어진 데이터의 오류를 찾고, 런타임에서도 타입 힌트를 제공하는 역할을 합니다.
Pydantic을 사용하면 파이썬의 객체를 TypeScript의 방식처럼 선언할 수 있습니다.
데이터 검증
Pydantic에서 제공하는 BaseModel 클래스를 상속하여 사용할 수 있습니다. 특정 데이터가 BaseModel을 상속한 Pydantic 클래스는 어떤 입력값을 받았을 때 그 값이 해당 클래스에서 정의된 값을 가지는지 검사하는 기준이 될 수 있습니다.
from pydantic import BaseModel
class User(BaseModel):
name: str # 문자열
age: int # 정수
createdAt: datetime # 날짜
dimensions: tuple[int, int] # (정수, 정수)
preference: Optional[str] = None # 기본값 None인 문자열
rating: int | float # 정수 또는 실수
friends: List[str] = [] # 기본값 []인 문자열[]
만약 클래스에서 정의한 값의 존재 여부 뿐만 아니라 기본값, 범위, 별칭 등 부가적인 조건을 추가하고자 한다면 Field() 함수를 사용하면 됩니다.
from pydantic import BaseModel, Field
from typing import List
class Product(BaseModel):
# 별칭과 설명
name: str = Field(alias="product_name", description="상품의 전체 이름")
# 범위 제한 (0 이상 100 이하)
price: float = Field(gt=0, lt=100)
# 문자열 길이 제한 (3 이상 10 이하)
code: str = Field(min_length=3, max_length=10, default="ABC")
# 가변 객체(list 등)의 기본값
tags: List[str] = Field(default_factory=list)
다양한 타입 정의
파이썬의 기본적인 타입뿐 만 아니라, Pydantic에서 정의한 특수한 타입들도 사용할 수 있습니다.
from pydantic import BaseModel, EmailStr
from pydantic_extra_types.currency_code import Currency
class currency(BaseModel):
alpha_3: Currency // 통화 기호 ('KRW', 'USD', ...)
class Model(BaseModel):
email: EmailStr // 이메일 형식('contact@mail.com')
유효성 검증
특정 변수나 field의 값이 바뀔 때 마다 유효성을 검사하고 싶다면, field_validator() 함수를 사용하면 됩니다. 해당 함수는 데코레이션으로 사용할 수 있으며, 인자로 받은 값이 런타임에서 수정될 때마다 데코레이션으로 감싼 함수를 실행시킵니다.
아래 코드에서는 프로그램 실행 중 status라는 이름의 변수가 수정될 때 마다 validate_status(v)함수를 실행하게 됩니다. v는 사용자가 입력하려고 시도한 실제 데이터 값입니다.
from pydantic import field_validator
@field_validator("status") # 감시할 값(status) 지정
def validate_status(v):
if v not in ["success", "fail"]: # 유효성 검증
raise ValueError("status should be either 'success' or 'fail'.")
return v # 통과된 값 반환
예외 처리
이후 입력한 데이터가 지정한 데이터 조건에 위반될 경우,
pydantic의 ValidationError 값을 이용해 예외처리를 작성할 수 있습니다.
except ValidationError as e:
logging.error(f"Validation error: {e.errors()}")
return jsonify({"message": "Validation error", "errors": e.errors()}), 400
자세한 데이터 타입들에 대한 정보는 아래 문서에서 확인할 수 있습니다.
https://docs.pydantic.dev/latest/api/base_model/
BaseModel - Pydantic
Data validation using Python type hints
docs.pydantic.dev
'Language > Python' 카테고리의 다른 글
| [Python] Library | 06. OS (0) | 2025.07.28 |
|---|---|
| [Python] requirements.txt 파일 작성하기 (0) | 2025.02.16 |
| [Python] Library | 04. selenium (0) | 2024.01.28 |
| [Python] Library | 03. tqdm (0) | 2023.06.10 |
| [Python] Library | 02. lmdb (0) | 2023.06.03 |