Celery와 AWS S3를 연동하여 비동기 파일 업로드

이번 블로그에서는 Celery와 AWS S3를 연동하여 비동기 파일 업로드를 구현하는 방법에 대해 알아보겠습니다.

Celery란?

Celery는 Python으로 작성된 분산 태스크 큐 시스템입니다. 비동기 작업을 처리하고 분산 시스템에 태스크를 분배함으로써 웹 애플리케이션의 성능을 향상시킬 수 있습니다. Celery를 이용하면 백그라운드에서 실행되는 작업을 더 효율적으로 처리할 수 있습니다.

AWS S3란?

AWS S3(Simple Storage Service)는 Amazon Web Services의 클라우드 기반 데이터 저장소입니다. 파일을 안전하게 저장하고 검색할 수 있으며, 웹 애플리케이션에서 사용되는 정적 파일을 저장할 수 있습니다. AWS S3는 대규모 데이터의 보관과 백업, 그리고 데이터 분석과 응용프로그램에 사용됩니다.

Celery와 AWS S3 연동하기

1. Celery 설치하기

먼저, Celery를 설치해야 합니다. 다음의 명령어를 사용하여 Celery를 설치할 수 있습니다.

pip install celery

2. AWS S3 설정하기

AWS S3에 액세스하기 위해서는 AWS 계정에 액세스 키와 시크릿 키가 필요합니다. AWS S3 버킷을 생성하고 해당 버킷의 액세스 키와 시크릿 키를 얻어야 합니다.

3. Celery 설정하기

Celery를 설정하기 위해 다음의 내용을 celery.py 파일에 추가합니다.

from celery import Celery

app = Celery('tasks', broker='redis://localhost:6379/0', backend='redis://localhost:6379/0')

@app.task
def upload_to_s3(file_path):
    # S3 업로드 로직 작성
    pass

4. 업로드 코드 작성하기

업로드할 파일을 특정 폴더에 저장하고 Celery를 통해 비동기적으로 S3에 업로드하는 코드를 작성합니다. 다음은 예제 코드입니다.

from celery import group

files = ['file1.jpg', 'file2.jpg', 'file3.jpg']

task_list = group(app.send_task('tasks.upload_to_s3', args=(file,)) for file in files)
result = task_list.apply_async()

5. 실행하기

Celery를 실행하여 업로드 작업을 수행합니다.

celery -A tasks worker --loglevel=info

결론

이렇게 Celery와 AWS S3를 연동하여 비동기 파일 업로드를 구현할 수 있습니다. Celery는 웹 애플리케이션의 성능을 향상시키는 강력한 도구이며, AWS S3는 안전하게 파일을 저장하고 검색할 수 있는 클라우드 기반의 데이터 저장소입니다. 이 두 기술을 함께 사용하면 효율적인 파일 업로드 시스템을 구현할 수 있습니다.

#Celery #AWS-S3