개발 공부 기록하기/03. AWS & Infra

AWS SQS 들이파기

lannstark 2020. 9. 23. 22:41

안녕하세요~~ 여러분~! 공부하는개발자 입니다 ㅎㅎㅎ

이번 시간에는 바로바로~ SQS에 대해서 알아보려고 합니다.

SQS란 무엇인지, Java + Spring으로 어떻게 사용할 수 있는지,
사용시 주의할 점 등은 무엇인지 간단바리(들이파기라 해놓고 간단바리..?)로 살펴보겠습니다.

바로 시작해보죠!

AWS SQS란?

  • SQS는 Simple Queue Service의 약자입니다.
  • 애플리케이션 간의 메시지를 전달하기 위한 아주 '간단한' Queue 라고 생각하면 됩니다.
  • 홈페이지 설명에 따르면, 지속성이 우수하고 사용 가능한 보안 호스팅 대기열을 제공하며, dead-letter queue, 표준대기열, FIFO 대기열을 지원하고 있습니다.

SQS와 MQ의 차이점

RabbitMQ를 들어본 적이 있는 사람이라면, 곧바로 이런 질문이 떠오를 것입니다.

아 메시지 큐 (써본적이 있든 없든) 알지알지... 애플리케이션 간에 비동기 상호작용을 할 때 많이 쓰잖아!! 그런데 그러면 SQS와 일반적인 MQ 차이는 무엇이지?

한 스택오버플로우에 따르면, 둘의 차이는 다음과 같습니다.

  • SQS는 이름그대로 '간단한' 큐 서비스이다. 다른 MQ에 존재하는 message routing, fan-out, distribution lists를 지원하지 않는다. 메시지 생산자가 만들어낸 메시지를 메시지 소비자가 가져갈 수 있게 해주는 것이 전부이다.
  • Amazon MQ는 AMQP나 MQTT처럼 표준화된 여러 broadcast 프로토콜을 완벽히 지원하는 fully managed 서비스이다. 복잡한 요구사항을 구현할 때 유영하며, AWS 외부에 있는 메시지 브로커를 AWS로 마이그레이션 할 때 유용하다.

제가 이해한 것을 토대로, SQS와 MQ의 차이를 설명하면 이렇습니다. 둘 모두 메시지 큐 범주에 속하지만 SQS는 닭잡는칼, MQ는 소잡는칼 ㅎㅎㅎㅎ 디테일한 차이가 있을 수 있겠지만, 그것은 SQS, MQ 모두를 빠삭하게 공부하고 사용해본 후에 다시 한 번 정리해보겠습니다..

AWS SQS 만들어보기

자 그러면 SQS가 무엇인지 알았으니 바로 한 번 써보도록 하겠습니다. 역시 쓰면서 알아가는 맛이 있죠 히히

lannstark.tistory.com/83

 

[AWS SQS 들이파기] SQS 만들어보기

1. AWS console에 들어가 SQS를 검색해 들어갑니다. 2. 대기열 생성을 눌러줍니다. Amazon SQS > 대기열이라고 있는데, Queue를 대기열로 번역했네요. 뭔가 어색합니다 ㅋㅋㅋㅋ 3. 대기열 세부정보 설정 가

lannstark.tistory.com

AWS SQS로 메시지 쏘기 (Java + Gradle + Spring)

오호,, 이제 생성은 되었으니 Application을 이용해 해당 Queue로 메시지를 쏘고 받고 해보겠습니다.

[SQS 들이파기]에서 사용한 버전입니다.

  • JDK 11
  • Spring Boot 2.2.3.RELEASE
  • Spring MVC
  • Spring Cloud for AWS 2.2.3.RELEASE
  • gradle 6.6.1

lannstark.tistory.com/84

 

[AWS SQS 들이파기] AWS SQS로 메시지 보내기 (Java + Gradle + Spring)

SQS로 메시지를 보내는데 몇 가지 방법이 있을 것 같지만, 저는 Java Spring (boot) 개발자이니 해당 스택으로 SQS에 메시지를 쏴보겠습니다 ㅎㅎ 아하 생각해보니 새 PJ을 만들어야 하네요..! 모든 코드

lannstark.tistory.com

 

AWS SQS의 메시지 받기 (Java + Gradle + Spring)

SQS로 메시지가 잘 전송되는 것을 확인했습니다. 이제 받는 것도 확인해보겠습니다!!

lannstark.tistory.com/85

 

[AWS SQS 들이파기] SQS에서 메시지 받기 I (Java + Gradle + Spring)

모든 코드는 github에 올라가 있습니다. 이제 메시지 보내는 것은 성공했으니 보낸 메시지를 받아보려고 합니다. 그 전에 MessageConverter 에 대해서 간단히 알아 봅시다 ㅎㅎ QueueMessagingTemplate 은 단��

lannstark.tistory.com

lannstark.tistory.com/86

 

[AWS SQS 들이파기] SQS에서 메시지 받기 II (Java + Gradle + Spring)

모든 코드는 github에 올라가 있습니다. SQS로부터 메시지를 받는 두 번째 방법은~~ 바로바로 Annotation을 이용하는 방법입니다. 아래의 PersonListener 코드를 봐보죠! @Slf4j @Component // Bean 등록을 꼭 해..

lannstark.tistory.com

DLQ 설정

lannstark.tistory.com/87

 

[AWS SQS 들이파기] DLQ(Dead-Letter Queue) 설정하기

이제 DLQ를 설정하고 테스트를 해보겠습니다. 우선 삭제된 Message가 들어갈 Queue를 새로 하나 만들어 주어야 합니다. sqs-study-dlq 라는 이름을 가진 Standard Queue를 빠르게 만들었습니다 ㅎㅎㅎ (한 번

lannstark.tistory.com

SQS 총 정리

지금까지 다루어 본 것을 정리하자면, SQS는 애플리케이션 간의 비동기 처리를 할 수 있게 도와주는 Queue로 표준형과 FIFO 형이 있습니다. 또한 DLQ라는 것이 존재했으며 내부적으로 암호화를 할 수도 있습니다.

스프링에서 SQS를 사용하려면 Amazon SDK를 바로 쓸 수도 있고 아니면 wrapping된 spring-cloud-aws를 사용할 수도 있습니다. spring-cloud-aws에서 SQS로 메시지를 쏘고 받는 법 모두 살펴봤으며, @SqsListner를 사용해 메시지를 받을때 생각해야 할 멀티스레딩 관련 몇 가지도 확인해 보았습니다.

아 SQS의 요금은 이렇다고 합니다!

1백만건의 요청은 무료라고 하는데... SQS를 1개 쓰고 있고 polling duration 30초로 사용하고 있고 Consumer 서버가 3대라면 음... (86400 * 30 / 30) * 3 이니까 오호 30만건 정도... Message 생성요청이나 DELETE 요청을 count 하지 않았지만, 작은 규모에서는 거의 공짜로 쓸 수 있지 않을까 싶습니다 ㅎㅎ

이상 끝! 👏🏻

(참고) 간단 용어 정리

출처 : [아마존 웹 서비스를 다루는 기술]

  • 메시지 : SQS의 기본 데이터 단위
  • 큐 : 메시지를 담는 공간
    • region별로 생성해야 하며 HTTP 프로토콜을 이용하여 다른 region끼리 메시지를 주고 받을 수 있다. Queue의 이름은 모든 region에서 유일해야 한다.
  • 보기 제한 시간(Visibility Timeout) : 메시지를 받은 뒤 특정 시간 동안 동일한 메시지를 다른 곳에서 꺼내 볼 수 없도록 하는 제한 시간
  • 지연 전송 : 특정 시간 동안 메시지를 받지 못하게 하는 기능
  • 짧은 폴링(short polling) : 메시지 받기 요청을 하면 결과를 바로 받는다. 메시지가 있으면 메시지를 가져오고 없으면 그냥 빠져 나온다
  • 긴 폴링(long polling) : 메시지가 있으면 바로 가져오고, 메시지가 없으면 메시지가 올 때까지 기다린다. 메시지가 계속 오지 않으면 긴 폴링 제한 시간까지 기다린다.