Pydantic 예외 처리, 언제 try-except가 필요할까? 현실적 가이드
Pydantic을 실제 프로젝트에 도입할 때 가장 흔히 부딪히는 질문 중 하나가 **"모델 생성 시 검증 실패하면 프로그램이 죽나요? 항상 try-except를 써야 하나요?"**입니다. 이번 글에서는 Pydantic의 예외 처리 방식을 다양한 상황에 따라 정리하고, 실전에서 어떻게 대처해야 할지 구체적으로 안내합니다.
Pydantic 모델 생성과 ValidationError
Pydantic의 핵심 역할은 데이터의 유효성 검증입니다.
모델 인스턴스를 생성할 때 입력 값이 타입이나 제약 조건을 만족하지 않으면,ValidationError
예외가 즉시 발생합니다.
from pydantic import BaseModel
class User(BaseModel):
name: str
age: int
# 잘못된 데이터 입력 시
user = User(name="Alice", age="hello") # ❌ ValidationError 발생
예외를 잡지 않으면 프로그램이 곧장 종료됩니다.
상황별 예외 처리 전략
현실적으로 Pydantic을 어떻게 쓰느냐에 따라 예외 처리 방식이 달라집니다.
1. FastAPI 같은 프레임워크에서 사용
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
class User(BaseModel):
name: str
age: int
@app.post("/user")
def create_user(user: User):
return user
- 요청 데이터가 잘못되면 FastAPI가 자동으로 422 응답(Validation Error) 반환
- try-except를 직접 쓸 필요 없음
- API 서버가 죽지 않으니, 안심하고 모델을 사용해도 됨
2. 내부 코드/스크립트/유틸 함수 등에서 사용
내부적으로 dict, json 등에서 모델을 생성할 때는 직접 예외 처리가 필요합니다.
from typing import Optional
from pydantic import BaseModel, ValidationError
class User(BaseModel):
name: str
age: int
def load_user(data: dict) -> Optional[User]:
try:
return User(**data)
except ValidationError as e:
print("잘못된 데이터:", e)
return None
- 예외를 잡지 않으면 서비스 전체가 중단될 수 있음
- 중요한 로직에서는 반드시 try-except로 감싸는 것이 안전
3. 테스트, 데이터 정제, 개발 중 사용
개발 단계나 데이터 전처리, 테스트 코드에서는
오히려 예외를 내버려두고 문제 데이터를 빨리 발견하는 편이 좋을 때가 많습니다.
상황별 정리 표
사용 상황 | 예외 처리 권장 방식 |
---|---|
FastAPI 요청/응답 모델 | 별도 try-except 필요 없음 |
내부 JSON → 객체 변환 | try-except 사용 권장 |
테스트/스크립트/데이터 정제 | 예외 발생하도록 두어 문제 파악 |
중요한 서비스 로직(대량 변환 등) | 반드시 try-except 사용 |
.parse_obj
사용 팁
Pydantic 모델에서 dict를 인스턴스로 변환할 때는.parse_obj
메서드도 자주 사용합니다.
user = User.parse_obj({...}) # 실패 시 ValidationError 발생 (동일)
.parse_obj
도 검증 실패 시 ValidationError를 발생시키므로,
예외 처리 여부는 위와 동일하게 상황에 따라 결정하세요.
결론 및 정리
- Pydantic은 강력한 데이터 검증 도구이지만, 검증 실패 시 예외가 발생하므로 신중한 처리가 필요합니다.
- FastAPI 등에서는 프레임워크가 예외를 자동으로 처리해주므로 추가 코딩이 필요 없습니다.
- 직접 모델을 생성하는 경우, 특히 서비스 내부 로직에서는 try-except를 적극 활용해야 안정성이 보장됩니다.
- 개발 단계나 데이터 정제 작업 등에서는 오히려 예외를 통해 문제점을 빨리 찾는 것도 좋은 전략입니다.
Pydantic을 올바르게 활용하면 데이터 신뢰성을 크게 높일 수 있습니다. 실제 서비스 상황에 맞는 예외 처리 전략을 세워, 안정적이면서도 유연한 시스템을 설계해보시길 바랍니다.
추후에는 @validator
활용법이나 에러 메시지 커스터마이징 등도 다뤄볼 예정이니, 실무 적용에 참고해보세요.