[python] Marshmallow의 Field 데이터 처리 옵션과 사용법

Marshmallow는 파이썬에서 객체를 직렬화(serialize)하고 역직렬화(deserialize)하는 작업을 위한 라이브러리입니다. 이를 통해 데이터를 JSON, YAML 또는 다른 형식으로 변환하고 데이터 유효성 검사, 필드 선택 및 필드 순서 설정 등의 작업을 수행할 수 있습니다.

이번 글에서는 Marshmallow의 Field 클래스의 데이터 처리 옵션과 사용법에 대해 알아보겠습니다.

필드 유효성 검사(Validation)

Marshmallow의 필드는 데이터를 유효성 검사할 수 있는 다양한 옵션을 제공합니다. 몇 가지 대표적인 옵션은 다음과 같습니다.

  1. required : 필드가 필수인지 여부를 지정합니다. 기본값은 False입니다.
  2. allow_none : None값을 허용할지 여부를 지정합니다. 기본값은 False입니다.
  3. validate : 커스텀 유효성 검사 함수를 지정할 수 있습니다.
  4. error_messages : 유효성 검사 오류 메시지를 커스터마이즈할 수 있습니다.

아래는 이러한 옵션들을 사용한 예시입니다.

from marshmallow import Schema, fields

class UserSchema(Schema):
    username = fields.String(required=True)
    email = fields.Email(allow_none=True)
    age = fields.Integer(validate=lambda x: x > 0, error_messages={"invalid": "나이는 양수여야 합니다."})

위 예시에서 username 필드는 반드시 존재해야 하고, email 필드는 None값을 허용할 수 있습니다. 또한 age 필드는 양수인 경우에만 유효성을 통과합니다.

필드 선택과 순서 지정

Marshmallow는 직렬화할 때 선택할 필드를 지정하고 필드의 순서를 지정할 수 있는 옵션을 제공합니다. 이를 통해 원하는 필드만 직렬화하거나 특정 순서로 직렬화할 수 있습니다.

  1. only : 직렬화할 필드를 선택합니다. 리스트 형태로 여러 필드를 지정할 수 있습니다.
  2. exclude : 직렬화에서 제외할 필드를 선택합니다. 리스트 형태로 여러 필드를 지정할 수 있습니다.
  3. order : 필드의 순서를 지정합니다. 리스트 형태로 필드 이름을 지정합니다.

아래는 이러한 옵션들을 사용한 예시입니다.

from marshmallow import Schema, fields

class UserSchema(Schema):
    id = fields.Integer()
    username = fields.String()
    email = fields.Email()

# 필드 선택
user_data = {"id": 1, "username": "john.doe", "email": "john@example.com"}
schema = UserSchema(only=["username", "email"])
result = schema.dump(user_data)
# 결과: {"username": "john.doe", "email": "john@example.com"}

# 필드 제외
user_data = {"id": 1, "username": "john.doe", "email": "john@example.com"}
schema = UserSchema(exclude=["id"])
result = schema.dump(user_data)
# 결과: {"username": "john.doe", "email": "john@example.com"}

# 필드 순서 지정
user_data = {"id": 1, "username": "john.doe", "email": "john@example.com"}
schema = UserSchema(order=["email", "username", "id"])
result = schema.dump(user_data)
# 결과: {"email": "john@example.com", "username": "john.doe", "id": 1}

마무리

이번 글에서는 Marshmallow의 Field 클래스의 데이터 처리 옵션과 사용법에 대해 알아보았습니다. 필드 유효성 검사, 필드 선택, 필드 순서 지정 등의 옵션을 사용하여 유연하게 데이터를 처리할 수 있습니다.

Marshmallow의 더 다양한 옵션과 기능에 대해서는 공식 문서를 참고해주세요.