728x90
Amazon SQS(Amazon Simple Queue Service)는 AWS에서 제공하는 완전 관리형 메시지 큐 서비스입니다.
이 글에서는 SQS의 개념부터 메시지 수신, 실패 처리, FIFO 옵션의 차이까지 실무 중심으로 정리합니다.
📨 1. SQS란?
SQS는 **생산자(Producer)**와 소비자(Consumer) 간의 통신을 비동기적으로 분리시켜주는 메시지 큐 서비스입니다.
생산자는 메시지를 큐에 보내고, 소비자는 나중에 메시지를 받아 처리할 수 있습니다.
✅ 특징 요약
- 완전 관리형 서비스 → 인프라 관리 필요 없음
- 높은 내구성 (S3 수준)
- 최대 256KB 메시지, 14일 보존 가능
- FIFO 및 Standard 큐 지원
⚙️ 2. 메시지 흐름 구조 (기본 처리 흐름)
▶️ Step 1. 메시지 전송
- **생산자(Producer)**가 SendMessage API로 SQS에 메시지를 전송
- 메시지는 내부적으로 복제되어 SQS 서버 여러 곳에 저장됨 → 고가용성 보장
[Producer] → SendMessage → [SQS Queue]
▶️ Step 2. 메시지 수신
- **소비자(Consumer)**가 ReceiveMessage API로 메시지를 수신
- 메시지는 실제 삭제되지 않고, 일정 시간 동안 다른 소비자에게 보이지 않도록 숨겨짐
- 이 시간 설정을 Visibility Timeout이라고 함 (기본 30초)
[Consumer] → ReceiveMessage → [메시지 숨김 처리]
▶️ Step 3. 메시지 처리 완료 시
- 메시지 처리가 끝나면 DeleteMessage API 호출
- 해당 메시지는 SQS 큐에서 완전히 삭제
- 삭제하지 않으면 메시지는 다시 나타나 재시도 대상이 됨
[Consumer] → DeleteMessage → [메시지 완전 삭제]
❗ 3. 메시지 처리 실패 시 동작
실제 환경에서는 메시지 처리 실패(예: 예외 발생)가 종종 발생합니다. 이때 SQS는 다음과 같은 방식으로 동작합니다.
✅ 실패 처리 흐름
- 소비자가 메시지를 받고 처리 중 오류 발생
- DeleteMessage를 호출하지 않으면 메시지는 그대로 유지됨
- Visibility Timeout 만료 후, 메시지가 다시 큐에 나타남
- 소비자가 다시 수신하여 재시도
- 이 과정을 **최대 재시도 횟수(maxReceiveCount)**까지 반복
- 초과 시 → **DLQ(Dead Letter Queue)**로 자동 이동 (설정한 경우)
📦 4. Dead Letter Queue(DLQ)란?
- 처리 실패 메시지를 별도로 수집하는 보조 큐
- 분석, 로깅, 수동 재처리에 활용
- maxReceiveCount 설정을 통해 특정 횟수 이상 실패한 메시지를 이동시킴
[처리 실패] → (n번 반복) → DLQ로 이동
🧾 5. FIFO 옵션이란?
Amazon SQS는 두 가지 큐 타입을 제공합니다:
타입특징
Standard Queue | 기본 큐, 순서 보장 없음, 중복 가능 |
FIFO Queue | 순서 보장, 중복 제거, 처리량 제한 |
✅ FIFO Queue란?
- 메시지를 보낸 순서대로 정확히 한 번만 처리
- MessageGroupId를 기준으로 그룹 내 순서 보장
- MessageDeduplicationId로 중복 메시지 자동 제거
예: 사용자별 주문 처리, 트랜잭션, 순차적 상태 전이 등에서 사용
❌ FIFO 미적용(Standard Queue) 시
항목내용
순서 보장 | ❌ 없음 (B → A → C 순서도 가능) |
중복 수신 | ❌ 가능 (DeleteMessage 실패 시 재수신) |
처리량 | ✅ 무제한 처리량 가능 |
용도 | 순서가 중요하지 않은 이벤트 처리에 적합 |
🧩 6. 전체 흐름 요약 다이어그램 (텍스트 기반)
[Producer]
↓
SendMessage
↓
[SQS Queue]
↓
ReceiveMessage
↓
[Consumer 처리 중]
↓
[성공?]
├─ Yes → DeleteMessage → 삭제 완료
└─ No
↓
Visibility Timeout 만료 → 재시도
↓
[재시도 누적]
↓
maxReceiveCount 초과 → DLQ 이동
✅ 실무에서 유용한 설정들
항목설명
Visibility Timeout | 수신 후 메시지를 숨기는 시간 (기본 30초) |
maxReceiveCount | 최대 재시도 횟수 (초과 시 DLQ 이동) |
DLQ | 실패 메시지를 저장할 보조 큐 |
Retention Period | 메시지를 큐에서 보존하는 기간 (최대 14일) |
FIFO Queue | 순서 보장 및 중복 제거가 필요한 경우 사용 |
Standard Queue | 고처리량, 순서 무관한 작업에 적합 |
✅ 마무리: 왜 SQS를 써야 할까?
Amazon SQS는 신뢰성 높은 메시지 처리 시스템을 손쉽게 구성할 수 있게 해줍니다.
특히 다음 상황에서 유용합니다:
- 백엔드 시스템 간 비동기 메시지 통신
- 서버리스 아키텍처에서 Lambda와 함께 사용
- 오토스케일링 환경에서 안정적인 작업 큐 역할
- 순서 보장 또는 대용량 메시지 분산 처리
728x90
'BackEnd' 카테고리의 다른 글
[MQ]메시지 큐 3개 비교: Amazon SQS vs Apache Kafka vs RabbitMQ (0) | 2025.06.17 |
---|---|
[MQ] Kafka란? (0) | 2025.06.17 |
[Monitoring]Promtail + Loki 설치 및 연결(Docker 기반) (0) | 2025.06.14 |
[Monitoring] Loki와 Promtail이란? (0) | 2025.06.14 |
[Monitoring] Prometheus + Grafana 설치 및 연결(Docker 기반) (0) | 2025.06.08 |