[Python] Library | 05. Pydantic

2025. 2. 16. 21:09·Language/Python
728x90

Pydantic은 파이썬의 타입들을 활용한 데이터 검증 라이브러리입니다. 주로 주어진 데이터의 오류를 찾고, 런타임에서도 타입 힌트를 제공하는 역할을 합니다.

 

Pydantic을 사용하면 파이썬의 객체를 TypeScript의 방식처럼 선언할 수 있습니다.

데이터 검증

Pydantic에서 제공하는 BaseModel 클래스를 상속하여 사용할 수 있습니다. 특정 데이터가 BaseModel을 상속한 Pydantic 클래스는 어떤 입력값을 받았을 때 그 값이 해당 클래스에서 정의된 값을 가지는지 검사하는 기준이 될 수 있습니다.

from pydantic import BaseModel

class User(BaseModel):
    name:       str                    # 문자열
    age:        int                    # 정수
    createdAt:  datetime               # 날짜
    dimensions: tuple[int, int]        # (정수, 정수)
    preference: Optional[str] = None   # 기본값 None인 문자열
    rating:     int | float            # 정수 또는 실수
    friends:    List[str] = []         # 기본값 []인 문자열[]

만약 클래스에서 정의한 값의 존재 여부 뿐만 아니라 기본값, 범위, 별칭 등 부가적인 조건을 추가하고자 한다면 Field() 함수를 사용하면 됩니다.

from pydantic import BaseModel, Field
from typing import List

class Product(BaseModel):
	# 별칭과 설명
    name: str = Field(alias="product_name", description="상품의 전체 이름")
    
    # 범위 제한 (0 이상 100 이하)
    price: float = Field(gt=0, lt=100)
    
    # 문자열 길이 제한 (3 이상 10 이하)
    code: str = Field(min_length=3, max_length=10, default="ABC")
    
    # 가변 객체(list 등)의 기본값
    tags: List[str] = Field(default_factory=list)

다양한 타입 정의

파이썬의 기본적인 타입뿐 만 아니라, Pydantic에서 정의한 특수한 타입들도 사용할 수 있습니다.

from pydantic import BaseModel, EmailStr
from pydantic_extra_types.currency_code import Currency

class currency(BaseModel):
    alpha_3: Currency // 통화 기호 ('KRW', 'USD', ...)

class Model(BaseModel):
    email: EmailStr // 이메일 형식('contact@mail.com')

유효성 검증

특정 변수나 field의 값이 바뀔 때 마다 유효성을 검사하고 싶다면, field_validator() 함수를 사용하면 됩니다. 해당 함수는 데코레이션으로 사용할 수 있으며, 인자로 받은 값이 런타임에서 수정될 때마다 데코레이션으로 감싼 함수를 실행시킵니다.

 

아래 코드에서는 프로그램 실행 중 status라는 이름의 변수가 수정될 때 마다 validate_status(v)함수를 실행하게 됩니다. v는 사용자가 입력하려고 시도한 실제 데이터 값입니다.

from pydantic import field_validator

@field_validator("status")  # 감시할 값(status) 지정
def validate_status(v):
    if v not in ["success", "fail"]:  # 유효성 검증
        raise ValueError("status should be either 'success' or 'fail'.")
    return v  # 통과된 값 반환

 

예외 처리

이후 입력한 데이터가 지정한 데이터 조건에 위반될 경우,

pydantic의 ValidationError 값을 이용해 예외처리를 작성할 수 있습니다.

except ValidationError as e:
    logging.error(f"Validation error: {e.errors()}")
    return jsonify({"message": "Validation error", "errors": e.errors()}), 400

자세한 데이터 타입들에 대한 정보는 아래 문서에서 확인할 수 있습니다.

https://docs.pydantic.dev/latest/api/base_model/

 

BaseModel - Pydantic

Data validation using Python type hints

docs.pydantic.dev

 

728x90

'Language > Python' 카테고리의 다른 글

[Python] Library | 06. OS  (0) 2025.07.28
[Python] requirements.txt 파일 작성하기  (0) 2025.02.16
[Python] Library | 04. selenium  (0) 2024.01.28
[Python] Library | 03. tqdm  (0) 2023.06.10
[Python] Library | 02. lmdb  (0) 2023.06.03
'Language/Python' 카테고리의 다른 글
  • [Python] Library | 06. OS
  • [Python] requirements.txt 파일 작성하기
  • [Python] Library | 04. selenium
  • [Python] Library | 03. tqdm
Rayi
Rayi
  • Rayi
    아카이브
    Rayi
  • 전체
    오늘
    어제
    • 분류 전체보기 (297)
      • CS (40)
        • CV (2)
        • PS (37)
      • Reveiw (19)
        • Paper (19)
        • Github (0)
      • ML (13)
        • Pytorch (5)
      • Language (72)
        • Python (21)
        • JavaScript (32)
        • TypeScript (16)
        • C++ (3)
      • IDE (12)
      • Git (13)
      • Frontend (77)
        • React (8)
        • ReactNative (6)
        • SolidJS (20)
        • CSS (12)
      • Backend (47)
        • DB (18)
        • Node.js (11)
        • Python (3)
      • UI (3)
      • Automation (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    FastAPI
    GAN
    mongo
    PyTorch
    python
    backend
    review
    ML
    ts
    figma
    react
    DB
    CV
    Git
    SOLID
    ReactNative
    nodejs
    vscode
    frontend
    PRISMA
    CS
    deploy
    postgresql
    Three
    Express
    CSS
    API
    modal
    js
    ps
  • 최근 댓글

  • 최근 글

  • 250x250
  • hELLO· Designed By정상우.v4.10.5
Rayi
[Python] Library | 05. Pydantic
상단으로

티스토리툴바