[python] Marshmallow의 데이터 유효성 검증과 예외 처리 방법

Marshmallow는 파이썬에서 사용되는 데이터 직렬화, 유효성 검증 및 역직렬화 도구입니다. 이번 글에서는 Marshmallow를 사용하여 데이터 유효성 검증과 예외 처리를 어떻게 할 수 있는지 알아보겠습니다.

Marshmallow란?

Marshmallow는 데이터 직렬화와 유효성 검증을 위한 라이브러리로, JSON, 웹 요청 데이터 등을 파이썬 객체로 변환하거나 그 반대로 직렬화할 수 있습니다. Marshmallow는 데이터 스키마를 정의하고, 이를 통해 데이터의 유효성을 검사하거나 변환할 수 있습니다.

데이터 유효성 검증

Marshmallow를 사용하면 데이터 유효성을 검증할 수 있습니다. 데이터 스키마를 정의한 후, 입력 데이터를 해당 스키마와 비교하여 유효성을 검사합니다. 아래는 Marshmallow를 사용한 데이터 유효성 검증의 예시입니다.

from marshmallow import Schema, fields, ValidationError

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

# 유효성 검증
data = {
    'name': 'John Doe',
    'email': 'johndoe@example.com'
}

schema = UserSchema()

try:
    result = schema.load(data)
except ValidationError as err:
    print(err.messages)
else:
    print('데이터 유효성 검증 성공')

위 예시에서는 UserSchema라는 데이터 스키마를 정의하고, nameemail 필드를 정의하였습니다. load() 메서드를 사용하여 입력 데이터를 검증하고, 유효성에 따라 예외를 발생시킵니다.

예외 처리

Marshmallow는 유효성 검사에 실패한 경우 예외를 발생시킵니다. 따라서 예외 처리를 통해 유효성 검사에 실패한 경우를 처리할 수 있습니다. 아래는 예외 처리를 위한 코드 예시입니다.

from marshmallow import Schema, fields, ValidationError
from flask import jsonify, request

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

@app.route('/users', methods=['POST'])
def create_user():
    try:
        data = request.get_json()
        schema = UserSchema()
        result = schema.load(data)
    except ValidationError as err:
        return jsonify({'error': err.messages}), 400

    # 유효성 검증 통과한 경우, 데이터 저장 등의 로직 수행
    return jsonify({'message': 'User created successfully'})

위 예시에서는 Flask를 사용하여 /users 엔드포인트에서 유저 생성을 처리하는 함수를 정의하였습니다. 입력 데이터를 request.get_json()을 통해 가져오고, 해당 데이터를 UserSchema에 따라 유효성 검사합니다. 유효성 검증에 실패한 경우, 예외를 처리하여 클라이언트에게 오류 응답을 반환합니다.

결론

Marshmallow는 데이터 직렬화와 유효성 검증에 유용한 도구입니다. 데이터 스키마를 정의하고, 이를 통해 데이터의 유효성을 검사하며, 예외 처리를 통해 검증 실패 시 처리할 수 있습니다. Marshmallow를 사용하면 데이터를 보다 안정적으로 처리할 수 있고, 유지 보수성을 높일 수 있습니다.

참고 자료