[python] Marshmallow를 사용한 파일 업로드 및 다운로드 처리 방법

파일 업로드 및 다운로드는 웹 애플리케이션 개발에서 매우 일반적인 기능입니다. Marshmallow는 Python에서 데이터 직렬화 및 유효성 검사를 수행하기 위한 강력한 라이브러리입니다. 이 기사에서는 Marshmallow를 사용하여 파일 업로드 및 다운로드를 처리하는 방법을 알아보겠습니다.

Marshmallow 설치

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

pip install marshmallow

파일 업로드 처리

먼저, 파일 업로드를 처리하는 Marshmallow 스키마를 작성해야 합니다. 다음은 파일 업로드를 처리하기 위한 스키마의 예입니다:

from marshmallow import Schema, fields, validate

class FileUploadSchema(Schema):
    file = fields.Field(required=True, validate=validate.FileExtension(['txt', 'csv']))

위의 예제에서는 file 필드를 정의하여 파일 업로드를 처리합니다. required=True로 지정하여 필수 필드임을 나타내고, validate.FileExtension(['txt', 'csv']) 유효성 검사를 사용하여 허용되는 파일 확장자를 지정합니다.

다음으로, 파일 업로드 요청을 처리하는 Flask 엔드포인트를 작성합니다:

from flask import Flask, request

app = Flask(__name__)

@app.route('/upload', methods=['POST'])
def upload_file():
    file_data = request.files['file']
    schema = FileUploadSchema()
    errors = schema.validate({'file': file_data})
    
    if errors:
        return {'message': 'Validation error', 'errors': errors}, 400
    
    # 파일 처리 로직 추가

    return {'message': 'File uploaded successfully'}, 200

위의 코드에서는 /upload 경로로 POST 요청이 들어왔을 때 파일 업로드를 처리합니다. 업로드 된 파일은 request.files['file']에서 얻을 수 있습니다. 스키마를 사용하여 파일 유효성을 검사하고, 유효하지 않은 경우에는 오류 메시지와 함께 400 상태 코드를 반환합니다. 유효한 경우에는 파일 처리 로직을 추가하면 됩니다.

파일 다운로드 처리

파일 다운로드를 처리하기 위해서는 Flask에서 send_file 함수를 사용합니다. 다음은 파일 다운로드를 처리하는 예제입니다:

from flask import Flask, send_file

app = Flask(__name__)

@app.route('/download', methods=['GET'])
def download_file():
    # 파일 경로를 얻어옴
    file_path = '/path/to/file.txt'
    
    return send_file(file_path, as_attachment=True)

위의 코드에서는 /download 경로로 GET 요청이 들어왔을 때 파일 다운로드를 처리합니다. send_file 함수를 사용하여 파일 경로를 전달하고, as_attachment=True를 지정하여 파일을 첨부 파일로 다운로드할 수 있도록 합니다.

결론

Marshmallow를 사용하여 파일 업로드 및 다운로드를 처리하는 방법에 대해 알아보았습니다. Marshmallow는 데이터 직렬화 및 유효성 검사를 수행하는 간단하고 강력한 도구이며, 파일 처리와 관련된 다양한 기능을 구현할 수 있습니다.

더 많은 정보와 예제 코드를 보려면 Marshmallow 공식 문서를 참조하시기 바랍니다.