본문 바로가기
프로그래밍/기타

[AWS] SQS(Simple Queue Service)의 다양한 설정들

by 사바라다 2020. 10. 15.

안녕하세요. 오늘은 여러분들과 AWS의 SQS에 대해 공유드리고자 합니다. 많은 분들이 AWS의 SQS 서비스를 사용하고 있으실 거라고 생각합니다. SQS는 AWS의 서비스 중 하나로 Queue를 구현하고 있는 서비스입니다. 이 서비스는 UI로 매니징 할 수 있도록 되어있고 Java에서도 사용하기 쉽게 SDK를 제공합니다.

오늘은 가볍게 SQS 사용에 필요한 간단한 동작 원리 및 설정에 대해서 알아보는 시간을 가져보도록 하겠습니다.

SQS(Simple Queue Service)란

SQS는 AWS(Amazon Web Service)에서 제공하는 Simple Queue Service의 약자로 분산 큐(Distributed Queues) Saas 서비스입니다. SQS의 요소에는 3가지가 있습니다. 사용하는 서버와 분산 큐(SQS)와 주고받는 메시지입니댜. 아래 이미지를 보시겠습니다. 기본적으로 SQS와 사용자간에 주고받는 메시지의 흐름을 나타낸 것입니다.

sqs-basic-architecture, 출처 : https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-basic-architecture.html

  1. 메시지를 생산하는 서버(위의 Component 1)에서 메시지를 SQS에 전송합니다. 그리고 이 메시지는 SQS에 동일한 값이 여러곳에 중복으로 저장됩니다.
  2. 메시지를 소비하는 서버(위의 Component 2)에서 메시지를 처리할 준비가되면 큐에서 메시지를 가져옵니다. 메시지가 한 서버에 의해서 처리될 동안 SQS에서는 메시지가 없어지지않고 그대로 남아있습니다. 한 서버에서 처리 중일 때 다른 서버에서 중복으로 읽지 못하게 하기 위해 visibility timeout을 사용합니다. 해당 설정은 어떤 것인지 아래에서 자세히 보겠습니다.
  3. 메시지를 소비하던 서버에서 sqs에 delete 메시지를 전달합니다. 이렇게 하면 SQS에 있는 중복 분산되어있던 해당 메시지가 삭제되게 됩니다.

Queue 관리하기

위에서는 시스템적인 관점에서 SQS에 대해서 알아보았습니다. 이번에는 메시지의 관점에서 한번 알아보도록 하겠습니다. 메시지는 아래와 같은 라이프사이클을 가지게 됩니다. 각 단계에 대해서 이미지 아래에 자세히 설명하도록 하겠습니다.

sqs_visibility_timeout, 출처 : https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-visibility-timeout.html

  1. 프로듀싱서버에서 SQS로 메시지를 전달하는 단계입니다.
    • Delivery Delay를 설정할 수 있습니다.
  2. 메시지가 SQS에 머무르는 단계입니다.
    • 메시지가 머무르는 시간(Retention)을 설정할 수 있습니다.
    • 최대 메시지의 사이즈를 정할 수 있습니다.
  3. 컨슈밍서버에서 SQS의 서버를 가져가는 단계입니다.
    • Visibility Timeout을 설정할 수 있습니다.
    • 컨슈밍서버에서 Polling Message Count를 정할 수 있습니다.
    • Long Time Polling과 Short Time Polling을 정할 수 있습니다.

SQS에서 사용하는 용어에 대해서 한번 정리하고 가겠습니다.

  • Delivery Delay라는 것은 프로듀싱서버에서 SQS로 메시지를 전달했을 때 Queue에 바로 넣을지 아니면 조금 시간을 두고 넣을지를 정하는 설정입니다. sync 등의 이유로 Queue의 메시지를 바로 컨슘하면 안될 때 사용할 수 있습니다.
  • Retention이라는 것은 SQS에 메시지가 머무를 수 있는 최대시간을 말합니다. 해당 시간이 지나면 메시지는 삭제됩니다.
  • Visibility Timeout이란 중복 처리를 막기위해 컨슈밍서버 한대가 컨슘했을 때 다른 서버들은 컨슘할 수 없게하는 대기시간을 말합니다. 다른 서버에서 컨슘하기 위해서는 Visibility Timeout을 기다릴 수 밖에 없습니다.
  • Polling Message Count란 컨슈밍서버에서 한번의 요청으로 SQS에 있는 데이터를 가져올 수 있는 숫자입니다.
  • Long Time Polling과 Short Time Polling은 컨슈밍서버에서 컨슘했을 때 만약 queue가 비어있다면 얼마나 대기할 건지에 대한 부분입니다. Short Time Polling은 Receive message wait time이 0초이며 나머지는 Long Time Polling으로 정의하고 있습니다.

Polling Message Count를 제외하고는 SQS Console을 통하여 각각 설정할 수 있습니다. 설정을 저장하게 되면 다음으로 오는 메시지부터 변경된 설정으로 적용되게됩니다. 아래는 SQS Console에 나와있는 설정화면입니다. 대부분 설정 내용과 설정 이름이 동일합니다.

sqs_console, configuration

FIFO Queue

AWS에서 제공하는 SQS 타입에는 2가지가 있습니다. standard와 fifo입니다. standard는 속도가 빠른 대신 중복 처리 및 선입선출에 대한 부분에 대해서 단점을 가지고 있습니다. 그래서 AWS에서는 선입선출을 반드시 지킬 수 있고 중복제거도 제공해주는 타입의 FIFO라는 타입의 SQS를 제공하고있습니다. 단점으로는 SQS 기준으로 요청을 300 TPS 정도밖에 처리할 수 없다고 합니다. 본인이 구축하고 있는 시스템의 구성에 맞춰 구성할 필요가 있을것 같습니다.

sqs_console, create queue

과금 방법

SQS의 과금은 2가지를 합산하여 계산됩니다.

  • 요청 1백만 건당 비용
    • 요청이라함은 enqueue와 dequeue를 모두 포함합니다.
  • 네트워크 비용
    • 기본적으로 AWS의 모든 서비스는 네트워크 비용이 별도로 청구됩니다.

마무리

오늘은 이렇게 SQS 서비스에 대해서 알아보는 시간을 가져보았습니다. 회사일로 인해 처음 SQS를 접하게 됬습니다. 그저 딜리버리만 하는줄 알았던 서비스였는데 자세히 들여다보니 다양하게 필요한 기능들을 잘 녹여낸 서비스라고 생각되어집니다.

감사합니다.

참조

sqs_developer_guide

sqs_pricing

 

댓글