[python] Marshmallow 및 Pydantic과의 비교 및 차이점

데이터 직렬화와 유효성 검사는 웹 애플리케이션 및 API 개발에서 매우 중요한 부분입니다. Python에서는 Marshmallow와 Pydantic이라는 두 가지 인기있는 패키지가 있습니다. 이 블로그 포스트에서는 Marshmallow와 Pydantic의 비교 및 차이점에 대해 살펴보겠습니다.

Marshmallow

Marshmallow은 강력한 직렬화 및 유효성 검사 라이브러리입니다. Marshmallow은 주로 Flask와 함께 사용되며, JSON 직렬화 및 요청 데이터 유효성 검사를 위해 널리 사용됩니다.

from marshmallow import Schema, fields

class UserSchema(Schema):
    name = fields.Str()
    email = fields.Email()
    password = fields.Str(load_only=True)

user_data = {
    'name': 'John Doe',
    'email': 'johndoe@example.com',
    'password': 'password123'
}

user_schema = UserSchema()
result = user_schema.load(user_data)
print(result)  # {'name': 'John Doe', 'email': 'johndoe@example.com'}

위의 예제에서는 Marshmallow를 사용하여 UserSchema를 정의하고 load() 메소드를 사용하여 user_data를 로드합니다. 이때, load_only로 지정된 password 필드는 직렬화에는 포함되지 않습니다.

Marshmallow은 유효성 검사를 위해 다양한 강력한 기능을 제공합니다. 예를 들어 fields.Str()은 문자열 필드를 나타내며, fields.Email()은 이메일 유효성을 검사합니다.

Pydantic

Pydantic은 Python 3.6 이상의 버전에서 사용할 수 있는 데이터 유효성 검사 및 설정 파싱 라이브러리입니다. Pydantic은 FastAPI와 함께 많이 사용되며, JSON 직렬화 및 유효성 검사에 강력한 기능을 제공합니다.

from pydantic import BaseModel, EmailStr

class User(BaseModel):
    name: str
    email: EmailStr

user_data = {
    'name': 'John Doe',
    'email': 'johndoe@example.com',
    'password': 'password123'
}

user = User(**user_data)
print(user.dict())  # {'name': 'John Doe', 'email': 'johndoe@example.com'}

위의 예제에서는 Pydantic을 사용하여 User 모델을 정의하고 인스턴스화합니다. **user_data는 딕셔너리의 키와 값을 인자로 전달하여 인스턴스를 생성합니다. user.dict()를 사용하여 직렬화된 결과를 얻을 수 있습니다.

Pydantic은 유효성 검사를 위해 타입 힌트를 활용합니다. str은 문자열 필드를 의미하고, EmailStr은 이메일 형식을 갖는 필드입니다.

비교 및 차이점

Marshmallow와 Pydantic은 모두 데이터 직렬화와 유효성 검사를 위해 사용되지만 몇 가지 차이점이 있습니다.

각 패키지는 다른 사용 사례 및 요구 사항에 맞게 선택되어야 합니다. Marshmallow는 Flask와 잘 작동하며, Pydantic은 FastAPI와 함께 사용하면 좋습니다.

이 글은 Marshmallow와 Pydantic의 간단한 소개 및 비교였습니다. 각 라이브러리의 공식 문서를 참조하여 자세한 정보를 얻을 수 있습니다.