[python] Marshmallow와 AWS S3를 함께 사용하여 파일 업로드 처리하기

목차

  1. 개요
  2. 필수 패키지 설치
  3. AWS S3 설정
  4. Marshmallow를 사용하여 업로드 처리하기
  5. 실행 및 테스트
  6. 결론
  7. 참고 자료

1. 개요

이 문서는 Python에서 Marshmallow와 AWS S3를 함께 사용하여 파일 업로드를 처리하는 방법에 대해 설명합니다. Marshmallow는 데이터 직렬화 및 역직렬화를 위한 강력한 라이브러리이며, AWS S3는 클라우드 기반의 객체 스토리지 서비스입니다. 이 두 가지 기술을 결합하여 효율적인 파일 업로드 처리를 구현할 수 있습니다.

2. 필수 패키지 설치

먼저, 필요한 패키지들을 설치해야 합니다. 다음 명령어를 사용하여 필수 패키지를 설치합니다.

pip install marshmallow boto3

3. AWS S3 설정

AWS S3를 사용하기 위해서는 AWS 계정이 필요합니다. AWS 계정을 생성하고, IAM 사용자를 생성하여 필요한 권한을 부여합니다. 그리고 AWS CLI를 설치한 후, 다음 명령어를 사용하여 AWS CLI를 구성합니다.

aws configure

구성 과정에서 AWS 액세스 키와 비밀 액세스 키를 제공해야 합니다.

4. Marshmallow를 사용하여 업로드 처리하기

Marshmallow를 사용하여 파일 업로드 처리를 구현하는 방법은 다음과 같습니다.

  1. Marshmallow로 데이터 유효성 검사 스키마를 작성합니다.
  2. 업로드 요청이 들어오면, Marshmallow로 유효성 검사를 수행합니다.
  3. 유효성 검사를 통과한 데이터로 파일을 AWS S3에 업로드합니다.
import os
from boto3 import client
from marshmallow import Schema, fields, validate, ValidationError

class FileUploadSchema(Schema):
    file = fields.Field(required=True, validate=validate.FileExtension(['jpg', 'png', 'gif']))

def upload_file_to_s3(file_path: str, file_name: str):
    # AWS S3 클라이언트 초기화
    s3 = client('s3')
    
    # 파일 업로드
    s3.upload_file(file_path, '<bucket_name>', file_name)

def handle_upload(request):
    # 요청 데이터 파싱
    file = request.files.get('file')
    
    # Marshmallow를 사용하여 유효성 검사 수행
    schema = FileUploadSchema()
    try:
        schema.load({'file': file})
    except ValidationError as e:
        return {'error': str(e)}, 400
    
    # 파일 업로드
    file_path = os.path.join('/tmp', file.filename)
    file.save(file_path)
    upload_file_to_s3(file_path, file.filename)
    
    return {'message': 'File uploaded successfully'}

if __name__ == '__main__':
    # Flask 앱 실행
    app.run()

5. 실행 및 테스트

위 코드를 실행하고, 파일 업로드 기능을 테스트해보세요. 요청을 보내어 파일을 업로드하고, 업로드된 파일이 AWS S3에 저장되는지 확인합니다.

6. 결론

이 문서에서는 Marshmallow와 AWS S3를 함께 사용하여 파일 업로드 처리를 구현하는 방법을 소개했습니다. Marshmallow를 사용하여 데이터 유효성 검사를 수행하고, AWS S3에 파일을 업로드하는 간단한 예제를 다루었습니다. 이를 통해 효율적인 파일 업로드 처리를 구현할 수 있습니다.

7. 참고 자료