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

배경

FastAPI 프로젝트에서 Pydantic V2 베타 발표 소식을 접하고 마이그레이션 검토를 시작했다. 공식 문서에 따르면 17배 빠른 validation 성능을 약속하고 있어, API 응답 속도 개선이 기대되는 상황이다.

주요 변경사항

1. Config 클래스 변경

기존 내부 Config 클래스 방식에서 model_config 딕셔너리로 변경된다.

# Before (V1)
class User(BaseModel):
    name: str
    
    class Config:
        orm_mode = True

# After (V2)
class User(BaseModel):
    model_config = ConfigDict(from_attributes=True)
    name: str

2. validator 데코레이터

@validator@field_validator로 변경되며, 시그니처도 달라진다.

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

# After
@field_validator('email')
@classmethod
def validate_email(cls, v: str) -> str:
    if '@' not in v:
        raise ValueError('invalid email')
    return v

마이그레이션 전략

  1. 테스트 커버리지 확보: 기존 validation 로직에 대한 테스트 보강
  2. 점진적 전환: 새로운 모델부터 V2 문법 적용
  3. 성능 측정: 마이그레이션 전후 벤치마크 비교

아직 베타 단계라 production 적용은 보류했지만, 정식 릴리즈 시 빠르게 전환할 수 있도록 준비를 마쳤다.