Amazon SQS(Simple Queue Service)

도은호·2025년 10월 10일
0

AWS SAA

목록 보기
33/46

SQS(Simple Queue Service)완전관리형 메시지 큐. 프로듀서(발행자)가 큐에 메시지를 넣고, 컨슈머(소비자)가 나중에 꺼내서 처리. 시스템 간 결합을 느슨하게 만들고, 버스트 흡수·재시도·DLQ 같은 안정장치를 제공


1) 왜 쓰나요?

  • 트래픽이 몰려도 큐가 완충해 서비스 안정성↑
  • 다운스트림 장애가 있어도 메시지 유실 없이 재시도
  • 마이크로서비스 간 느슨한 결합으로 독립 배포·확장 가능

2) 핵심 개념

  • Queue: 메시지를 보관하는 버퍼.
  • Producer / Consumer: 넣는 쪽 / 꺼내 처리하는 쪽.
  • At-least-once: 표준 큐는 최소 한 번 전달(중복 가능) → 멱등(idempotent) 처리가 중요.
  • Visibility Timeout: 컨슈머가 메시지를 가져간 뒤 지정 시간 동안 다른 컨슈머에게 숨김. 처리 끝나면 Delete로 제거.

3) 큐 타입 두 가지

Standard Queue

  • 거의 무한 확장성, 초고처리량.
  • 순서 미보장, 최소 한 번 전달.

FIFO Queue (.fifo)

  • 메시지 그룹 단위 순서 보장 + 중복 제거.
  • 처리량은 메시지 그룹 수에 따라 확장.
  • MessageGroupId그룹 내 순서를 보장, Deduplication(5분 창) 지원.

4) 자주 쓰는 기능

  • Long Polling: 최대 20초 동안 기다렸다가 메시지가 오면 바로 응답 → 빈 폴링 비용↓
  • DLQ(Dead-letter Queue): 실패가 누적된 메시지를 격리해 분석/재처리.
  • Delay Queue & Message Timer: 큐/메시지 수준 지연 전송.
  • Message Attributes: 라우팅/필터에 쓰는 메타데이터.
  • Batch API: Send/Receive/Delete를 배치로 처리해 효율↑
  • Large Payload: 메시지 본문 최대 256KB. 더 크면 S3 + SQS 확장 라이브러리 패턴 사용.

5) 운영·보안 포인트

  • 지표 기반 오토스케일: ApproximateNumberOfMessages(Visible/InFlight)로 컨슈머 수 자동 조절.
  • Visibility Timeout 튜닝: 처리 시간이 길면 ChangeMessageVisibility 로 연장.
  • SSE-KMS(서버측 암호화), VPC Interface Endpoint(PrivateLink)로 사설 접근.
  • 액세스 정책: SNS → SQS 구독 시, SQS 큐 정책에 해당 SNS Topic ARN 허용 필요.

6) SNS와 뭐가 달라요?

  • SNS: 브로드캐스트(푸시) — 한 번 발행 → 여러 구독자에게 즉시 전송.
  • SQS: 버퍼(풀링) — 소비자가 꺼내 갈 때까지 저장, 재시도·DLQ로 확실한 처리.

7) 빠른 CLI 예시

(1) 표준 큐 만들기 (+ Long Polling, 보관 4일, 가시성 60초)

aws sqs create-queue \
  --queue-name my-queue \
  --attributes VisibilityTimeout=60,ReceiveMessageWaitTimeSeconds=20,MessageRetentionPeriod=345600

(2) FIFO 큐 만들기 (컨텐츠 기반 중복 제거)

aws sqs create-queue \
  --queue-name orders.fifo \
  --attributes FifoQueue=true,ContentBasedDeduplication=true

(3) 전송/수신/삭제

# 전송 (표준 큐)
aws sqs send-message --queue-url <URL> --message-body '{"orderId":123}'

# 전송 (FIFO: 그룹 ID 필수)
aws sqs send-message --queue-url <URL_of_orders.fifo> \
  --message-body '{"orderId":123}' \
  --message-group-id group-1

# 수신 (최대 10건, Long Polling 20s)
aws sqs receive-message --queue-url <URL> --max-number-of-messages 10 --wait-time-seconds 20

# 삭제 (ReceiptHandle 필요)
aws sqs delete-message --queue-url <URL> --receipt-handle '<RECEIPT_HANDLE>'

(4) DLQ 연결(5회 실패 후 격리)

aws sqs create-queue --queue-name my-dlq
DLQ_ARN=$(aws sqs get-queue-attributes --queue-url <DLQ_URL> --attribute-names QueueArn --query 'Attributes.QueueArn' --output text)

aws sqs set-queue-attributes --queue-url <URL> \
  --attributes RedrivePolicy="{\"deadLetterTargetArn\":\"$DLQ_ARN\",\"maxReceiveCount\":\"5\"}"

(5) SNS → SQS 구독용 SQS 정책(요지)

{
  "Version": "2012-10-17",
  "Statement": [{
    "Sid": "AllowSNSToSend",
    "Effect": "Allow",
    "Principal": {"Service": "sns.amazonaws.com"},
    "Action": "sqs:SendMessage",
    "Resource": "arn:aws:sqs:ap-northeast-2:111122223333:my-queue",
    "Condition": {"ArnEquals": {"aws:SourceArn": "arn:aws:sns:ap-northeast-2:111122223333:my-topic"}}
  }]
}

8) 베스트 프랙티스 체크리스트

  • 멱등 처리: 중복 수신에도 안전하게(키 기반 처리/트랜잭션 아웃박스 등).
  • 가시성 타임아웃 ≥ 처리시간(+ 필요한 경우 동적 연장).
  • DLQ + 알람: maxReceiveCount 설정, DLQ 메시지 수 모니터링.
  • Long Polling(20s): 빈 폴링 비용·지연 감소.
  • Batch 크기 최적화: 처리량/지연에 맞춰 1~10 메시지 튜닝.
  • SSE-KMS & VPC 엔드포인트: 보안·내부망 접근.
  • 모니터링: ApproximateNumberOfMessages*, AgeOfOldestMessage, 처리 지연 경보.

요약

  • SQS = 서버 없는 메시지 큐: 넣고, 나중에 꺼내 처리.
  • Standard(확장성/최소 한 번) vs FIFO(순서/중복 제거).
  • Long Polling, DLQ, Visibility Timeout, SSE-KMS안정·보안·비용까지 챙기면 끝!
profile
`•.¸¸.•´´¯`••._.• 🎀 𝒸𝓇𝒶𝓏𝓎 𝓅𝓈𝓎𝒸𝒽💞𝓅𝒶𝓉𝒽 🎀 •._.••`¯´´•.¸¸.•`

0개의 댓글