[python] Celery로 비동기적으로 이메일 발송 및 템플릿화하는 방법은 어떻게 되는가?

소개

이메일 발송은 웹 애플리케이션에서 자주 사용되는 기능 중 하나입니다. 하지만 이메일 발송 과정은 시간이 오래 걸리는 작업이므로, 사용자가 이메일 발송이 완료될 때까지 기다리는 것은 효율적이지 않습니다. 이러한 문제를 해결하기 위해 Celery를 이용하여 이메일 발송을 비동기적으로 처리할 수 있습니다.

Celery 설정

Celery를 사용하기 위해서는 먼저 Celery를 설치하고 설정해야 합니다. 예를 들어, Django 프로젝트에서 Celery를 사용한다면, settings.py 파일에 다음과 같은 내용을 추가합니다:

# settings.py

CELERY_BROKER_URL = 'redis://localhost:6379/0'
CELERY_RESULT_BACKEND = 'redis://localhost:6379/0'

위의 설정은 Redis를 사용하여 Celery Broker와 Result Backend를 설정한 것입니다.

이메일 발송 함수 작성

이제 비동기적으로 이메일을 발송하기 위한 함수를 작성해보겠습니다. 아래는 Django에서 이메일을 발송하는 함수의 예입니다:

# utils.py

from django.core.mail import send_mail
from celery import shared_task

@shared_task
def send_email(subject, message, from_email, recipient_list):
    send_mail(subject, message, from_email, recipient_list)

위의 코드에서 @shared_task 데코레이터는 Celery가 해당 함수를 비동기적으로 실행하도록 만드는 역할을 합니다.

템플릿화된 이메일 발송

일반적으로 이메일은 고정된 내용이 아닌 템플릿을 사용하여 발송됩니다. 템플릿을 사용하면 동일한 형식의 이메일을 다양한 내용으로 발송할 수 있습니다. 아래는 Django에서 템플릿을 사용하여 이메일을 발송하는 예입니다:

# utils.py

from django.core.mail import send_mail
from django.template.loader import render_to_string
from celery import shared_task

@shared_task
def send_email_template(subject, template_name, context, from_email, recipient_list):
    message = render_to_string(template_name, context)
    send_mail(subject, message, from_email, recipient_list)

위의 코드에서 render_to_string() 함수는 템플릿 파일과 컨텍스트를 사용하여 이메일 내용을 생성합니다.

Celery 실행하기

Celery를 실행하기 위해서는 다음과 같이 명령어를 입력합니다:

$ celery -A your_project_name worker --loglevel=info

위의 명령어에서 your_project_name은 실행 중인 프로젝트의 이름으로 바꿔주어야 합니다.

결론

Celery를 사용하여 이메일 발송을 비동기적으로 처리하는 방법에 대해 알아보았습니다. 비동기적으로 이메일을 발송하면 응답 시간이 크게 단축되며, 사용자들은 더 나은 사용자 경험을 얻을 수 있습니다.