반응형
AWS SQS(Simple Queue Service)는 비동기적으로 메시지를 처리할 수 있는 큐 서비스로, 서버리스 환경에서 Lambda와 함께 사용하면 효율적으로 데이터를 처리할 수 있습니다. 이번 글에서는 Node.js와 AWS SDK v3을 사용하여 SQS에 들어온 데이터를 Lambda로 처리하는 방법을 알아보겠습니다.
1. 아키텍처 개요
- 클라이언트 또는 다른 AWS 서비스가 SQS에 메시지를 보냅니다.
- SQS 큐에 메시지가 도착하면, 이를 트리거로 Lambda가 실행됩니다.
- Lambda는 메시지를 읽고, 필요한 처리를 수행한 후 성공적으로 완료되었음을 SQS에 알립니다.
이 과정을 통해 서버를 관리할 필요 없이 자동 확장되는 이벤트 기반의 데이터 처리를 구현할 수 있습니다.
2. SQS 큐 생성
AWS 콘솔을 사용하여 SQS 생성하기
- AWS Management Console에서 SQS 서비스로 이동합니다.
- 표준(Standard) 큐를 선택하고 이름을 지정한 후 생성합니다.
- "Lambda 트리거"는 이후 설정할 것이므로 기본 설정으로 완료합니다.
3. Lambda 함수 생성 및 SQS와 연결
1) Lambda 함수 생성
AWS 콘솔에서 Lambda를 생성하거나, AWS CDK 또는 Serverless Framework를 사용할 수 있습니다. 여기서는 AWS 콘솔을 통해 Lambda를 생성하는 방법을 설명합니다.
- AWS Lambda 서비스로 이동합니다.
- "함수 생성"을 클릭하고, 런타임으로 Node.js 22.x를 선택합니다.
- IAM 역할을 추가하여 SQS 메시지를 읽을 권한을 부여합니다.
Lambda에 필요한 IAM 정책 예시:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "sqs:ReceiveMessage",
"Resource": "arn:aws:sqs:region:account-id:queue-name"
}
]
}
- SQS 콘솔에서 생성한 큐로 이동합니다.
- "Lambda 트리거 추가" 버튼을 클릭합니다.
- 방금 생성한 Lambda 함수를 선택하고 저장합니다.
이제 SQS에 메시지가 들어오면 Lambda가 자동으로 실행됩니다.
4. Lambda 코드 작성 (Node.js + AWS SDK v3)
이제 실제로 Lambda 함수가 SQS 메시지를 읽고 처리하는 코드를 작성하겠습니다.
index.mjs (Node.js 18+ 지원)
import { SQSClient, DeleteMessageCommand } from "@aws-sdk/client-sqs";
const sqsClient = new SQSClient({ region: "us-east-1" }); // 리전 변경 필요
export const handler = async (event) => {
console.log("Received event:", JSON.stringify(event, null, 2));
for (const record of event.Records) {
const messageBody = record.body;
console.log("Processing message:", messageBody);
// 메시지 처리 로직 (예: 데이터 저장, API 호출 등)
await processMessage(messageBody);
// 처리 완료 후 메시지 삭제 (기본 설정은 자동 삭제가 아님)
await sqsClient.send(new DeleteMessageCommand({
QueueUrl: process.env.SQS_QUEUE_URL,
ReceiptHandle: record.receiptHandle
}));
}
return { statusCode: 200, body: "Messages processed successfully" };
};
async function processMessage(message) {
console.log("Handling message:", message);
// 여기서 메시지를 비즈니스 로직에 맞게 처리
}
5. Lambda 테스트 및 배포
1) Lambda 테스트 이벤트 생성
AWS 콘솔에서 Lambda 함수를 열고, 테스트 이벤트를 생성합니다.
{
"Records": [
{
"body": "{\"orderId\": 12345, \"status\": \"pending\"}",
"receiptHandle": "dummy-receipt-handle"
}
]
}
2) 실전 테스트 (SQS에 메시지 보내기)
AWS CLI 또는 SDK를 사용하여 SQS에 메시지를 직접 넣고 동작을 확인할 수 있습니다.
aws sqs send-message --queue-url "https://sqs.us-east-1.amazonaws.com/123456789012/MyQueue" --message-body '{"orderId": 12345, "status": "pending"}'
SQS에 메시지가 들어가면, 연결된 Lambda가 자동 실행되어 메시지를 처리하게 됩니다.
6. 결론
이 글에서는 AWS SQS와 Lambda를 사용하여 Node.js 기반의 서버리스 메시지 처리를 구축하는 방법을 알아보았습니다.
✅ 핵심 요약:
- SQS를 생성하고 메시지를 넣으면 Lambda가 이를 자동으로 처리함
- Lambda의 IAM 역할을 올바르게 설정해야 함
- Lambda에서 메시지를 수동으로 삭제해야 중복 처리를 방지할 수 있음
이제 AWS SQS와 Lambda를 활용하여 더욱 효율적인 서버리스 아키텍처를 구축해보세요! 🚀
반응형
'개발 환경 > AWS' 카테고리의 다른 글
[AWS] EventBridge로 마이크로서비스 간 이벤트 기반 통신 구축하기 (0) | 2025.02.28 |
---|---|
[AWS] AWS Lambda & API Gateway 성능 최적화: Cold Start와 Latency 줄이기 (0) | 2025.02.28 |
[AWS] Amazon Cognito ID 토큰을 사용하여 프론트엔드에서 Private S3 직접 접근하기 (0) | 2025.02.25 |
[AWS] Serverless Framework를 이용한 AWS Lambda와 API Gateway 배포하기 (1) | 2024.10.28 |
[AWS] AWS CloudFront 캐시 관리 (0) | 2021.05.06 |
댓글