Celery로 비동기 메일링 작업 처리하기

이번 블로그에서는 Celery를 사용하여 비동기 메일링 작업을 처리하는 방법에 대해 알아보겠습니다. 비동기 작업 처리는 웹 응용 프로그램에서 시간이 오래 걸리는 작업을 백그라운드에서 실행하여 응답 시간을 최적화하는 데 도움이 됩니다. 이를 통해 사용자 경험을 향상시킬 수 있습니다.

Celery 소개

Celery는 분산된 작업 큐 시스템으로, Python으로 개발되었습니다. Celery는 웹 어플리케이션과 분리되어 백그라운드에서 작업을 처리하므로 웹 어플리케이션의 응답 시간이 길어지지 않습니다. Celery는 RabbitMQ, Redis, Amazon SQS 등과 같은 메세지 브로커를 사용하여 작업 큐 처리를 관리합니다.

Celery 설치

Celery를 사용하기 위해서는 먼저 Celery를 설치해야 합니다. 다음과 같이 명령어를 사용하여 Celery를 설치할 수 있습니다.

pip install celery

Celery 설정

Celery를 사용하기 위해 설정 파일을 작성해야 합니다. 예를 들어, celery.py라는 파일을 생성하고 다음과 같이 작성합니다.

from celery import Celery

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

@app.task
def send_mail(to, subject, body):
    # 메일을 보내는 로직 작성

위의 예제에서 Celery 인스턴스를 생성하고, 메일을 보내는 작업을 정의하는 send_mail 작업을 선언했습니다. 인자로 to, subject, body를 받아서 메일을 보내는 로직을 작성하면 됩니다.

Celery 실행

Celery를 실행하기 위해서는 다음과 같이 터미널에서 명령어를 입력합니다.

celery -A celery worker --loglevel=info

위의 명령어에서 -A 플래그는 Celery 애플리케이션의 모듈 또는 패키지를 지정하며, --loglevel 플래그는 로깅 레벨을 지정합니다.

Celery 작업 예약하기

Celery를 사용하여 메일 작업을 예약하려면 apply_async 메서드를 사용하면 됩니다. 다음은 예를 들어 보겠습니다.

from celery import Celery
from datetime import datetime, timedelta

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

@app.task
def send_mail(to, subject, body):
    # 메일을 보내는 로직 작성

# 메일 작업 예약
tomorrow = datetime.now() + timedelta(days=1)
send_mail.apply_async(args=['example@example.com', 'Hello', 'This is a test email'], eta=tomorrow)

위의 예제에서는 send_mail 작업을 apply_async 메서드를 사용하여 예약하고 있습니다. args 인자로 메일 관련 정보를 전달하고, eta 인자로 실행 시간을 설정합니다.

마무리

Celery를 사용하여 비동기 메일링 작업을 처리하는 방법에 대해 알아보았습니다. Celery를 사용하면 웹 어플리케이션의 응답 시간을 개선하고 사용자 경험을 향상시킬 수 있습니다. Celery는 유용한 도구로서 많은 기능을 제공하므로 관심 있는 분들은 공식 문서를 참조해 보시기 바랍니다.

참고 자료:

#Python #Celery