AWS SQS(Simple Queue Service)는 완전 관리형 메시지 큐 서비스로, 분산 시스템의 컴포넌트를 느슨하게 결합(Loose Coupling)시킨다. 표준 큐(최소 1회 전달)와 FIFO 큐(정확히 1회, 순서 보장)를 제공한다.
큐 유형
| 표준 큐 | FIFO 큐 |
|---|
| 처리량 | 무제한 | 300 TPS (배치: 3000) |
| 전달 | 최소 1회 | 정확히 1회 |
| 순서 | 최선 노력 | 엄격한 순서 |
| 가격 | 저렴 | 비쌈 |
메시지 발행 및 수신
python
import boto3
import json
sqs = boto3.client('sqs', region_name='ap-northeast-2')
QUEUE_URL = 'https://sqs.ap-northeast-2.amazonaws.com/123456789/my-queue'
# 메시지 발행
sqs.send_message(
QueueUrl=QUEUE_URL,
MessageBody=json.dumps({'orderId': '12345', 'total': 50000}),
MessageAttributes={
'type': {'DataType': 'String', 'StringValue': 'order.created'}
}
)
# 메시지 수신 및 처리
while True:
response = sqs.receive_message(
QueueUrl=QUEUE_URL,
MaxNumberOfMessages=10,
WaitTimeSeconds=20, # Long Polling
VisibilityTimeout=30,
)
for msg in response.get('Messages', []):
body = json.loads(msg['Body'])
process_order(body)
# 처리 완료 후 삭제
sqs.delete_message(QueueUrl=QUEUE_URL, ReceiptHandle=msg['ReceiptHandle'])
데드 레터 큐 (DLQ)
python
# 처리 실패 메시지를 DLQ로 이동
# maxReceiveCount 초과 시 자동 이동
dlq_config = {
'deadLetterTargetArn': 'arn:aws:sqs:ap-northeast-2:123:my-dlq',
'maxReceiveCount': '3' # 3번 실패 시 DLQ로
}
관련 개념