Notice
Recent Posts
Recent Comments
Link
투케이2K
88. (Aws/Amazon) [Aws SQS Message Queue] SQS 에서 Queue 큐에 메시지 전송 및 Lambda 트리거 함수 등록 Receive 응답 처리 정리 본문
Aws (Amazon)
88. (Aws/Amazon) [Aws SQS Message Queue] SQS 에서 Queue 큐에 메시지 전송 및 Lambda 트리거 함수 등록 Receive 응답 처리 정리
투케이2K 2025. 7. 15. 20:37728x90
[개발 환경 설정]
개발 환경 : Aws / Amazon Web Services

[설명 정리]
// --------------------------------------------------------------------------------------
[개발 및 환경]
// --------------------------------------------------------------------------------------
- 인프라 : Aws / Amazon Web Services
- 기술 구분 : Aws / SQS / Message / Queue
- 사전) SQS 간단 설명 정리 :
>> Aws SQS 란 서버들끼리 주고 받을 수 있는 메세지 큐를 제공하는 AWS 서비스 입니다
>> Aws SQS 는 특정 플랫폼 서비스 확장 시 각 기능들을 여러 서버에서 처리하게 되면서, 서버들끼리 주고 받는 메세지를 잃어버리지 않고 정확하게 처리하는 데 도움을 주는 서비스입니다
>> Aws SQS 기본 개념 및 속성 용어 설명 :
- 메세지 : SQS 의 기본 데이터 단위 / XML, JSON과 같은 텍스트 형태이며 최대 64KB 까지 보낼 수 있음 / 메세지마다 고유한 ID가 부여 됨
- 큐 (Queue) : 메세지를 담는 공간 / 리전 별로 생성 필요 / 자료형의 큐와 이름이 같지만, 선입선출(FIFO)을 보장 하지 않음
- 배치 API : 한 번에 메세지를 최대 10개 혹은 최대 256 KB 까지 동시 처리 가능
- 보기 제한 시간 (Visibility Timeout) : 메세지를 받은 뒤 특정 시간 동안 다른 곳에서 동일한 메세지를 다시 꺼내볼 수 없음 / 큐 하나에 여러 서버가 메세지를 받을 때 동일한 메세지를 동시에 처리하는 것을 방지 함
- 지연 전송 (Delay Delivery) : 특정 시간 동안 메세지를 받지 못하게 한다
- 처리 실패 큐 (Dead Letter Queues) : 메세지를 받고 작업이 처리되면 메세지를 삭제 하지만, 설정한 횟수를 초과하여 메세지를 받았는데 삭제되지 않고 남아있다면 처리 실패 큐로 보내진다
- 짧은 폴링 (Short Polling) : 메세지 받기 요청을 하면 결과를 즉시 받을 수 있음
- 긴 폴링 (Long Polling) : 메세지가 있으면 바로 가져오고, 메세지가 없으면 메세지가 올 때까지 기다림 / 기본 제한시간은 20초이며, 1초부터 최대 20초까지 설정할 수 있음
// --------------------------------------------------------------------------------------
// --------------------------------------------------------------------------------------
[설 명]
// --------------------------------------------------------------------------------------
1. SQS 큐 생성
>> 직접 생성 : 콘솔, CLI, SDK 등으로 생성
- AWS CLI : aws sqs create-queue --queue-name my-queue
>> Lambda 에서 생성 : AWS Lambda 함수에서 SQS 큐 생성 수행
import boto3
import json
def lambda_handler(event, context):
sqs = boto3.client('sqs')
# 1. 큐 이름 정의
queue_name = 'my-queue'
# 2. 큐 생성 (이미 존재하면 기존 큐 URL 반환)
response = sqs.create_queue(
QueueName=queue_name,
Attributes={
'VisibilityTimeout': '30' # 메시지 처리 중 다른 소비자에게 숨김
}
)
queue_url = response['QueueUrl']
print(f"Queue URL: {queue_url}")
return {
'statusCode': 200
}
2. SQS 메시지 전송 Send 처리 Lambda 함수에서 메시지 전송 수행 (SQS 큐가 생성 되어 있고 URL 을 알고 있는 상황)
>> QUEUE_URL 예시 : https://sqs.ap-northeast-2.amazonaws.com/123456789012/my-queue
- 123456789012 정보는 계정 ID (어카운트 아이디)
>> SQS 큐 동적 생성 및 이벤트 처리가 필요한 경우 EventBridge 에서 큐 생성 이벤트 감지 → Send Lambda 를 호출 하는 방법도 있음
- 이 경우 EventBridge 에서 이벤트 감지를 위해 CloudTrail 에서 create sqs 필터링 설정이 추가 필요
>> Lambda 함수에서 SQS 메시지 전송 소스 코드 :
import boto3
import os
import json
# SQS 클라이언트 생성
sqs = boto3.client('sqs')
# 환경 변수에서 큐 URL 가져오기
QUEUE_URL = os.environ.get('SQS_QUEUE_URL')
def lambda_handler(event, context):
# 전송할 메시지 내용
message_body = json.dumps({
'task': 'process_data',
'timestamp': context.aws_request_id if context else 'manual-run'
})
# 메시지 전송
response = sqs.send_message(
QueueUrl=QUEUE_URL,
MessageBody=message_body
)
print(f"메시지 전송 완료! ID: {response['MessageId']}")
return {
'statusCode': 200,
'body': json.dumps('SQS 메시지 전송 성공')
}
3. AWS SQS 에서는 Send 이벤트가 발생 시 Receive 처리를 수행하는 자동 Lambda 함수 트리거 매핑 수행
>> SQS 에 메시지가 들어오면 → Receive Lambda 자동 호출
>> 만일, SQS 에 자동 트리거 처리 람다 함수가 없는 경우는 별도 백엔드에서 주기적으로 폴링 동작을 수행하며 sqs.receive 이벤트 감지 처리를 해야함
- 폴링 방식 시 소스 코드 예시 :
response = sqs.receive_message(
QueueUrl=queue_url,
MaxNumberOfMessages=1,
WaitTimeSeconds=10 # Long polling
)
4. Receive 처리를 수행하는 자동 Lambda 함수에서는 필요한 데이터 확인 후 > Dynamo DB 에 데이터 저장 작업 수행
// --------------------------------------------------------------------------------------
// --------------------------------------------------------------------------------------
[참고 사이트]
// --------------------------------------------------------------------------------------
[SQS (Simple Queue Service) 심플 큐 서비스 개념 및 설명 정리]
https://blog.naver.com/kkh0977/223733090215?trackingCode=blog_bloghome_searchlist
[Aws docs 사이트]
https://docs.aws.amazon.com/ko_kr/AWSSimpleQueueService/latest/SQSDeveloperGuide/welcome.html
[Aws SQS 소개 사이트]
https://aws.amazon.com/ko/sqs/
// --------------------------------------------------------------------------------------
728x90
반응형
'Aws (Amazon)' 카테고리의 다른 글
Comments
