기술블로그-Fastapi편
🔄 DRF Serializer vs FastAPI Pydantic 비교 정리
Chansman
2025. 5. 26. 18:25
🔄 DRF Serializer vs FastAPI Pydantic 비교 정리
✅ 공통 역할
- 입력된 JSON 데이터를 Python 객체로 변환
- 데이터 타입 검증 및 유효성 검사 수행
- 자동 타입 변환 지원 ("20" → 20)
🧠 핵심 비교표
항목 DRF - Serializer FastAPI - Pydantic
사용 클래스 | serializers.Serializer | pydantic.BaseModel |
주요 목적 | View 내부 데이터 검증/변환 | Request Body 자동 검증 및 타입 추론 |
자동 타입 변환 | ✅ 지원됨 ("20" → 20) | ✅ 더 강력하게 지원됨 |
유효성 검사 | .is_valid() 후 .validated_data | 함수 인자로 모델 선언 시 자동 검사 수행 |
에러 처리 | 수동 .errors 확인 | 자동 422 에러 응답 반환 |
문서화 | DRF 자체는 없음 (Swagger는 drf-yasg 등 필요) | OpenAPI 자동 문서화 (/docs) |
🔍 실제 예시 비교
✅ DRF 예시
from rest_framework import serializers
class PersonSerializer(serializers.Serializer):
name = serializers.CharField()
age = serializers.IntegerField()
# 문자열도 자동 int 변환
serializer = PersonSerializer(data={"name": "John", "age": "20"})
serializer.is_valid() # True
serializer.validated_data["age"] # 20 (int)
✅ FastAPI 예시
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
class Person(BaseModel):
name: str
age: int
@app.post("/people")
def create_person(person: Person):
return {"age_type": type(person.age).__name__}
요청:
{
"name": "Alice",
"age": "20"
}
응답:
{
"age_type": "int"
}
💡 타입 자동 변환 예시
입력 필드 타입 결과
"20" | int | ✅ 변환됨 (20) |
"스무살" | int | ❌ 에러 발생 (타입 불일치) |
✅ 요약 한 줄
DRF의 Serializer와 FastAPI의 Pydantic은 모두 JSON → Python 변환과 검증을 담당하며,
FastAPI는 더 간단한 코드로 자동 문서화 + 타입 안정성까지 제공한다.