반응형

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 모델과의 통합
반응형

+ Recent posts