FastAPI - Pydantic

홍찬우·2023년 7월 30일

Pydantic

Pydantic 이란?

  • Data validation, settings management 라이브러리

  • Type Hint를 런타임에서 강제해 안전하게 데이터 핸들링

  • 파이썬 기본 타입(String, int, …) + List, Dict, Tuple에 대한 Validation 지원

  • 머신러닝 feature data validation으로 활용 가능


Pydantic Validation

  • 인풋 데이터가 아래 조건을 만족해야 한다고 가정하자

    1. url: 올바른 url을 입력 받음

    2. rate: 1~10 사이의 정수를 입력 받음

    3. target_dir: 올바른 폴더 이름을 입력 받음


1) 파이썬 기본 클래스를 사용할 경우,

  • 의미 없는 코드가 많아짐

  • 복잡한 검증 로직


2) Dataclass를 활용할 경우,

  • 인스턴스 생성 시점에 validation 수행이 쉬움

  • 여전히 validation 로직을 직접 작성해야 함


3) Pydantic을 활용할 경우

  • 훨씬 간결해진 코드

  • 주로 쓰이는 타입 (HTTP url, DB url, enum 등)에 대한 validation이 이미 만들어져 있음

  • 런타임에서 Type Hint에 따라 Validation Error 발생

  • Custom Type에 대한 Validation도 쉽게 사용 가능

  • 에러가 날 경우 어디서 에러가 발생했는지 location, type, message 등 알림


Pydantic Config

  • Config을 체계적으로 관리할 방법 제공

  • 기존 다른 라이브러리들은 어떻게 Config를 설정하고 있을까?

    • 설정을 상수로 코드에 저장 ⇒ Twelve-Factor 위반

      • Twelve-Factor는 설정을 코드에서 엄격히 분리할 것을 요구

      • 하드코딩 자제하고 config.yaml 같은 파일에 저장할 것

    • .ini, .yaml 파일에 config 설정

      • 변경사항이 생길 때 유연하게 코드 변경 어려움

      • 결국은 하드코딩 하는 형태

    • flask-style config.py

      • config 클래스에서 yaml, ini 파일을 불러와 python class 필드로 주입

      • config를 상속한 클래스에서는 config 클래스 정보를 오버라이딩해서 사용

      • validation 또는 오버라이딩을 하려면 코드량이 늘어남

    • pydantic base settings

      • Pydantic의 BaseSettings를 상속한 클래스에서 Type Hint로 주입된 설정 데이터를 검증할 수 있음

      • yaml, ini 파일을 추가적으로 만들지 않고, .env 파일들을 환경별로 만들어 두거나 실행 환경에서 유연하게 오버라이딩







※ 모든 이미지 및 코드 출처는 네이버 커넥트재단 부스트캠프 AI Tech 5기입니다. ※

profile
AI-Kid

0개의 댓글