BackEnd

[MQ] SQS란?

Raconer 2025. 6. 17. 19:17
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는 다음과 같은 방식으로 동작합니다.

✅ 실패 처리 흐름

  1. 소비자가 메시지를 받고 처리 중 오류 발생
  2. DeleteMessage를 호출하지 않으면 메시지는 그대로 유지됨
  3. Visibility Timeout 만료 후, 메시지가 다시 큐에 나타남
  4. 소비자가 다시 수신하여 재시도
  5. 이 과정을 **최대 재시도 횟수(maxReceiveCount)**까지 반복
  6. 초과 시 → **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