[python] Marshmallow 모듈을 사용하여 유효성 검사 및 예외 처리하는 방법

마샬로우(Marshmallow)는 Python에서 사용할 수 있는 직렬화 및 유효성 검사 라이브러리입니다. 이 모듈은 데이터의 직렬화와 역직렬화를 처리하고, 입력 데이터의 유효성을 검사하고 예외 처리를 도와줍니다. 이번 포스트에서는 Marshmallow를 사용하여 유효성 검사와 예외 처리를 하는 방법을 살펴보겠습니다.

1. Marshmallow 설치하기

먼저, Marshmallow를 설치해야 합니다. 다음 명령을 사용하여 pip를 통해 Marshmallow를 설치할 수 있습니다.

$ pip install marshmallow

2. 스키마 정의하기

Marshmallow를 사용하기 위해서는 스키마(schema)를 정의해야 합니다. 스키마는 데이터의 구조와 유효성 검사를 정의하는 역할을 합니다. 예를 들어, 사용자의 정보를 포함하는 User 스키마를 정의해보겠습니다.

from marshmallow import Schema, fields

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

위의 예제에서는 User 스키마를 정의하고, name, age, email 필드를 각각 문자열, 정수, 이메일 형식으로 정의하였습니다. required=True 옵션으로 필수 필드임을 지정하였습니다.

3. 데이터 유효성 검사하기

Marshmallow를 사용하면 입력 데이터의 유효성을 쉽게 검사할 수 있습니다. 유효성 검사를 위해서는 스키마를 인스턴스화하고, 입력 데이터를 스키마에 로드(load)하여 유효성을 검사할 수 있습니다.

user_data = {
    'name': 'John',
    'age': 25,
    'email': 'john@example.com'
}

schema = UserSchema()
try:
    result = schema.load(user_data)
    print("입력 데이터는 유효합니다.")
except Exception as e:
    print(f"입력 데이터가 유효하지 않습니다. 오류 메시지: {str(e)}")

위의 예제에서는 입력 데이터를 user_data 변수에 할당하고, UserSchema를 인스턴스화합니다. schema.load() 메서드를 사용하여 입력 데이터를 스키마에 로드하고, 유효성을 검사합니다. 유효성 검사에 실패하면 예외가 발생하고, 오류 메시지를 출력합니다.

4. 예외 처리하기

Marshmallow를 사용하면 발생하는 예외를 쉽게 처리할 수 있습니다. 예를 들어, 입력 데이터가 누락된 경우 예외를 처리하는 방법을 살펴보겠습니다.

user_data = {
    'name': 'John',
    'email': 'john@example.com'
}

schema = UserSchema()
try:
    result = schema.load(user_data)
    print("입력 데이터는 유효합니다.")
except Exception as e:
    if isinstance(e, ValidationError):
        missing_fields = e.messages.keys()
        print(f"다음 필드가 누락되었습니다: {', '.join(missing_fields)}")
    else:
        print(f"입력 데이터가 유효하지 않습니다. 오류 메시지: {str(e)}")

위의 예제에서는 입력 데이터에 ‘age’ 필드가 누락된 경우를 가정하였습니다. 에러 메시지에서는 누락된 필드를 파악하고, 해당 필드를 출력합니다. 이외에도 다양한 예외 처리 방법이 있으니, 상황에 맞게 적절히 처리하면 됩니다.

결론

Marshmallow를 사용하면 Python 애플리케이션에서 데이터 유효성 검사와 예외 처리를 간편하게 수행할 수 있습니다. 스키마를 정의하고, 데이터를 로드하여 유효성을 검사하고, 발생하는 예외를 처리하는 방법을 익힘으로써 데이터의 신뢰성과 안정성을 향상시킬 수 있습니다.

참고 자료