FastAPI를 공부하다보니 pydantic에 대해 알아야해서 간단하게 공부함.
"Pythonic한 방식으로 데이터를 검증하고 변환하는 파이썬의 라이브러리"
"데이터를 자동으로 검사하고, 타입에 맞게 바꿔주는 것"
특히 FastAPI는 요청 데이터를 모델처럼 쓰게 해주는데, 그 기반이 pydantic
| 기능 | 설명 |
|---|---|
| 타입 검증 | 자동으로 자료형 검사 (str, int, bool, float 등) |
| 타입 변환 | "123" → int(123), "true" → bool(True) |
| 기본값 지원 | is_done: bool = False |
| 필드 누락 검사 | 빠진 필드는 오류로 처리 |
| 문서 자동화 | FastAPI가 pydantic 모델로 API 문서 자동 생성 |
| 기능 | 예시 |
|---|---|
| 필드 설명 추가 | Field(..., description="설명") |
| 정규식 제한 | constr(regex="^[a-z]+$") |
| 값 범위 제한 | conint(gt=0, lt=100) |
| 중첩 모델 | 모델 안에 또 다른 모델 가능 |
| 환경 | pydantic 사용 가능? | 예시 |
|---|---|---|
| FastAPI | ✅ 매우 밀접하게 사용됨 | 요청/응답 모델 |
| Django | ✅ 가능 (하지만 DRF가 기본) | Form/Serializer 대체 |
| Flask | ✅ 가능 | API 요청 검증 |
| 일반 Python | ✅ 가능 | JSON 파싱/검증/변환 |
Serializer가 있는 DRF만 써봐서 pydantic에 대해 몰랐음.
| 항목 | pydantic (FastAPI) | DRF Serializer (Django REST Framework) |
|---|---|---|
| 검증 방식 | 타입 기반 (BaseModel) | 필드 기반 (CharField, IntegerField) |
| 자동 변환 | str → int, str → bool 자동 | 수동으로 clean, to_internal_value 처리 |
| 모델 연결 | 모델 없이도 사용, SQLAlchemy도 가능 | ModelSerializer로 ORM 연동 |
| 속도 | 매우 빠름 (Rust로 컴파일됨) | 상대적으로 느림 |
| 추가 기능 | 문서 자동화, 타입 힌트 기반 | 폼 검증, HTML 폼 렌더링 등 |
장고 짱