비동기 처리는 웹 애플리케이션에서 시간이 오래 걸리는 작업을 백그라운드에서 처리할 수 있게 하는 기술입니다. 이를 통해 사용자 경험을 향상시키고 서버 응답 시간을 단축할 수 있습니다. 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 #비동기처리