SQS ( Simple Queue Service )
SQS는 Simple Queue Service로 AWS에서 제공하는 애플리케이션 간 메시지를 주고받을 수 있는 서비스로, 즉 간소화된 버전의 메시지 큐 서비스라고 말할 수 있습니다. SQS에서 메시지는 텍스트 형태의 기본 데이터인데 메시지마다 고유의 아이디가 부여되어있어 이로 SDK에서 핸들링하고는 합니다.
아래에 나열한 AWS Docs에서 설명하는 SQS의 장점들은 메시지큐와 상당히 유사한 모습을 볼 수 있습니다.
- 보안 – Amazon SQS 대기열에서 문자를 받을 수 있는 사용자를 제어한다
SSE로 AWS KMS ( Key Management Service ) 에서 관리되는 키를 사용하여 대기열의 메시지를 보호할 수 있다. - 내구성 – 메시지의 안전을 위해 SQS는 메시지를 여러 서버에 분산 저장한다. 표준 대기열과 FIFO 대기열이 있는데, 표준 대기열은 한번 이상의 메시지 처리를 할 수 있고, FIFO대기열은 정확히 한 번 메시지 처리를 지원한다
- 가용성 - 중복 인프라를 이용하여 메시지에 대한 동시 액세스와 메시지 생성 및 사용을 위한 고가용성을 제공한다
- 확장성 - 버퍼링된 요청을 독립적으로 처리할 수 있고, 프로비저닝 없이 확장할 수 있다
- 안정성 - 안정적으로 여러 프로세스에서 동시에 메시지를 보내고 여러 소비자가 동시에 메시지를 받을 수 있다
- 커스터마이즈 - 큐를 사용자 입맛대로 씹고 뜯고 맛보고 즐길 수 있다 ex) you can set default delay on a queue
언뜻 메시지큐와 비슷하지만, 많은 프로토콜로 다양한 기능을 지원하는 메시지 큐와 달리 SQS는 메시지를 주고받기만 하는 역할입니다.
풀링 ( polling )
SQS에서는 풀링으로 메시지를 수신 ( 메시지 받기 ) 하는데, 풀링은 긴 풀링 ( long poling )과 짧은 풀링 ( short poling )이 있습니다. 편의상 롱 풀링과 쇼트 풀링으로 부르도록 하겠습니다. 쇼트 풀링은 현재 큐에 있는 메시지에서 바로 수신하는 데에 반해, 롱 풀링은 메시지가 있으면 바로 가져오고, 그게 아니라면 지정해둔 시간까지 기다립니다. 이렇게 논리적으로 나누지만 실제로 사용할 때 WaitTimeSeconds라는 값을 어떻게 설정하느냐에 따라 나뉩니다.
처리 실패 큐 ( Dead Letter Queue )
보통 메시지를 처리하고 나면, 그 메시지를 삭제할 것 입니다. 하지만 처리되었어야 함에도 다양한 발생 가능한 문제로 인해 처리되지 못한 메시지는 처리 실패 큐로 이동합니다. 그 횟수는 maxReceiveCount횟수로 지정할 수 있습니다. 이는 사용되지 않는 메시지의 처리를 하는 데 유용하며 이러한 메시지에 대한 처리를 할 수 있습니다 예를 들어 처리 실패 큐에 있는 메시지들에 대한 알람을 구성할 수 있습니다.