FastAPI에서 Pydantic V2 마이그레이션 준비하기

배경

Pydantic V2 베타가 공개되면서 성능 개선(Rust 기반 코어)과 API 변경사항이 발표되었다. 현재 운영 중인 FastAPI 서비스들이 Pydantic에 강하게 의존하고 있어, 정식 출시 전 마이그레이션 포인트를 미리 파악해두기로 했다.

주요 변경사항

1. Config 클래스 방식 변경

기존 방식:

class User(BaseModel):
    id: int
    name: str
    
    class Config:
        orm_mode = True

V2에서는 ConfigDict 사용:

from pydantic import ConfigDict

class User(BaseModel):
    model_config = ConfigDict(from_attributes=True)
    
    id: int
    name: str

2. validator 데코레이터 변경

기존:

@validator('email')
def validate_email(cls, v):
    if '@' not in v:
        raise ValueError('Invalid email')
    return v

V2:

@field_validator('email')
def validate_email(cls, v):
    if '@' not in v:
        raise ValueError('Invalid email')
    return v

현재 대응 방안

  1. 타입 힌트 정확도 높이기: V2는 타입 검증이 더 엄격해진다. Optional, Union 등을 명확히 명시
  2. orm_mode 사용처 문서화: from_attributes로 변경될 부분 리스트업
  3. 커스텀 validator 목록화: @validator 사용처 전수조사

성능 벤치마크

간단한 모델 파싱 테스트 결과 V2가 약 5-10배 빠른 것으로 확인되었다. 대량의 데이터 validation이 필요한 배치 작업에서는 의미있는 개선이 예상된다.

정식 출시는 2023년 초로 예상되지만, 미리 준비해두면 마이그레이션 부담을 줄일 수 있을 것 같다.