728x90
반응형

파이썬은 기본적으로 동적 타입을 사용하는 인터프리터 언어이다.
예를 들어 String 타입으로 숫자를 입력하게 되면 자동으로 Int 타입으로 변환해 적용해준다.
그렇기에 알아서 타입을 지정해주는 장점을 가지고 있지만 타입과 관련된 에러가 발생할 경우 어디에서 어떻게 에러가 발생했는지 알 수 없는 문제가 발생할 수 있다.

 

따라서 Pydantic 을 사용해 타입을 직접적으로 명시해줌으로써 데이터 유효성을 검증하고 데이터 관리를 할 수 있다.

 

Pydantic 이란

https://github.com/pydantic/pydantic

 

GitHub - pydantic/pydantic: Data validation using Python type hints

Data validation using Python type hints. Contribute to pydantic/pydantic development by creating an account on GitHub.

github.com

 

 

Pydantic Github Repository 의 설명을 보면 Pydantic 에 대해서 아래와 같이 적어두었다.

Data validation using Python type hints.

쉽게 말해 파이썬 타입 힌트를 제공함으로써 데이터 유효성을 검증해주고 설정을 관리해주는 라이브러리 이다.

 

Pydantic 에 대한 사용법과 예제는 아래의 사이트에서 확인할 수 있다.

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

 

Welcome to Pydantic - Pydantic

Pydantic Documentation for version: v2.1.1. Pydantic is the most widely used data validation library for Python. Fast and extensible, Pydantic plays nicely with your linters/IDE/brain. Define how data should be in pure, canonical Python 3.7+; validate it w

docs.pydantic.dev

 

 

Pydantic 버전

현재 Pydantic 은 V1 버전과 V2 버전으로 되어있고 지금을 기준으로 V2.1 버전이 최신 버전이다.
버전이 업그레이드 되면서 기존에 V1 버전을 사용하고 있었다면 V2 버전으로 마이그레이션할 수 있도록 가이드를 제공해주고 있다.

https://docs.pydantic.dev/latest/migration/

 

Migration Guide - Pydantic

Migration Guide Pydantic V2 introduces a number of changes to the API, including some breaking changes. This page provides a guide highlighting the most important changes to help you migrate your code from Pydantic V1 to Pydantic V2. Install Pydantic V2 Py

docs.pydantic.dev

 

V1 버전과 V2 버전의 사용법이 많이 바뀌고 사라진 내용도 제법 많아 기존에 V1 에서 V2 로 변경한다면
마이그레이션 문서를 잘 참고해서 기존의 코드를 변경해야 한다.

 

 

Pydantic 을 사용하는 이유

  • 타입 힌트에 의해 구동한다.
    Pydantic 을 사용하면 스키마 유효성 검사 및 직렬화를 type annotations 을 통해 제어할 수 있다. 그리고 더 적은 학습과 코드를 통해 작성할 수 있고 IDE 와 정적 분석 도구와 함께 통합해서 사용할 수 있다.
  • 속도가 빠르다.
    Pydantic 의 핵심 유효성 검사 로직은 Rust 로 작성되어있다. 결과적으로 Pydantic 은 파이썬에서 가장 빠른 데이터 유효성 검사 라이브러리 중 하나이다.
  • 다양한 데이터 타입의 유효성 검사 지원
    Pydantic 은 dataclasses, TypeDict 를 포함한 많은 표준 라이브러리 타입의 유효성을 검사할 수 있도록 지원해준다.
  • 커스터마이징
    Pydantic 은 커스텀 유효성 검사 처리 방식과 직렬 변환 처리 방식을 통해 여러가지 강력한 방식으로 처리되는 방식을 변경할 수 있다.
  • 에코 시스템
    FastAPI, huggingface, Django Ninja, SQLModel & LangChain 과 같은 많이 사용하는 라이브러리를 포함해서 
    약 8000 개의 PyPI 패키지에서 Pydantic 을 사용한다.
  • 많은 참고 자료
    여러 큰 기업들에서 Pydantic 을 사용하면서 참고할만한 자료들이 많이 있다.

 

 

Pydantic 사용해보기

나는 Pydantic V2 버전을 사용해보았다.

 

Pydantic 에서는 주로 BaseModel 을 사용해 객체를 정의한다.

from pydantic import BaseModel

class User(BaseModel):
    id: int
    name: str
        
# 입력할 데이터 (dict 타입)
input_data = {
    'id': 123,
    'name': 'Jay Nam'
}

# **input_data : dict 언패킹을 통해 데이터를 꺼내서 입력해준다.
user = User(**input_data)

# 결과 확인
print(user.model_dump())

 

결과를 확인해보면 다음과 같이 확인할 수 있다.

{'id': 123, 'name': 'Jay Nam'}

 

 

그럼 타입이 다르게 입력되는 경우에는 어떻게 되는지 확인해보자.

from pydantic import BaseModel

class User(BaseModel):
    id: int
    name: str
        
# 입력할 데이터 (dict 타입)
input_data = {
    "id": "abc",
    "name": "Jay Nam"
}

# **input_data : dict 언패킹을 통해 데이터를 꺼내서 입력해준다.
user = User(**input_data)

# 결과 확인
print(user.model_dump())

 

id 의 값을 int 타입이 아닌 string 타입으로 변경해서 입력해보았다.
그리고 실행하니 다음과 같이 에러가 발생했다.

ValidationError                           Traceback (most recent call last)
Cell In[9], line 14
      8 input_data = {
      9     "id": "abc",
     10     "name": "Jay Nam"
     11 }
     13 # **input_data : dict 언패킹을 통해 데이터를 꺼내서 입력해준다.
---> 14 user = User(**input_data)
     16 # 결과 확인
     17 print(user.model_dump())

File /usr/local/lib/python3.9/site-packages/pydantic/main.py:159, in BaseModel.__init__(__pydantic_self__, **data)
    157 # `__tracebackhide__` tells pytest and some other tools to omit this function from tracebacks
    158 __tracebackhide__ = True
--> 159 __pydantic_self__.__pydantic_validator__.validate_python(data, self_instance=__pydantic_self__)

ValidationError: 1 validation error for User
id
  Input should be a valid integer, unable to parse string as an integer [type=int_parsing, input_value='abc', input_type=str]
    For further information visit https://errors.pydantic.dev/2.1/v/int_parsing

 

ValidationError 가 발생했고 에러의 자세한 내용은 String 타입을 Integer 타입에 파싱할 수 없다는 내용을 확인할 수 있다.

 

 

정리

Pydantic 이 무엇인지 맛보기로 알아보았는데 파이썬 언어의 동적 타입 변환을 사용하지 않고 타입을 명시해줌으로써
데이터의 유효성 검사를 할 수 있다는 장점을 가지고 있는 라이브러리이다.

 

정말 간단하게 사용만 해보았는데 더 많은 사용법들이 있고 찾아보면 다양하게 사용하는 기업들이나 개발자들이 많은 것으로 보인다.
타입을 정하는 것이 그만큼 중요하다고 생각이 되었고 typescript 와 같이 타입에 대한 필요성이 많아진 만큼 Pydantic 을 잘 활용하면 불필요한 에러 발생과 직접 타입을 정해주면서 많은 이점을 챙길 수 있지 않을까 생각한다.

 

그리고 파이썬을 통해 데이터베이스와 연결해서 데이터를 적재할 경우 스키마에 맞게 데이터의 타입을 정해줄 수 있기 때문에 이런 부분에 대한 유지보수나 디버깅을 더 효율적으로 진행할 수 있지 않을까하는 생각이 들었다.

 

지금은 Pydantic 이 무엇이다 정도로 알아보았지만 앞으로 직접 사용해보면서 발생하는 이슈나 버전을 마이그레이션하는 과정에 대한 부분도 정리해보면 좋을 것 같다.

728x90
반응형

'프로그래밍 언어 > Python' 카테고리의 다른 글

python urllib 사용해서 URL 다루어보기  (1) 2023.10.21
Python vars() 함수  (0) 2023.08.16
Python reduce() 함수  (0) 2023.03.01
Python open() 내장 함수  (0) 2023.03.01
Python Asterisk(*)  (0) 2023.02.28
복사했습니다!