Celery를 이용한 메일링 작업 처리

이번 글에서는 Python 기반의 분산 작업 큐인 Celery를 활용하여 메일링 작업을 처리하는 방법에 대해 알아보겠습니다.

개요

Celery는 비동기 작업 처리를 위한 분산 작업 큐로, 병렬 작업 처리와 작업 순서 관리를 용이하게 해줍니다. 이를 이용하여 메일링 작업을 비동기적으로 처리할 수 있습니다. 이는 웹 애플리케이션에서 메일 전송이 오래 걸리는 작업이기 때문에 사용자의 요청을 블로킹하지 않고 백그라운드에서 처리함으로써 웹 애플리케이션의 성능을 향상시킬 수 있습니다.

설정

Celery를 사용하기 위해서는 먼저 Celery와 메시지 브로커인 RabbitMQ 또는 Redis를 설치해야 합니다. RabbitMQ와 Redis는 Celery가 작업을 분산 처리하는 데 사용되는 메시지 브로커로 동작합니다. 이를 통해 작업을 수신하고 결과를 전송할 수 있습니다.

먼저 필요한 패키지를 설치합니다.

pip install celery

Celery를 설정하기 위해 celery.py라는 파일을 생성하고 다음과 같이 작성합니다.

from celery import Celery

app = Celery('myapp', broker='pyamqp://guest@localhost//', backend='rpc://')

@app.task
def send_email(to, subject, body):
    # 메일 전송 작업 수행
    ...
    return 'Email sent'

위의 코드에서 brokerbackend는 사용할 메시지 브로커를 설정하는 부분입니다. RabbitMQ를 사용한다면 broker='amqp://guest@localhost//'로 설정하고, Redis를 사용한다면 broker='redis://localhost:6379/0'로 설정합니다. backend는 Celery가 작업 결과를 저장할 위치를 설정하는 부분입니다.

작업 실행

Celery를 이용하여 메일링 작업을 실행하기 위해서는 다음과 같이 코드를 작성합니다.

from myapp.celery import send_email

send_email.delay('to@example.com', 'Hello', 'This is the body of the email')

위의 코드에서 send_email.delay()를 호출하면 Celery가 비동기적으로 작업을 처리합니다. 이를 통해 웹 애플리케이션의 사용자 요청을 블로킹하지 않고 메일 전송 작업을 처리할 수 있습니다.

결과 확인

작업이 완료되면 backend에 설정한 위치에 결과가 저장됩니다. 작업 결과를 확인하기 위해 다음과 같이 코드를 작성할 수 있습니다.

from myapp.celery import send_email

result = send_email.delay('to@example.com', 'Hello', 'This is the body of the email')
print(result.get())

위의 코드에서 result.get()을 호출하면 작업의 결과를 반환합니다.

마무리

이번 글에서는 Celery를 활용하여 메일링 작업을 처리하는 방법에 대해 알아보았습니다. Celery를 사용하면 웹 애플리케이션의 성능을 향상시키고 사용자 요청을 블로킹하지 않고 비동기 작업을 처리할 수 있습니다.

더 많은 정보를 원하신다면 Celery 공식문서를 참고하세요.

#python #Celery