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

이번 블로그 포스트에서는 Celery를 사용하여 비동기적으로 파일 업로드를 처리하는 방법에 대해 알아보겠습니다.

파일 업로드는 웹 애플리케이션에서 자주 발생하는 작업 중 하나로, 사용자가 웹 페이지에서 파일을 선택하고 서버로 전송하는 과정을 의미합니다. 이러한 파일 업로드 작업은 대개 시간이 오래 걸리고 많은 시스템 리소스를 사용하는 작업입니다. 따라서 파일 업로드를 동기적으로 처리할 경우 사용자의 대기 시간이 길어지며, 서버의 성능에도 부하가 가해질 수 있습니다.

이러한 문제를 해결하기 위해 Celery를 사용하여 비동기적으로 파일 업로드를 처리할 수 있습니다. Celery는 파이썬 기반의 분산 작업 큐 시스템으로, 작업을 백그라운드에서 비동기적으로 실행할 수 있습니다. 따라서 파일 업로드 작업을 Celery로 처리하면 사용자의 대기 시간이 최소화되며, 서버의 성능도 향상될 수 있습니다.

먼저, Celery를 프로젝트에 설치해야 합니다. 다음 명령을 사용하여 Celery를 설치할 수 있습니다.

pip install celery

Celery를 설치한 후, Celery worker를 생성해야 합니다. Celery worker는 Celery 작업을 처리하는 프로세스입니다. 다음은 Celery worker를 생성하는 간단한 예제 코드입니다.

from celery import Celery

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

@app.task
def upload_file(file_path):
    # 파일 업로드 작업을 수행하는 코드 작성
    # ...

if __name__ == "__main__":
    app.start()

위 코드에서는 Redis를 사용하여 Celery 메시지 브로커를 설정하고 있습니다. 메시지 브로커는 작업 메시지를 전달하는 역할을 담당합니다. 이 예제에서는 로컬호스트의 Redis 서버를 사용하고 있습니다. 파일 업로드 작업은 upload_file 함수에서 처리됩니다.

파일 업로드 작업을 호출하는 부분에서는 Celery의 delay 메서드를 사용하면 됩니다. delay 메서드는 작업을 비동기적으로 큐에 넣어줍니다. 다음은 파일 업로드 작업을 호출하는 예제 코드입니다.

from tasks import upload_file

file_path = '/path/to/file.txt'
upload_file.delay(file_path)

위 예제에서는 upload_file 작업을 비동기적으로 큐에 넣어주고 있습니다.

이제 Celery를 사용하여 비동기 파일 업로드 작업을 처리할 수 있게 되었습니다. 파일 업로드 작업이 오래 걸리더라도 사용자의 대기 시간을 최소화하고 서버의 성능을 향상시킬 수 있습니다. Celery를 사용하여 다른 비동기 작업도 처리할 수 있으므로, 웹 애플리케이션에서 비동기적인 작업을 처리해야 할 경우 Celery를 고려해보시기 바랍니다.

#References