💡 AI 인사이트

🤖 AI가 여기에 결과를 출력합니다...

댓글 커뮤니티

쿠팡이벤트

이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.

검색

    로딩 중이에요... 🐣

    [코담] 웹개발·실전 프로젝트·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 학습 시리즈 기반으로 제작되었습니다.

    TOP
    preload preload