[python] Marshmallow에서 제공하는 필터링 기능 활용하기

마샬로우(Marshmallow)는 파이썬의 직렬화와 역직렬화를 위한 라이브러리로, 데이터 유효성 검증, 필터링, 정렬 등 다양한 기능을 제공합니다. 이 중에서 필터링 기능에 대해 알아보겠습니다.

마샬로우에서는 쿼리 파라미터를 통해 데이터를 필터링할 수 있습니다. 쿼리 파라미터란 URL에 포함된 파라미터를 의미하며, 일반적으로 ‘?’를 사용하여 URL과 파라미터를 구분합니다.

필터링을 위한 쿼리 파라미터 정의

마샬로우에서는 필터링을 위해 쿼리 파라미터를 사용하는데, 이를 정의하기 위해 marshmallow.fields 모듈에 있는 Str 또는 Int 필드를 사용할 수 있습니다.

from marshmallow import Schema, fields

class DataFilterSchema(Schema):
    name = fields.Str()
    age = fields.Int()

위의 코드에서는 DataFilterSchema 클래스를 정의하고, nameage라는 필드를 선언하였습니다. name 필드는 문자열 필드이고, age 필드는 정수 필드입니다.

필터링 적용하기

마샬로우를 사용하여 필터링을 적용하기 위해서는 다음과 같은 과정을 거칩니다.

  1. 쿼리 파라미터를 가져옵니다.
  2. 가져온 쿼리 파라미터를 마샬로우 스키마의 load 메서드를 통해 필터링을 적용합니다.
from flask import request

def filter_data():
    # 1. 쿼리 파라미터 가져오기
    query_params = request.args

    # 2. 필터링 적용하기
    data, errors = DataFilterSchema().load(query_params)

    if errors:
        # 필터링이 실패한 경우 에러 처리
        return {"message": "Invalid query parameters"}, 400
        
    # 필터링이 성공한 경우 필터링된 데이터 반환
    return {"data": data}, 200

위의 코드에서는 Flask를 사용하여 HTTP 요청을 처리하고 있습니다. filter_data 함수는 GET 요청을 처리하기 위한 함수로, 쿼리 파라미터를 가져오고 해당 파라미터를 마샬로우 스키마로 로드하여 필터링을 적용합니다. 성공적으로 필터링된 데이터는 200 상태코드와 함께 반환됩니다.

예시

다음은 위에서 정의한 DataFilterSchemafilter_data 함수를 사용하여 필터링된 데이터를 어떻게 받아올 수 있는지의 예시입니다.

GET /data?name=John&age=25

위와 같은 GET 요청을 보내면, name이 “John”이고 age가 25인 데이터에 대한 필터링이 적용됩니다.

필터링 결과는 다음과 같이 응답으로 받을 수 있습니다.

{
    "data": {
        "name": "John",
        "age": 25
    }
}

마치며

마샬로우에서 제공하는 필터링 기능을 활용하여 쿼리 파라미터를 기반으로 데이터를 필터링할 수 있습니다. 이를 통해 요청에 맞게 데이터를 동적으로 필터링하고 처리할 수 있습니다.

더 자세한 사항은 마샬로우 공식 문서를 참고하시기 바랍니다.