이메일을 보낼 때 시간이 오래 걸린다면, 웹 애플리케이션의 성능을 저하시킬 수 있습니다. 이런 경우, Celery를 사용하여 이메일을 비동기로 처리할 수 있습니다. Celery는 분산 작업 큐로 알려진 Python 라이브러리입니다. 이 블로그 포스트에서는 Celery를 사용하여 Django 애플리케이션에서 비동기 이메일 큐를 처리하는 방법을 알아보겠습니다.
Celery 설치하기
Celery를 사용하려면 먼저 Celery를 설치해야 합니다. 아래의 명령어를 사용하여 Celery를 설치합니다.
$ pip install celery
Django 설정 변경하기
Django 애플리케이션의 settings.py
파일에서 Celery 관련 설정을 변경해야 합니다. 아래의 예시 코드를 참고하여 설정을 추가해주세요.
# settings.py
# Celery 설정
CELERY_BROKER_URL = 'redis://localhost:6379/0'
CELERY_RESULT_BACKEND = 'redis://localhost:6379/0'
CELERY_ACCEPT_CONTENT = ['application/json']
CELERY_TASK_SERIALIZER = 'json'
CELERY_RESULT_SERIALIZER = 'json'
위의 예시 코드에서는 Redis를 사용하여 Celery 브로커와 결과 백엔드를 설정하고 있습니다. 필요에 따라 이 설정을 변경할 수 있습니다.
Celery 작업 정의하기
비동기로 처리할 이메일 작업을 Celery 작업으로 정의해야 합니다. Django 애플리케이션의 tasks.py
파일을 열고 아래의 예시 코드를 작성해주세요.
# tasks.py
from celery import shared_task
from django.core.mail import send_mail
@shared_task
def send_async_email(subject, message, from_email, recipient_list):
send_mail(subject, message, from_email, recipient_list)
위의 예시 코드에서는 send_async_email
이라는 Celery 작업으로 이메일을 보내는 동작을 정의하고 있습니다.
이메일 큐에 작업 추가하기
이메일을 전송해야 할 때 Celery 작업 큐에 작업을 추가해야 합니다. 이를 위해 Django 뷰에서 아래의 예시 코드를 사용할 수 있습니다.
from .tasks import send_async_email
def send_email_view(request):
subject = 'Hello'
message = 'This is a test email'
from_email = 'sender@example.com'
recipient_list = ['recipient@example.com']
send_async_email.delay(subject, message, from_email, recipient_list)
return HttpResponse('Email sent.')
위의 예시 코드에서는 send_async_email
작업을 Celery 작업 큐에 추가하여 이메일을 비동기로 전송하고 있습니다.
Celery 워커 실행하기
Celery 작업을 실행하기 위해 Celery 워커를 실행해야 합니다. 아래의 명령어를 사용하여 Celery 워커를 실행할 수 있습니다.
$ celery -A your_django_project_name worker --loglevel=info
위의 명령어에서 your_django_project_name
부분은 본인의 Django 프로젝트 이름으로 변경해야 합니다.
Celery 결과 확인하기
Celery 작업의 결과를 확인하려면 Django 애플리케이션의 어느 곳에서든지 아래의 예시 코드를 사용할 수 있습니다.
from celery.result import AsyncResult
result = AsyncResult(task_id)
if result.ready():
# 작업 완료
pass
elif result.failed():
# 작업 실패
pass
위의 예시 코드에서는 AsyncResult
를 사용하여 Celery 작업의 상태를 확인하고 있습니다.
Celery를 사용하여 Django 애플리케이션에서 이메일을 비동기로 처리하는 방법에 대해 알아보았습니다. Celery를 사용하면 애플리케이션의 성능을 향상시키고 사용자 경험을 개선할 수 있습니다.
#python #django #celery