[python] Marshmallow를 이용한 Flask 애플리케이션에서 JSON 요청과 응답 처리하기

이번 글에서는 Flask 애플리케이션에서 Marshmallow를 사용하여 JSON 요청과 응답을 처리하는 방법에 대해 알아보겠습니다. Marshmallow는 Python에서 JSON 직렬화 및 역직렬화를 쉽게 처리할 수 있는 라이브러리입니다.

Marshmallow 설치하기

Marshmallow를 설치하기 위해서는 pip를 사용해서 다음 명령어를 실행해주세요.

pip install marshmallow

스키마 정의하기

Marshmallow를 사용하기 위해서는 먼저 요청 및 응답의 스키마를 정의해야합니다. 스키마는 데이터 모델과 일치하는 필드로 구성됩니다.

예를 들어, 다음과 같이 사용자 정보를 담은 스키마를 정의할 수 있습니다.

from marshmallow import Schema, fields

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

위의 예시에서는 nameemail 필드가 정의되어 있습니다. required=True로 설정되어 있으므로, 이 필드들은 필수 입력 항목입니다.

요청 데이터 검증하기

Flask 애플리케이션에서는 HTTP 요청을 처리하고 검증하기 위해 Flask의 request 객체를 사용합니다.

다음 예시에서는 POST 메서드로 전달되는 JSON 데이터를 검증하는 방법을 보여줍니다.

from flask import request

@app.route('/user', methods=['POST'])
def create_user():
    json_data = request.get_json()

    # 스키마로 전달된 데이터 검증
    errors = UserSchema().validate(json_data)
    if errors:
        return errors, 400
    
    # 검증이 완료되면 데이터 처리 로직 실행
    # ...
    
    return 'User created', 200

위의 예시에서는 get_json() 메서드를 사용하여 요청 데이터를 JSON 형식으로 가져옵니다. 이후에는 UserSchema를 사용하여 데이터 검증을 수행합니다. 만약 검증에 실패하면, 오류 메시지와 함께 400 Bad Request 응답을 반환합니다.

응답 데이터 직렬화하기

Flask 애플리케이션에서는 JSON으로 응답 데이터를 전달하기 위해 Marshmallow를 사용할 수 있습니다.

다음 예시에서는 사용자 정보를 JSON 형식으로 반환하는 방법을 보여줍니다.

@app.route('/user/<user_id>', methods=['GET'])
def get_user(user_id):
    # 데이터베이스로부터 사용자 정보 조회
    user = User.query.get(user_id)

    # 스키마를 사용하여 데이터 직렬화
    result = UserSchema().dumps(user)

    return result, 200

위의 예시에서는 User 모델의 인스턴스를 가져온 후, UserSchema().dumps() 메서드를 사용하여 JSON 형식의 데이터로 직렬화합니다. 이후에는 해당 데이터를 응답으로 반환합니다.

이렇게 Marshmallow를 사용하면 Flask 애플리케이션에서 JSON 요청과 응답을 쉽게 처리할 수 있습니다. Marshmallow는 다양한 기능과 옵션을 제공하기 때문에, 필요에 따라 자세한 사용 방법을 공식 문서를 참고하시기 바랍니다.

참고 자료