1. 성능 향상
- Pydantic v2는 Rust 기반의 pydantic-core를 사용하여 성능이 크게 향상됨.
- 데이터 검증 및 변환 속도가 최대 50배 이상 빠름.
2. BaseModel 동작 방식 변경
- v1: BaseModel의 속성에 직접 접근하면 원본 데이터 유지됨.
- v2: 내부적으로 __pydantic_private__을 활용하여 데이터 변환이 더 명확해짐.
from pydantic import BaseModel
class User(BaseModel):
name: str
age: int
user = User(name="Alice", age="25")
print(user.age) # v1: 25 (자동 변환) / v2: 25 (동일하지만 내부 구조가 변경됨)
3. 새로운 ConfigDict 방식
- v1: Config 클래스를 사용하여 설정 정의.
- v2: ConfigDict를 사용하여 설정을 정의.
v1 방식
class User(BaseModel):
name: str
age: int
class Config:
extra = "forbid"
v2 방식
from pydantic import ConfigDict
class User(BaseModel):
name: str
age: int
model_config = ConfigDict(extra="forbid")
4. Strict 모드 추가
- 데이터 타입을 엄격하게 검증하는 strict=True 옵션이 추가됨.
- v1에서는 유연하게 변환되었지만, v2에서는 더 엄격한 검증을 설정할 수 있음.
from pydantic import BaseModel, Strict
class User(BaseModel):
name: str
age: int
model_config = ConfigDict(strict=True)
User(name="Alice", age="25") # ❌ v2에서는 오류 발생 (age가 int가 아님)
5. model_dump()로 데이터 직렬화
- v1: dict()를 사용하여 변환.
- v2: model_dump()를 사용하여 더 세밀한 옵션을 제공.
user = User(name="Alice", age=25)
# v1
print(user.dict()) # ✅ v1 방식
# v2
print(user.model_dump()) # ✅ v2 방식
6. model_construct() 추가
- v2에서는 __init__()을 거치지 않고 인스턴스를 직접 생성할 수 있는 model_construct()가 추가됨.
- 검증을 우회할 때 유용.
user = User.model_construct(name="Alice", age="25") # 검증 없이 생성
7. 필드 기본값 설정 방식 변경
- Field(default=...) 대신 default를 직접 지정할 수 있음.
from pydantic import BaseModel, Field
class User(BaseModel):
name: str
age: int = 20 # ✅ v2에서는 기본값 설정 가능
📌 정리
기능Pydantic v1Pydantic v2
성능 | Python 기반 | Rust 기반 (pydantic-core) |
설정 | Config 클래스 사용 | ConfigDict 사용 |
데이터 변환 | 유연한 변환 | strict=True로 엄격한 검증 가능 |
데이터 직렬화 | dict() | model_dump() |
인스턴스 생성 | User(name, age) | model_construct() 지원 |
728x90
반응형
'Development > Python' 카테고리의 다른 글
파이썬 Test Case 작성시 init 과 import.... (0) | 2025.01.09 |
---|---|
Python 웹 스크래핑 하기2 (1) | 2024.10.17 |
[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (0) | 2024.08.27 |
Python 웹 스크래핑 하기 (0) | 2024.08.20 |
[Python] Blob Storage 에 Connection String 으로 연결하기 (0) | 2024.08.01 |