Pydantic - model_construct() for skipping validation & (potential) performance improvements!
model_construct()는 Pydantic 모델 생성 시 유효성 검사 및 타입 강제 변환을 건너뛰는 메서드입니다. 🚀
- 주로 성능에 민감한 코드에서 데이터가 이미 유효하다고 확신할 때(예: 신뢰할 수 있는 데이터베이스 소스) CPU 사이클을 절약하여 성능을 향상시킬 수 있습니다. ⚡
- 복잡하거나 중첩된 데이터 구조에서
model_construct() 사용 시 성능 개선 효과가 더욱 두드러집니다. 🌳
- 이 메서드는 유효성 검사를 전혀 수행하지 않으므로, 유효하지 않은 모델을 생성할 수 있다는 점을 반드시 인지해야 합니다. ⚠️
- 따라서, 이미 유효성이 검증되었거나 절대적으로 신뢰할 수 있는 데이터에만
model_construct()를 사용해야 하며, 사용자 입력과 같은 신뢰할 수 없는 소스에는 사용하지 않아야 합니다. 🛡️
- Pydantic v2에서는 일반 유효성 검사와
model_construct() 간의 성능 차이가 줄어들었으며, 간단한 모델의 경우 일반 유효성 검사가 더 빠를 수도 있습니다. 📉
- 성능 향상을 목적으로
model_construct()를 사용할 경우, 실제 사용 사례에 대해 반드시 프로파일링을 수행하여 효과를 확인해야 합니다. 📊
- 예시에서는 100만 개의 중첩된 모델을 생성할 때, 유효성 검사 시 약 15.5초,
model_construct() 사용 시 약 10초가 소요되어 상당한 시간 절약을 보여주었습니다. ⏱️
- 데이터 엔지니어링 파이프라인과 같이 구조가 잘 알려진 신뢰할 수 있는 데이터 소스에서 데이터를 로드할 때 특히 유용할 수 있습니다. ⚙️
- 대부분의 웹 애플리케이션(예: FastAPI)에서는 사용자 입력 처리 및 신뢰할 수 없는 데이터에 대한 유효성 검사가 필수적이므로, 일반적인 Pydantic 모델 인스턴스화 방식을 고수하는 것이 좋습니다. 🌐