웹 애플리케이션을 만들다 보면 시간이 오래 걸리는 작업을 수행해야 할 때가 많습니다. 예를 들어:

  • 사용자가 회원가입하면 인증 이메일을 보내야 함.
  • 매일 밤 12시에 자동으로 데이터 정리 작업을 실행해야 함.
  • 사용자가 특정 작업을 예약하면 정해진 시간에 실행되어야 함.

Django는 기본적으로 요청이 들어오면 즉시 응답을 보내는 방식으로 동작하기 때문에, 시간이 오래 걸리는 작업을 비동기적으로 처리할 방법이 필요합니다. 바로 여기서 Celery가 등장합니다! 🚀

Celery는 Django에서 비동기 작업을 실행할 수 있도록 도와주는 강력한 도구이며, Celery-Beat는 예약된 시간에 특정 작업을 실행할 수 있도록 도와줍니다.

Django Celery-Beat task scheduling illustration

1️⃣ Django-Celery-Beat에서 예약 작업을 설정하는 방법

Celery-Beat에서 예약 작업을 설정하는 방법은 크게 두 가지가 있습니다.

✅ (1) Django Admin에서 GUI로 예약 설정

Django-Celery-Beat는 Django Admin에서 직접 GUI를 통해 예약 작업을 설정할 수 있도록 지원합니다.

📌 특징
  • 코딩 없이 간단한 설정만으로 주기적인 작업을 실행할 수 있음.
  • Django 관리자 페이지에서 UI를 통해 주기적 작업을 설정하고 수정 가능.
  • 하지만, 정적인 설정이므로 사용자 요청과 연계해서 동적으로 변경하기 어려움.
📌 어떤 경우에 사용하면 좋을까?
  • 애플리케이션과 사용자 간의 상호작용이 필요 없는 경우
  • 예) 매일 자정에 자동으로 데이터 백업을 실행하는 작업
  • 예) 매주 월요일 아침마다 특정 API 데이터를 업데이트하는 작업

✅ (2) Python 코드를 통해 동적으로 예약 작업 생성

Celery-Beat의 예약 작업을 코드를 통해 직접 생성할 수도 있습니다.

📌 특징
  • 사용자의 요청에 따라 동적으로 예약 작업을 생성할 수 있음.
  • 예약된 작업을 코드를 통해 생성, 변경, 삭제 가능.
  • Admin을 거치지 않고, 뷰(View)에서 직접 주기적 작업을 등록할 수 있음.
📌 어떤 경우에 사용하면 좋을까?
  • 사용자의 특정 요청이 발생하면 예약 작업이 필요할 때.
  • 예) 사용자가 "예약 주문"을 하면 2시간 후 자동으로 취소되는 작업을 등록.
  • 예) 사용자가 "이메일 리마인더" 기능을 설정하면 정해진 시간에 알림 이메일을 보내도록 예약.

2️⃣ [실습] Python 코드로 예약 작업 생성하기

Step 1: Celery Task 정의

from celery import shared_task

@shared_task
def send_reminder_email(user_id):
    # 여기에서 이메일을 보내는 로직을 구현
    print(f"📧 사용자 {user_id} 에게 리마인더 이메일을 전송했습니다!")

Step 2: Django-Celery-Beat에서 PeriodicTask 객체 생성

from django_celery_beat.models import PeriodicTask, IntervalSchedule
import json

# 1️⃣ 실행 간격(Interval) 생성 (예: 10분마다 실행)
schedule, created = IntervalSchedule.objects.get_or_create(
    every=10,  # 10분 간격
    period=IntervalSchedule.MINUTES
)

# 2️⃣ PeriodicTask 생성
task = PeriodicTask.objects.create(
    interval=schedule,  # 실행 간격
    name="Send Reminder Email",  # 작업 이름
    task="myapp.tasks.send_reminder_email",  # 실행할 Celery Task 이름
    args=json.dumps([1]),  # 사용자 ID를 전달 (여기서는 예제이므로 1번 사용자)
)

🎯 결론: Django 개발자라면 Celery는 필수!

Celery는 Django에서 비동기 작업을 관리하고 예약 실행을 가능하게 하는 필수적인 도구입니다.

특히 Celery-Beat를 활용하면 주기적인 작업을 설정하고, 특정 이벤트에 따라 동적으로 예약을 관리할 수 있습니다.

📌 정리하면:

  1. Django-Celery-Beat는 예약된 작업을 실행하는 강력한 도구.
  2. Django Admin(GUI)을 이용하면 손쉽게 주기적 작업을 설정할 수 있음.
  3. Python 코드로 작업을 생성하면 사용자 요청과 연계하여 동적으로 예약 작업을 관리할 수 있음.
  4. Django 개발자라면 Celery의 기본적인 개념과 Celery-Beat를 익히는 것이 필수적!

🔥 다음 편 예고

이번 편에서는 코드를 통해 Celery-Beat의 예약 작업을 생성하는 법을 간단하게 소개했습니다. 하지만 실전에서는 `PeriodicTask` 모델의 더 다양한 필드를 활용하여 복잡한 로직에 대응해가면서 사용하게 됩니다.

다음 편에서는 좀 더 본격적으로 다양한 작업을 예약하는 실전 코드와 `PeriodicTask` 모델의 각 필드가 어떤 역할을 하는지를 자세히 다뤄볼 예정입니다.

더 깊이 있는 Celery 활용법을 알고 싶다면 다음 편도 기대해주세요! 🚀

그리고, 블로그 내에서 Celery 관련된 글을 더 보고 싶다면,

아래의 '유사 포스트' 목록이나, 우측 상단의 검색창에서 "Celery"를 검색해 보세요! 😊