Celery로 비동기 파일 업로드 처리하기

파일 업로드는 웹 애플리케이션에서 자주 사용되는 기능 중 하나입니다. 하지만 파일 업로드 작업은 대개 시간이 오래 걸리며 사용자에게 불편을 초래할 수 있습니다. 이러한 문제를 해결하기 위해 비동기적으로 파일 업로드를 처리할 수 있는 Celery를 사용해보는 것은 어떨까요?

Celery란?

Celery는 분산 태스크 큐 시스템으로, 파이썬으로 작성된 오픈 소스 프레임워크입니다. Celery를 사용하면 작업을 비동기적으로 처리할 수 있으며, 다양한 작업들을 쉽게 스케줄링하고 실행할 수 있습니다.

Celery 설치하기

Celery를 사용하기 위해서는 먼저 설치해야 합니다. 다음 명령어를 사용하여 Celery를 설치합니다.

pip install celery

프로젝트 구조 설정하기

Celery를 사용하기 위해서는 프로젝트 구조를 약간 변경해야 합니다. 일반적으로 Celery는 프로젝트의 루트 디렉토리에 있는 tasks.py 파일을 찾습니다. 따라서 프로젝트 구조에 tasks.py 파일을 생성하고 Celery 태스크들을 작성합니다.

Celery 태스크 작성하기

Celery 태스크는 @celery.task 데코레이터를 사용하여 정의할 수 있습니다. 예를 들어, 파일을 업로드하는 태스크를 작성해보겠습니다.

from celery import Celery

app = Celery('myapp')
app.config_from_object('celeryconfig')

@app.task
def upload_file(file_path):
    # 파일 업로드 로직
    # ...
    return f"{file_path} 업로드 완료"

위의 예제 코드는 upload_file이라는 Celery 태스크를 정의합니다. 이 태스크는 file_path라는 인자를 받아서 파일 업로드 로직을 실행하고, 업로드가 완료되면 업로드한 파일의 경로를 반환합니다.

Celery Worker 실행하기

Celery 태스크를 실행하기 위해서는 Celery Worker를 실행해야 합니다. 다음 명령어를 사용하여 Celery 워커를 실행합니다.

celery -A tasks worker --loglevel=info

위의 명령어에서 -A taskstasks 모듈을 Celery 애플리케이션으로 사용한다는 의미입니다.

비동기 파일 업로드 처리하기

이제 비동기 파일 업로드를 처리하는 기능을 구현해보겠습니다. Django를 사용하는 경우, 뷰 함수에서 파일 업로드를 받은 뒤 Celery 태스크를 호출하면 됩니다.

from django.http import JsonResponse
from tasks import upload_file

def upload(request):
    if request.method == 'POST' and request.FILES.get('file'):
        file = request.FILES['file']
        uploaded_file_path = '/path/to/uploaded/files/' + file.name
        upload_file.delay(uploaded_file_path)  # 비동기적으로 파일 업로드 태스크 실행
        return JsonResponse({'message': '파일 업로드가 성공적으로 요청되었습니다.'}, status=202)

    return JsonResponse({'error': '파일이 전송되지 않았습니다.'}, status=400)

위의 예제 코드에서 upload 뷰 함수는 POST 요청을 받고, 업로드한 파일이 있는 경우에만 Celery 태스크를 호출합니다. 파일 업로드 태스크는 delay() 메서드를 사용하여 비동기적으로 실행됩니다.

마무리

이렇게 Celery를 사용하여 비동기 파일 업로드를 처리할 수 있습니다. Celery를 사용하면 사용자에게 거의 무감각한 비동기적인 처리를 제공할 수 있으며, 성능과 확장성을 향상시킬 수 있습니다. Celery의 다양한 기능을 활용하여 자신의 애플리케이션에 맞는 비동기 작업을 구현해보세요.


참고 자료:

#Celery #비동기업로드