본문 바로가기
Coding/Python

Pydantic을 활용한 데이터 검증과 설정 관리

by 포스트it 2024. 11. 5.
728x90
반응형

Pydantic을 활용한 데이터 검증과 설정 관리

안녕하세요! 오늘은 Pydantic을 사용하여 데이터 유효성 검사를 수행하고 설정 관리를 효율화하는 방법에 대해 알아보겠습니다. Pydantic은 Python에서 데이터 검증과 설정 관리를 위한 강력한 도구로, 타입 힌트를 기반으로 직관적이고 효율적인 모델을 제공합니다. 이번 글에서는 Pydantic의 기본 사용법부터 요청 데이터 검증, 그리고 환경 변수와 설정 파일 관리까지 다루어 보겠습니다.


Pydantic의 기본 사용법

Pydantic이란?

Pydantic은 Python 데이터 클래스에서 타입 힌트를 활용하여 데이터 유효성 검사와 직렬화를 지원하는 라이브러리입니다. 이를 통해 데이터 모델을 정의하고, 입력된 데이터가 올바른지 자동으로 검증할 수 있습니다.

설치 방법

먼저 Pydantic을 설치해야 합니다.

pip install pydantic

기본 모델 정의

Pydantic 모델은 BaseModel 클래스를 상속하여 정의합니다.

 
from pydantic import BaseModel

class User(BaseModel):
    id: int
    name: str
    age: int = 18  # 기본값 설정

위 예제에서 User 모델은 id, name, age 필드를 가지고 있습니다. age 필드는 기본값으로 18을 갖습니다.

데이터 검증 및 파싱

Pydantic 모델을 사용하여 데이터 검증과 파싱을 수행할 수 있습니다.

 
user_data = {'id': '123', 'name': 'Alice', 'age': '25'}
user = User(**user_data)
print(user) # id=123 name='Alice' age=25

자동으로 타입이 변환되고, 유효성 검사가 수행됩니다.


요청 데이터의 검증 방법

FastAPI와 같은 웹 프레임워크에서 Pydantic은 요청 데이터의 검증에 활용됩니다.

FastAPI와 Pydantic

FastAPI는 내부적으로 Pydantic을 사용하여 요청 데이터의 유효성을 검사하고, 자동으로 모델에 매핑합니다.

from fastapi import FastAPI
from pydantic import BaseModel

app = FastAPI()

class Item(BaseModel):
    name: str
    price: float
    is_offer: bool = None

@app.post("/items/")
async def create_item(item: Item):
    return item

유효성 검사 예제

잘못된 데이터가 입력되면 자동으로 에러가 반환됩니다.

{
    "name": "Apple",
    "price": "not a float"
}

위와 같은 요청을 보내면 다음과 같은 에러 메시지를 받게 됩니다.

{
    "detail": [
        {
            "loc": ["body", "price"],
            "msg": "value is not a valid float",
            "type": "type_error.float"
        }
    ]
}

추가적인 유효성 검사

Pydantic은 다양한 유효성 검사 기능을 제공합니다.

from pydantic import BaseModel, Field

class User(BaseModel):
    id: int
    name: str = Field(..., min_length=3, max_length=50)
    age: int = Field(..., gt=0, lt=150)
  • min_length, max_length: 문자열 길이 제한
  • gt, lt: 값의 크기 제한

환경 변수와 설정 파일 관리

애플리케이션의 설정 관리는 코드의 유지보수성과 보안 측면에서 매우 중요합니다. Pydantic을 사용하면 환경 변수와 설정 파일을 효율적으로 관리할 수 있습니다.

설정 모델 정의

from pydantic import BaseSettings

class Settings(BaseSettings):
    app_name: str = "Awesome App"
    admin_email: str
    items_per_user: int = 50

    class Config:
        env_file = ".env"
  • BaseSettings를 상속받아 설정 모델을 정의합니다.
  • Config 클래스에서 env_file을 지정하여 환경 변수 파일을 설정할 수 있습니다.

.env 파일 생성

.env 파일에 환경 변수를 정의합니다.

ADMIN_EMAIL=admin@example.com
ITEMS_PER_USER=100

설정 사용하기

 
settings = Settings()
print(settings.app_name)       # Awesome App
print(settings.admin_email)    # admin@example.com
print(settings.items_per_user) # 100

환경 변수와 기본값이 자동으로 적용됩니다.

FastAPI와의 통합

FastAPI 애플리케이션에서 설정을 전역적으로 사용할 수 있습니다.

from fastapi import FastAPI, Depends

app = FastAPI()
settings = Settings()

@app.get("/info")
async def get_info():
    return {
        "app_name": settings.app_name,
        "admin_email": settings.admin_email
    }

또는 의존성 주입을 활용할 수도 있습니다.

def get_settings():
    return Settings()

@app.get("/info")
async def get_info(settings: Settings = Depends(get_settings)):
    return {
        "app_name": settings.app_name,
        "admin_email": settings.admin_email
    }

결론

Pydantic은 데이터 유효성 검사와 설정 관리를 단순하고 효율적으로 만들어주는 강력한 라이브러리입니다. 타입 힌트를 기반으로 직관적인 모델을 정의하고, 자동으로 데이터 검증을 수행할 수 있습니다. 또한 환경 변수와 설정 파일을 손쉽게 관리할 수 있어 애플리케이션 개발에 큰 도움이 됩니다.

Pydantic을 활용하여 더 안전하고 유지보수하기 쉬운 코드를 작성해보세요!

728x90
반응형

댓글