1. SQS에서 메시지 Poll (최대 10개씩) ↓2. 메시지 처리 (예: RDS에 저장) ↓3. DeleteMessage API로 삭제
다중 Consumer
┌─→ Consumer 1 (Poll) │SQS Queue ──────────┼─→ Consumer 2 (Poll) │ └─→ Consumer 3 (Poll)• 병렬 처리• At least once delivery• Best-effort ordering• Consumer 수평 확장 가능
┌──────────────────────────────────────────────────────┐│ ││ Consumer 처리 실패 ││ ↓ ││ 메시지 → Queue로 복귀 ││ ↓ ││ MaximumReceives 초과 시 ││ ↓ ││ Dead Letter Queue로 이동 ││ │└──────────────────────────────────────────────────────┘┌─────────────┐ 실패 반복 ┌─────────────────┐│ SQS Queue │ ─────────────────▶ │ Dead Letter Queue│└─────────────┘ (MaxReceives) └─────────────────┘
특징
항목
설명
용도
디버깅
조건
MaximumReceives 초과
DLQ 타입
Standard Queue → Standard DLQ, FIFO → FIFO DLQ
보존 기간
14일 권장
Redrive to Source
DLQ 메시지를 원본 Queue로 다시 전송
코드 수정 후 재처리 가능
커스텀 코드 없이 배치 처리
8. SQS 추가 기능
Delay Queue (지연 큐)
항목
값
최대 지연
15분
기본값
0초 (즉시 사용 가능)
설정
Queue 레벨 또는 메시지별 (DelaySeconds)
Long Polling
항목
설명
개념
메시지 없으면 대기
장점
API 호출 감소, 효율성/지연시간 개선
대기 시간
1~20초 (20초 권장)
설정
ReceiveMessageWaitTimeSeconds
Short Polling: 메시지 없음 → 즉시 빈 응답 → 다시 호출 → ...Long Polling: 메시지 없음 → 대기 → 메시지 도착 → 응답
💡 Long Polling이 Short Polling보다 권장됨!
쉽게 이해하기: Long Polling에서 대기하는 주체는?
Consumer(소비자)가 대기합니다.
┌──────────────┐ ┌───────────┐│ Consumer │ ── ReceiveMessage ─→│ SQS Queue ││ (EC2, Lambda)│ │ ││ │ ←── 메시지 없으면 │ (비어있음) ││ [대기 중] │ 최대 20초 대기 │ ││ │ ←── 메시지 도착 시 │ [메시지!] ││ │ 즉시 응답 │ │└──────────────┘ └───────────┘
Consumer가 SQS에 "메시지 줘"라고 요청하고 기다리는 것입니다.
쉽게 이해하기: Consumer는 어떻게 정하는가?
SQS는 Consumer를 "정하지 않습니다" - Consumer가 스스로 메시지를 가져가는(Pull) 방식입니다.
💡 Batch API (SendMessage, DeleteMessage, ChangeMessageVisibility) 사용 시 비용 절감
10. SQS FIFO Queue
특징
항목
Standard
FIFO
순서
Best effort
보장 (First In First Out)
중복
가능
Exactly-once (중복 제거)
처리량
무제한
300 msg/s (배치: 3000 msg/s)
큐 이름
제한 없음
.fifo 접미사 필수
Deduplication (중복 제거)
방식
설명
Content-based
메시지 본문 SHA-256 해시
Deduplication ID
명시적 ID 지정
중복 제거 간격: 5분
Message Grouping
SQS FIFO Queue:┌─────────────────────────────────────────┐│ ││ Group A: [A3] [A2] [A1] → Consumer A ││ Group B: [B4] [B3] [B2] [B1] → Consumer B ││ Group C: [C2] [C1] → Consumer C ││ │└─────────────────────────────────────────┘• 같은 MessageGroupID → 순서 보장, 단일 Consumer• 다른 MessageGroupID → 병렬 처리 가능• 그룹 간 순서는 보장 안 됨
Part 2: Amazon SNS
11. SNS 개요
쉽게 이해하기: SQS와 SNS 약자
서비스
약자
전체 이름
핵심
SQS
Simple Queue Service
간단한 대기열 서비스
메시지 저장 후 Consumer가 가져감
SNS
Simple Notification Service
간단한 알림 서비스
메시지 즉시 전달 (발행-구독)
Pub/Sub 모델
┌──────── Direct Integration ────────┐│ ││ Buying Service ││ │ ││ ├──→ Email notification ││ ├──→ Fraud Service ││ ├──→ Shipping Service ││ └──→ SQS Queue ││ ││ ❌ 각 서비스에 직접 연결 (복잡!) │└────────────────────────────────────┘┌──────── Pub/Sub (SNS) ─────────────┐│ ││ Buying Service ││ │ ││ ▼ ││ ┌─────────┐ ││ │SNS Topic│ ││ └────┬────┘ ││ │ ││ ├──→ Email notification ││ ├──→ Fraud Service ││ ├──→ Shipping Service ││ └──→ SQS Queue ││ ││ ✅ Topic 하나에 발행 → 모두 수신 │└────────────────────────────────────┘
SNS 특징
항목
값
Topic 수
최대 100,000
구독자 수/Topic
최대 12,500,000
메시지
모든 구독자가 수신 (필터 가능)
지원 Subscribers
Subscriber
용도
SQS
Queue로 전달
Lambda
서버리스 처리
Kinesis Data Firehose
스트리밍
HTTP(S) Endpoints
웹훅
Email / SMS
알림
Mobile Push
모바일 알림
SNS와 통합되는 AWS 서비스
CloudWatch Alarms
S3 Bucket Events
Auto Scaling Group Notifications
CloudFormation State Changes
AWS Budgets
Lambda
DynamoDB
RDS Events
등...
12. SNS 보안
암호화
유형
설명
전송 중
HTTPS API
저장 시
KMS
클라이언트 측
직접 암/복호화
접근 제어
방식
용도
IAM Policies
SNS API 접근
SNS Access Policies
Cross-account, S3 등 다른 서비스 쓰기 허용
13. SNS + SQS: Fan-Out 패턴
개념
┌─────────────┐ │ SQS Queue │ → Fraud Service │ (Subscriber)│ └─────────────┘ ↑Buying Service → SNS Topic ↓ ┌─────────────┐ │ SQS Queue │ → Shipping Service │ (Subscriber)│ └─────────────┘