[AWS] SQS
AWS SQS란?
SQS는 Simple Queue Service의 약자입니다.
애플리케이션 간의 메시지를 전달하기 위한 아주 '간단한' Queue 라고 생각하면 됩니다.
홈페이지 설명에 따르면, 지속성이 우수하고 사용 가능한 보안 호스팅 대기열을 제공하며, dead-letter queue, 표준 대기열, FIFO 대기열을 지원하고 있습니다.
SQS와 MQ의 차이점
SQS는 이름 그대로 '간단한' 큐 서비스입니다. 다른 MQ에 존재하는 message routing, fan-out, distribution lists를 지원하지 않습니다. 메시지 생산자가 만들어낸 메시지를 메시지 소비자가 가져갈 수 있게 해주는 것이 전부입니다.
Amazon MQ는 AMQ나 MQTT처럼 표준화된 여러 broadcast 프토토콜을 완벽히 지원하는 fully managed 서비스입니다.
복잡한 요구사항을 구현할 때 유용하며, AWS 외부에 있는 메시지 브로커를 AWS 마이그레이션 할 때 유용합니다.
SQS 총 정리
SQS는 애플리케이션 간의 비동기 처리를 할 수 있게 도와주는 Queue로 표준형과 FIFO형이 있습니다.
또한 DLQ는 내부적으로 암호화를 할 수도 있습니다.
스프링에서 SQS를 사용하려면 Amazon SDK를 바로 쓸 수도 있고 아니면 wrapping된 spring-cloud-aws를 사용할 수도 있습니다.
spring-cloud-aws에서 SQS로 메시지를 쏘고 받는 법 모두 살펴봤으며, @SqsListner를 사용해 메세지를 받을 때 생각해야할 멀티스레딩 관련 몇 가지도 확인해봤습니다.
간단 용어 정리
- 메시지: SQS의 기본 데이터 단위
- 큐: 메시지를 담는 공간
region별로 생성해야 하며 HTTP 프로토콜을 이용하여 다른 region끼리 메시지를 주고 받을 수 있다.
Queue의 이름은 모든 region에서 유일해야 한다. - 보기 제한 시간(Visibility Timeout): 메시지를 받은 뒤 특정 시간 동안 동일한 메시지를 다른 곳에서 꺼내 볼 수 없도록 하는 제한 시간
- 지연 전송: 특정 시간 동안 메시지를 받지 못하게 하는 기능
- 짧은 폴링(short polling): 메시지 받기 요청을 하면 결과를 바로 받는다. 메시지가 있으면 메시지를 가져오고 없으면 그냥 빠져 나온다.
- 긴 폴링(long polling): 메시지가 있으면 바로 가져오고, 메시지가 없으면 메세지가 올 때까지 기다린다. 메시지가 계속 오지 않으면 긴 폴링 제한 시간까지 기다린다.
참고: https://lannstark.tistory.com/88?category=840827