로딩 중이에요... 🐣
[코담]
웹개발·실전 프로젝트·AI까지, 파이썬·장고의 모든것을 담아낸 강의와 개발 노트
05 Pydantic을 활용한 데이터 유효성 검사 | ✅ 편저: 코담 운영자
5강: Pydantic을 활용한 데이터 유효성 검사
🔗 소스
🔍 Pydantic이란?
- Python의 타입 힌트 기반으로 동작하는 데이터 검증 및 파싱 라이브러리
- FastAPI의 데이터 유효성 검사를 자동화하는 핵심 도구
🧱 Pydantic 모델 기본 구조
📌 예제: 사용자 등록 폼 유효성 검사
from pydantic import BaseModel
class User(BaseModel):
username: str
email: str
age: int
username
,email
,age
필드를 정의- FastAPI는 이 모델을 기반으로 자동으로 유효성 검사 수행
🚀 FastAPI와 함께 사용하기
📌 예제: POST 요청으로 유저 정보 받기
from fastapi import FastAPI
app = FastAPI()
@app.post("/register")
def register_user(user: User):
return user
- JSON 데이터가
User
모델과 일치하는지 확인 - 누락되거나 잘못된 타입이면 자동으로 422 오류 반환
⚠️ 유효하지 않은 데이터 처리
- 누락된 필드나 잘못된 타입 전달 시 FastAPI가 상세한 오류 메시지를 응답
❌ 예제: 오류 응답
{
"detail": [
{
"loc": ["body", "email"],
"msg": "field required",
"type": "value_error.missing"
},
{
"loc": ["body", "age"],
"msg": "value is not a valid integer",
"type": "type_error.integer"
}
]
}
- 오류 메시지는 어떤 필드에 어떤 문제가 있는지 명확히 안내
✅ 고급 유효성 검사 추가하기
1. 이메일 형식 검사 + 양수 제약 조건
from pydantic import BaseModel, EmailStr, conint
class User(BaseModel):
username: str
email: EmailStr
age: conint(gt=0)
EmailStr
: 이메일 형식 확인conint(gt=0)
: 0보다 큰 정수만 허용
2. 정규식(Regex) 패턴 검사
from pydantic import BaseModel, constr
class User(BaseModel):
username: constr(regex=r'^[\w.-]+$')
username
은 영문자, 숫자, 밑줄, 점, 하이픈만 허용
3. 사용자 정의 유효성 검사
from pydantic import validator
class User(BaseModel):
username: str
@validator("username")
def no_spaces(cls, v):
if " " in v:
raise ValueError("Username must not contain spaces")
return v
- 공백 포함 여부 등 고유 로직을 커스터마이징 가능
✅ 요약
- Pydantic은 FastAPI와 결합해 강력하고 직관적인 유효성 검사 도구 제공
- 필수 필드, 타입 검사, 형식 제약, 정규식, 커스텀 검증 등 다양한 방식 지원
- 빠르게 프로토타입 작성 가능하면서도 신뢰성 있는 API 구현 가능
다음 강의에서는 FastAPI에서 JSON 데이터 처리에 대해 다룹니다.
📌 참고: 본 강의는 FastAPI 학습 시리즈 기반으로 제작되었습니다.