[python] Marshmallow를 사용하여 데이터베이스 객체 관리하기

이번 포스트에서는 Marshmallow라는 Python 라이브러리를 사용하여 데이터베이스 객체를 관리하는 방법에 대해 알아보겠습니다. Marshmallow는 ORM(Object-Relational Mapping)을 사용하는 애플리케이션에서 데이터 직렬화와 역직렬화 작업을 쉽게 처리할 수 있도록 도와주는 라이브러리입니다.

Marshmallow란?

Marshmallow는 Python 객체와 다른 데이터 형식(주로 JSON) 간의 변환을 처리하기 위한 라이브러리입니다. 이를 통해 데이터를 직렬화하거나 역직렬화하여 애플리케이션의 데이터베이스와의 상호 작용을 간편하게 할 수 있습니다.

설치하기

Marshmallow를 설치하기 위해서는 pip을 사용할 수 있습니다. 다음 명령어를 사용하여 설치할 수 있습니다.

pip install marshmallow

Marshmallow 스키마 정의하기

Marshmallow를 사용하여 데이터베이스 객체를 관리하기 위해서는 먼저 객체의 구조를 정의해야 합니다. 이를 위해 Marshmallow 스키마를 사용합니다. 스키마는 데이터 객체의 필드와 각 필드의 유효성을 검증하는 규칙들을 정의합니다.

아래는 사용자 정보를 다루는 스키마의 예시입니다. 사용자는 이름(name), 이메일(email) 필드를 가지며 각각의 필드는 문자열 형태여야 합니다.

from marshmallow import Schema, fields

class UserSchema(Schema):
    name = fields.String()
    email = fields.String()

객체 직렬화하기

Marshmallow 스키마를 사용하여 데이터 객체를 직렬화하려면 dump() 메소드를 사용합니다. 이 메소드는 Python 객체를 JSON 형식의 문자열로 변환해줍니다.

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

객체 역직렬화하기

Marshmallow 스키마를 사용하여 데이터 객체를 역직렬화하려면 load() 메소드를 사용합니다. 이 메소드는 JSON 형식의 문자열을 Python 객체로 변환해줍니다.

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

유효성 검증하기

Marshamllow 스키마는 데이터 객체의 유효성을 검증하는 기능도 제공합니다. 다음의 예시에서는 이메일 필드가 올바른 이메일 형식을 갖는지 검사하는 스키마를 정의합니다.

from marshmallow import Schema, fields, validates, ValidationError

class UserSchema(Schema):
    name = fields.String()
    email = fields.Email()

    @validates('email')
    def validate_email(self, email):
        if not email.endswith('@example.com'):
            raise ValidationError('Invalid email domain')

user_data = {'name': 'John Doe', 'email': 'johndoe@example.org'}
user_schema = UserSchema()
try:
    result = user_schema.load(user_data)
except ValidationError as e:
    print(e.messages)
# Output: {'email': ['Invalid email domain']}

이와 같이 Marshmallow를 사용하면 데이터베이스 객체를 쉽게 관리할 수 있고, 유효성 검사 등의 작업을 손쉽게 처리할 수 있습니다.

Marshmallow의 더 많은 기능과 사용 방법에 대해서는 공식 문서를 참고해주세요.

이상으로 Marshmallow를 사용하여 데이터베이스 객체를 관리하는 방법에 대해 알아보았습니다. 활용하여 쉽고 효율적인 데이터 관리를 해보세요!