Celery와 AWS Lambda를 이용한 서버리스 아키텍처 구축

서버리스 아키텍처란 무엇인가?

서버리스 아키텍처는 서버를 관리하거나 프로비저닝할 필요가 없는 클라우드 기반의 애플리케이션 아키텍처입니다. 이를 통해 개발자는 인프라에 대한 부담을 덜고, 애플리케이션 개발에 더 집중할 수 있습니다.

Celery와는 무엇인가?

Celery는 분산 작업 큐 시스템으로, Python 기반의 비동기 작업 처리를 지원합니다. Celery를 사용하면 애플리케이션에서 시간이 오래 걸리는 작업을 다른 프로세스나 서버에 할당하여 처리할 수 있습니다.

AWS Lambda란 무엇인가?

AWS Lambda는 서버리스 컴퓨팅 플랫폼으로, 이벤트에 응답하여 코드를 실행하는 서버리스 함수를 만들 수 있습니다. 이를 통해 더 빠른 개발과 확장성, 비용 절감을 실현할 수 있습니다.

Celery와 AWS Lambda의 조합

Celery와 AWS Lambda를 함께 사용하면, Celery 작업을 서버리스 환경에서 실행할 수 있습니다. 아래는 Celery와 AWS Lambda를 이용한 서버리스 아키텍처 구축 방법의 예시 코드입니다.

# tasks.py
from celery import Celery
import json
import boto3

app = Celery('tasks', backend='sqs', broker='sqs://')

@app.task
def process_data(data):
    # 데이터 처리 로직
    processed_data = data * 2
    
    # 결과 전송
    sqs = boto3.client('sqs')
    queue_url = '<SQS_QUEUE_URL>'
    response = sqs.send_message(
        QueueUrl=queue_url,
        MessageBody=json.dumps(processed_data)
    )
    
    return response

위 예시 코드는 Celery로 생성된 process_data 작업을 정의한 것입니다. 이 작업은 데이터를 받아와서 처리한 뒤, 처리 결과를 JSON 형태로 변환하여 SQS(Simple Queue Service)에 메시지로 전송합니다.

다음은 AWS Lambda 함수를 작성하여 Celery 작업을 실행하는 코드입니다.

import json
import boto3

def lambda_handler(event, context):
    data = event['data']
    
    # Celery 작업 실행
    client = boto3.client('lambda')
    response = client.invoke(
        FunctionName='<CELERY_LAMBDA_FUNCTION_NAME>',
        InvocationType='Event',
        Payload=json.dumps({'data': data})
    )
    
    return {
        'statusCode': 200,
        'body': json.dumps('Celery 작업이 정상적으로 실행되었습니다.')
    }

위 코드는 Lambda 핸들러 함수를 정의한 것입니다. lambda_handler 함수는 입력된 데이터를 가져와 Celery 작업을 실행하는데, 이를 위해 boto3를 사용하여 AWS Lambda 함수를 호출합니다. Celery 작업은 비동기적으로 실행되며, 작업 실행 결과에 대한 응답은 따로 처리하지 않습니다.

결론

Celery와 AWS Lambda를 조합하여 서버리스 아키텍처 구축할 수 있습니다. Celery는 비동기 작업 처리를 위한 강력한 도구이며, AWS Lambda는 서버리스 컴퓨팅 플랫폼으로 확장성과 비용 절감을 실현할 수 있습니다. 이를 통해 더 효율적인 애플리케이션 개발과 운영을 할 수 있습니다.

참고 자료:

#serverless #Celery #AWSLambda