이번 블로그에서는 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