[python] Marshmallow를 사용하여 데이터 유효성 검증 및 비즈니스 규칙 적용하기

데이터 유효성 검증은 소프트웨어 개발에서 매우 중요한 부분입니다. 유효성 검증은 입력된 데이터가 예상된 형식과 규칙에 부합하는지 확인하는 과정입니다. 파이썬에서 Marshmallow는 데이터 직렬화 및 유효성 검증을 위한 탁월한 도구입니다. 이 글에서는 Marshmallow를 사용하여 데이터 유효성 검증 및 비즈니스 규칙을 적용하는 방법에 대해 알아보겠습니다.

Marshmallow란?

Marshmallow는 파이썬 객체와 JSON 데이터 간의 직렬화 및 유효성 검증을 지원하는 라이브러리입니다. Marshmallow를 사용하면 객체를 JSON 형식으로 변환하거나, JSON 데이터를 파이썬 객체로 변환할 수 있습니다. 또한, Marshmallow는 데이터 유효성 검증을 위한 강력한 기능을 제공하여 비즈니스 규칙을 적용할 수 있습니다.

데이터 유효성 검증을 위한 Schema 정의하기

Marshmallow에서 데이터 유효성 검증을 위해서는 Schema를 정의해야 합니다. Schema는 데이터의 구조와 유효성 검증 규칙을 정의하는 역할을 합니다. 아래는 Marshmallow를 사용하여 사용자 데이터를 유효성 검증하는 예제입니다.

from marshmallow import Schema, fields, validate

class UserSchema(Schema):
    name = fields.Str(required=True)
    age = fields.Int(validate=validate.Range(min=0, max=100))
    email = fields.Email()

위 예제에서는 먼저 Marshmallow 모듈에서 Schema 클래스와 필드를 import합니다. 그리고 UserSchema 클래스를 정의하여 사용자 데이터의 구조와 유효성 검증 규칙을 정의합니다. name 필드는 필수값이며, age 필드는 0부터 100 사이의 값만 허용하도록 설정하였습니다. email 필드는 이메일 형식을 따라야 합니다.

데이터 유효성 검증하기

이제 정의된 Schema를 사용하여 데이터 유효성을 검증해보겠습니다.

data = {
    'name': 'John Doe',
    'age': 25,
    'email': 'johndoe@example.com'
}

user_schema = UserSchema()
validation_errors = user_schema.validate(data)

if validation_errors:
    # 유효성 검증 오류 처리
    print(validation_errors)
else:
    # 유효성 검증 성공
    print("데이터가 유효합니다.")

위 코드에서는 먼저 유효성을 검증할 데이터를 정의하고, UserSchema 클래스의 인스턴스를 생성합니다. 그리고 validate 메서드를 사용하여 데이터 유효성 검증을 수행합니다. validate 메서드는 유효성 검증이 실패할 경우 오류 메시지를 반환하며, 성공할 경우 None을 반환합니다.

비즈니스 규칙 적용하기

비즈니스 규칙은 데이터 유효성 검증 이상의 역할을 수행합니다. Marshmallow를 사용하면 비즈니스 규칙을 쉽게 적용할 수 있습니다. 예를 들어, 회원 가입 시 이메일 중복을 방지하는 비즈니스 규칙을 적용해보겠습니다.

class UserSchema(Schema):
    name = fields.Str(required=True)
    age = fields.Int(validate=validate.Range(min=0, max=100))
    email = fields.Email(validate=validate_email_uniqueness)

    def validate_email_uniqueness(self, email):
        # 이메일 중복 검사 로직 작성
        if User.query.filter_by(email=email).first():
            raise ValidationError('이미 사용 중인 이메일입니다.')

위 예제에서는 UserSchema 클래스 내에 validate_email_uniqueness 메서드를 정의하였습니다. 이 메서드는 사용자가 입력한 이메일이 이미 데이터베이스에 존재하는지 검사하는 비즈니스 규칙을 적용합니다. 만약 이메일이 중복된다면 ValidationError를 발생시켜 유효성 검증을 실패시킵니다.

위와 같이 비즈니스 규칙을 적용하면 데이터 유효성 검증 이상의 로직을 쉽게 구현할 수 있으며, 유지보수가 용이해집니다.

결론

Marshmallow를 사용하여 데이터 유효성 검증 및 비즈니스 규칙을 적용하는 방법에 대해 알아보았습니다. Marshmallow를 사용하면 간편하게 데이터 유효성 검증을 수행할 수 있으며, 비즈니스 규칙을 적용할 수 있습니다. 이를 통해 안정적이고 신뢰할 수 있는 소프트웨어를 개발할 수 있습니다.

참고 자료