FastAPI에서 Pydantic V2 마이그레이션 대응하기
문제 상황
사내 API 서버에 FastAPI 0.95를 사용 중인데, 최근 의존성 업데이트 후 일부 validator가 동작하지 않는 문제가 발생했다. 확인해보니 Pydantic V2 베타 버전이 설치되면서 생긴 이슈였다.
Pydantic V2의 주요 변경사항
Pydantic V2는 Rust로 재작성되어 성능이 크게 개선되었지만, Breaking Change가 많았다.
@validator→@field_validator로 변경Config클래스 대신model_config딕셔너리 사용parse_obj()→model_validate()dict()→model_dump()
임시 해결
당장 전체 마이그레이션은 어려워 requirements.txt에 버전을 명시했다.
fastapi==0.95.2
pydantic==1.10.8
V2 대응 준비
기존 코드 중 V2에서 문제될 부분을 미리 체크해두었다.
# V1 (현재)
class UserCreate(BaseModel):
email: str
@validator('email')
def validate_email(cls, v):
if '@' not in v:
raise ValueError('invalid email')
return v
# V2 (향후)
class UserCreate(BaseModel):
email: str
@field_validator('email')
@classmethod
def validate_email(cls, v):
if '@' not in v:
raise ValueError('invalid email')
return v
FastAPI 공식적으로 Pydantic V2를 지원하는 버전이 나올 때까지는 V1을 유지하기로 했다. 다만 새로 작성하는 코드는 최대한 V2 스타일과 호환되도록 작성하는 것이 좋겠다는 판단이다.