반응형
Pydantic이란?
Pydantic은 Python의 데이터 검증 라이브러리이다. 주로 데이터 모델을 정의하고 검증하는 데 사용되며, 특히 FastAPI와 같은 최신 웹 프레임워크에서 많이 활용된다.
핵심 feature와 사용법
아래 예제를 통해 Pydantic의 동작 원리를 간단히 살펴보자.
from pydantic import BaseModel
from typing import List, Optional
class User(BaseModel):
id: int
name: str
email: str
age: Optional[int] = None
tags: List[str] = []
1. Data Validation (데이터 검증)
데이터가 정의된 타입과 일치하는지 자동으로 확인한다.
# 자동적으로 data type을 validate한다
# Type이 매치되지 않으면 ValidationError를 raise한다
# 유효한 데이터
user1 = User(
id=1,
name="김철수",
email="user@example.com",
age=25,
tags=["developer", "python"]
)
# 잘못된 데이터 타입을 넣으면 에러 발생
try:
user2 = User(
id="invalid", # int가 아닌 str
name=123, # str이 아닌 int
email="invalid-email"
)
except ValueError as e:
print(f"검증 에러: {e}")
검증 에러: 2 validation errors for User
id
Input should be a valid integer, unable to parse string as an integer [type=int_parsing, input_value='invalid', input_type=str]
For further information visit https://errors.pydantic.dev/2.10/v/int_parsing
name
Input should be a valid string [type=string_type, input_value=123, input_type=int]
For further information visit https://errors.pydantic.dev/2.10/v/string_type
2. Type Conversion (Type 변환)
가능한 경우 데이터를 적절한 타입으로 자동 변환한다.
# 자동적으로 호환되는 type으로 형변환한다
# str "123"을 자동으로 int 123으로 변환
user = User(id="123", name="홍길동", email="hong@example.com")
3. JSON Serialization/Deserialization (JSON 직렬화/역직렬화)
# dict로 변환
user_dict = user1.model_dump()
# JSON으로 변환
user_json = user1.json()
4. Complex Data Validation (복잡한 데이터 검증)
class Order(BaseModel):
user: User
items: List[str]
total: float
order = Order(
user=user1,
items=["item1", "item2"],
total=29.99
)
5. 유효성 검사 규칙 추가
from pydantic import BaseModel, EmailStr, conint
class AdvancedUser(BaseModel):
name: str
email: EmailStr # 이메일 형식 검증
age: conint(ge=0, le=150) # 0-150 사이의 정수만 허용
Pydantic의 Usage
- API request/response 데이터 검증
- 설정 파일 파싱
- 복잡한 데이터 구조 검증
- ORM 모델과의 통합
반응형