Celery로 비동기 압축 처리하기

비동기 처리는 웹 애플리케이션에서 시간이 오래 걸리는 작업을 백그라운드에서 처리할 수 있게 하는 기술입니다. 이를 통해 사용자 경험을 향상시키고 서버 응답 시간을 단축할 수 있습니다. Celery는 파이썬으로 작성된 분산 작업 큐이며, 비동기 처리에 많이 사용됩니다.

이번에는 Celery를 사용하여 비동기적으로 파일 압축을 처리하는 방법에 대해 알아보겠습니다. 이를 위해 다음과 같은 요구사항이 있습니다:

Celery 설정하기

우선 Celery를 설치해야 합니다. 아래의 명령어를 사용하여 Celery를 설치합니다.

pip install celery

다음으로, Celery 설정을 위해 프로젝트 디렉토리에 celery.py 파일을 생성합니다. 파일 내에는 다음과 같은 코드를 작성합니다:

from celery import Celery

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

@app.task
def compress_file(filename):
    # 파일 압축 로직 작성
    # 압축된 파일의 경로 반환

위의 코드에서는 Redis를 사용하여 Celery의 작업을 관리하는 브로커를 설정하고, compress_file이라는 Celery 작업을 정의합니다. 파일 압축 로직은 이 함수 내에 작성합니다. 압축된 파일의 경로를 반환하는 것으로 가정하겠습니다.

압축 처리하기

이제 비동기적으로 파일을 압축하는 로직을 작성해보겠습니다.

from myapp.celery import compress_file

# 파일 업로드 후 압축 처리 요청
def handle_file_upload(request):
    file = request.FILES['file']
    filename = file.name

    # 파일 저장
    with open(filename, 'wb') as f:
        for chunk in file.chunks():
            f.write(chunk)

    # Celery 작업으로 파일 압축 요청
    compress_file.delay(filename)

    # 압축된 파일 다운로드 링크 제공
    download_link = f'/download/{filename}.zip'
    return JsonResponse({'download_link': download_link})

위의 코드에서는 파일 업로드 후, Celery를 통해 비동기적으로 파일 압축을 요청하고 압축된 파일의 다운로드 링크를 제공합니다. compress_file.delay(filename) 코드는 compress_file 작업을 큐에 추가하여 비동기적으로 실행하도록 만듭니다.

결론

이제 Celery를 사용하여 비동기적으로 파일 압축 처리하는 방법을 알게 되었습니다. Celery를 활용하면 웹 애플리케이션의 성능을 향상시키고 사용자 경험을 개선할 수 있습니다. 추가로, Celery의 다른 기능들을 탐구해보고 적절하게 활용해보세요.

#celery #비동기처리