Celery를 이용한 큐잉 시스템 개발

많은 웹 애플리케이션에서는 처리 시간이 오래 걸리는 작업을 비동기적으로 처리하기 위해 큐잉 시스템을 사용합니다. 이러한 큐잉 시스템은 작업을 순차적으로 처리할 수 있도록 하며, Celery는 Python에서 널리 사용되는 큐잉 시스템입니다.

Celery를 사용하여 큐잉 시스템을 개발하는 방법에 대해 알아보겠습니다.

Celery란?

Celery는 분산 작업 큐잉 시스템으로, 작업을 비동기적으로 실행하기 위해 사용됩니다. Celery는 주로 웹 애플리케이션에서 백그라운드 작업을 처리하는데 사용되며, 크롤링, 이메일 발송 등의 작업을 비동기적으로 처리할 수 있습니다.

Celery는 두 가지 주요 구성 요소로 이루어져 있습니다. 첫 번째는 웹 애플리케이션과 통신하고 작업을 받아오는 역할을 하는 큐 잡 큐레이터(Queue Job Coordinator)입니다. 두 번째는 실제 작업을 처리하는 작업자(Worker)입니다. 작업자는 미리 정의된 작업을 실행하고 그 결과를 반환합니다.

Celery 설치 및 설정

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

pip install celery

Celery를 사용하기 위해서는 설정 파일을 작성해야 합니다. 설정 파일은 Celery 애플리케이션에 대한 여러 옵션을 포함하며, Redis, RabbitMQ 등의 메시지 브로커를 사용할지 여부 등을 설정할 수 있습니다. 설정 파일은 보통 celery.py 또는 celeryconfig.py와 같은 이름으로 작성합니다.

Celery 작업 정의하기

Celery를 사용하여 작업을 정의하기 위해서는 작업을 decorator로 감싸서 정의해야 합니다. 다음은 Celery를 사용하여 간단한 작업을 정의하는 예시입니다.

from celery import Celery

app = Celery('tasks', broker='pyamqp://guest@localhost//')

@app.task
def add(x, y):
    return x + y

위의 코드에서 app 객체는 Celery 애플리케이션을 나타내며, broker 매개변수를 통해 메시지 브로커의 주소를 설정합니다. @app.task decorator를 사용하여 작업을 정의하고, 해당 작업의 비즈니스 로직을 작성합니다.

Celery 작업 실행하기

Celery 애플리케이션을 실행하려면 다음과 같은 명령을 실행해야 합니다.

celery -A tasks worker --loglevel=info

위의 명령을 실행하면 작업자(worker)가 백그라운드에서 실행되며, 메시지 브로커에서 작업을 받아옵니다. 작업자는 작업을 순차적으로 처리하고, 처리 결과를 반환합니다.

Celery 결과 추적하기

Celery를 사용하여 작업을 실행하면 작업의 상태 및 결과를 추적할 수 있습니다. Celery는 작업 ID를 제공하며, 이를 통해 작업의 상태를 조회하거나 결과를 받아올 수 있습니다.

result = add.delay(4, 6)
print(result.id)

result = add.AsyncResult('작업ID')
print(result.status)
print(result.get())

위의 예시에서는 작업을 실행한 후 작업 ID를 받아옵니다. 작업 ID를 사용하여 작업의 상태를 확인하고, 결과를 받아올 수 있습니다.

결론

Celery를 사용하여 큐잉 시스템을 개발하면 웹 애플리케이션에서의 처리 시간이 오래 걸리는 작업을 비동기적으로 처리할 수 있습니다. Celery의 강력한 기능과 쉬운 사용법을 통해 더욱 효율적인 웹 애플리케이션을 개발할 수 있습니다.

참고 자료:

#TechBlog #Python