AWS SQS란?

2022. 2. 7. 12:06ETC

SQS란?

AWS의 Simple Queue Service 로, 말 그대로 큐 서비스입니다.

데이터를 큐에 넣는 어플리케이션과 큐에서 데이터를 빼서 사용하는 어플리케이션을 느슨하게 연결해주는 역할을 합니다.

이와 같은 미들웨어를 메시지 브로커라고 합니다.

메시지 브로커의 대표적인 제품은 RabbitMQ, SNS 등이 있습니다.

 

SQS 아키텍처

SQS 기본 동작 방식

SQS 기본 동작 방식

  1. 메시지 생산자는 SQS에 전달할 메시지를 보냅니다.
  2. Queue에서는 이 메시지를 일정 기간동안(설정에 따라) 가지고 있습니다.
  3. 메시지 소비자는 주기적으로 Queue에 가져갈 메시지가 있는지 Polling하여, 메시지가 있다면 Pull 하여 가져갑니다.
  4. 메시지 소비자는 Ack를 Queue에 보내 메시지 처리가 완료됨을 알리고 SQS는 해당 메시지를 삭제합니다.

SQS Queue 종류

SQS는 두 가지의 큐가 있습니다.

SQS 큐 종류

Standard

  • 메시지의 순서를 보장하지 않습니다. (하지만 최대한 순서를 보장하려고 노력은합니다.)
  • 초당 무제한에 가까운 TPS를 지원합니다.
  • 메시지를 동시에 읽으면 하나의 메시지를 중복으로 수신할 수 있습니다. (중복 수신의 방어로직이 필요)
  • SQS에서는 큐에서 메시지를 가져가면, 최대 얼마동안 다른 클라이언트에 수신되지 않도록 시간 설정이 가능합니다.
  • 최소 1회 전달은 보장합니다.
  • 순서에 상관없이 메시지 처리가 중복으로 이뤄져도 되는 어플리케이션에서 사용합니다.

FIFO

  • 메시지의 순서를 보장합니다.
  • 초당 300개의 메시지를 전송, 수신, 삭제할 수 있습니다. (300TPS)
  • 메시지를 중복으로 수신할 수 없습니다.
  • Standard 보다 가격이 비쌉니다.
  • 메시지 순서가 중요하고 중복처리되면 안되는 어플리케이션에서 사용합니다.

SQS 이점

  • 관리 편리성 - 아무래도 AWS에서 사용하다보니, 인프라를 구축, 유지 관리하는 소모적인 작업이 필요 없습니다.

메시지를 여러 서버에 저장한다.

  • 안정적인 메시지 전달 - SQS는 메시지를 여러 서버에 안전하게 저장합니다. 메시지 손실이나 다른 서비스의 가용상태, 처리량과는 상관없이 모든 데이터 메시지를 전달할 수 있습니다.
  • 편리한 확장성 - AWS 클라우드를 활용하여, 어플리케이션에 따라서 탄력적으로 확장됩니다.
  • 보안 - 메시지를 서버 측 암호화를 통해 전달되어 어플리케이션간 민간함 데이터를 안전하게 전달할 수 있습니다. 또한 이런 암호화의 키는 AWS KMS(Key Management Service)를 통해 중앙에서 관리할 수 있습니다.

DLQ(Dead Letter Queue)

DLQ 과정

  • 메시지를 수신한 컨슈머가 메시지 처리를 실패하여 ACK를 Queue에 보내지 않으면, Queue는 해당 메시지를 DLQ에 저장합니다.
  • DLQ에 메시지가 쌓이면 알림을 오게 할 수 있습니다.
  • DLQ에 메시지가 쌓이면 실패 이유에 대한 로그 분석을 할 수 있습니다.

QUEUE 콘솔 및 관리

Queue를 관리하기 위해 SQS에서 사용하는 용어에 대해 알아봅시다.

SQS 설정

  • Visibility Timeout - SQS는 컨슈머가 메시지를 제대로 처리했는지 알 수 없습니다. 따라서 메시지를 컨슈머가 가져갔을 때, 자동으로 삭제하지 않습니다. 만약 컨슈머가 메시지를 가져갔을 때, 다른 컨슈머가 해당 메시지를 가져갈 수 없게 하려면 Visibility Timeout을 설정하여 해당 시간동안 수신할 수 없게 설정할 수 있습니다.
  • Retention - 메시지가 큐에 존재할 수 있는 최대 시간입니다. 해당 시간이 지나면 메시지는 삭제됩니다.

메시지 대기 과정

  • Delivery Delay - SQS에 메시지가 전달됐을 때, Queue에 메시지를 바로 넣지 않고 해당 시간만큼 대기했다가 넣을 수 있습니다. 해당 시간동안 모든 컨슈머가 해당 메시지에 노출되지 않습니다. 기본값은 0이고 최대 15분까지 설정할 수 있습니다.
  • Receive message wait time - 컨슈머가 큐로 Pull을 요청했을 때, 큐가 비어있다면 얼마동안 대기할건지에 대한 설정입니다.
  • Polling Message Count - 컨슈머가 큐로 한 번 메시지 Pull을 요청할 때, 몇 개의 메시지를 가져올건지에 대한 설정입니다.

DLQ 설정

  • Maximum receives - 컨슈머가 최대 몇 번 메시지를 받을 수 있는지 설정할 수 있습니다. 예를 들어 Maximum receives가 3인 경우, 컨슈머가 메시지를 3번 수신했지만 메시지 삭제 ACK를 보내지 않으면 해당 메시지는 DLQ에 저장될 수 있습니다.

SQS 개발자 가이드

https://docs.aws.amazon.com/ko_kr/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-dg.pdf

 

'ETC' 카테고리의 다른 글

메시지 플랫폼 장애 에러 처리 비교 - SQS, RabbitMQ, Kafka  (0) 2022.02.15
메시징 플랫폼 비교 - SQS, SNS, Kafka, RabbitMQ  (2) 2022.02.11
RabbitMQ란?  (0) 2022.02.09
Kafka(카프카)란?  (0) 2022.02.07
AWS SNS란?  (0) 2022.02.07