Celery와 AWS SNS를 연동하여 비동기 푸시 알림

소개

비동기 작업 큐인 Celery와 Amazon Simple Notification Service(SNS)를 연동하여 비동기로 푸시 알림을 보내는 방법에 대해 알아보겠습니다. 이를 통해 서버에서 시간이 오래 걸리는 작업을 처리하는 동안 사용자에게 즉시 알림을 보낼 수 있습니다.

Celery란?

Celery는 파이썬으로 작성된 분산 작업 처리 라이브러리입니다. Celery를 사용하여 비동기 작업을 처리하면 시스템의 성능과 확장성을 향상시킬 수 있습니다.

AWS SNS란?

Amazon SNS는 Amazon Web Services(AWS)에서 제공하는 완전 관리형 메시징 서비스입니다. SNS를 사용하면 애플리케이션에서 이메일, SMS, 푸시 알림 등 다양한 종류의 메시지를 안전하고 신속하게 전송할 수 있습니다.

Celery와 AWS SNS 연동 방법

1. Celery 설치

Celery를 사용하려면 먼저 Celery를 설치해야 합니다. 프로젝트의 가상환경에서 다음 명령을 실행하여 Celery를 설치합니다.

pip install celery

2. AWS SNS 토픽 생성

AWS Management Console에서 SNS 서비스로 이동하여 새로운 토픽을 생성합니다. 생성한 토픽의 ARN(Amazon Resource Name)을 메모해둡니다.

3. Celery 설정

Celery 설정 파일인 celery.py를 만들고 다음과 같이 작성합니다.

from celery import Celery

app = Celery(
    'myapp',
    broker='redis://localhost:6379/0', # Celery broker 설정
    backend='redis', # Celery 결과 저장 및 추적을 위한 백엔드 설정
)

app.conf.task_queues = {
    'default': {
        'exchange': 'default', # Celery 메시지 교환 설정
        'routing_key': 'default', # Celery 메시지 라우팅 설정
    },
}

app.conf.task_default_queue = 'default'

4. 비동기 작업 정의하기

tasks.py 파일을 만들고 비동기 작업을 정의합니다. 다음은 예시 코드입니다.

from celery import shared_task
import boto3

@shared_task
def send_push_notification(message):
    sns = boto3.client('sns', region_name='us-west-2') # AWS SNS 클라이언트 생성
    topic_arn = '<YOUR_TOPIC_ARN>' # 생성한 AWS SNS 토픽의 ARN

    response = sns.publish(
        TopicArn=topic_arn,
        Message=message
    )

    return response

5. Celery worker 실행하기

다음 명령을 실행하여 Celery worker를 실행합니다.

celery -A celery worker --loglevel=info

6. 푸시 알림 보내기

다음과 같이 Celery 작업을 호출하여 푸시 알림을 보낼 수 있습니다.

from tasks import send_push_notification

send_push_notification.delay('Hello, World!')

마무리

Celery와 AWS SNS를 연동하여 비동기 푸시 알림을 보내는 방법에 대해 알아보았습니다. 이를 사용하여 서버에서 오래 걸리는 작업을 비동기로 처리하면서도 사용자에게 실시간으로 알림을 전송할 수 있습니다. 이를 통해 애플리케이션의 효율성과 사용자 경험을 향상시킬 수 있습니다.

더 자세한 내용은 다음 문서를 참조하세요.

#tech #aws