안녕하세요~~ 여러분~! 공부하는개발자 입니다 ㅎㅎㅎ
이번 시간에는 바로바로~ 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가 무엇인지 알았으니 바로 한 번 써보도록 하겠습니다. 역시 쓰면서 알아가는 맛이 있죠 히히
[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
[AWS SQS 들이파기] AWS SQS로 메시지 보내기 (Java + Gradle + Spring)
SQS로 메시지를 보내는데 몇 가지 방법이 있을 것 같지만, 저는 Java Spring (boot) 개발자이니 해당 스택으로 SQS에 메시지를 쏴보겠습니다 ㅎㅎ 아하 생각해보니 새 PJ을 만들어야 하네요..! 모든 코드
lannstark.tistory.com
AWS SQS의 메시지 받기 (Java + Gradle + Spring)
SQS로 메시지가 잘 전송되는 것을 확인했습니다. 이제 받는 것도 확인해보겠습니다!!
[AWS SQS 들이파기] SQS에서 메시지 받기 I (Java + Gradle + Spring)
모든 코드는 github에 올라가 있습니다. 이제 메시지 보내는 것은 성공했으니 보낸 메시지를 받아보려고 합니다. 그 전에 MessageConverter 에 대해서 간단히 알아 봅시다 ㅎㅎ QueueMessagingTemplate 은 단��
lannstark.tistory.com
[AWS SQS 들이파기] SQS에서 메시지 받기 II (Java + Gradle + Spring)
모든 코드는 github에 올라가 있습니다. SQS로부터 메시지를 받는 두 번째 방법은~~ 바로바로 Annotation을 이용하는 방법입니다. 아래의 PersonListener 코드를 봐보죠! @Slf4j @Component // Bean 등록을 꼭 해..
lannstark.tistory.com
DLQ 설정
[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) : 메시지가 있으면 바로 가져오고, 메시지가 없으면 메시지가 올 때까지 기다린다. 메시지가 계속 오지 않으면 긴 폴링 제한 시간까지 기다린다.
'개발 공부 기록하기 > 03. AWS & Infra' 카테고리의 다른 글
ulimit에 대해 알아보자 (0) | 2020.10.05 |
---|---|
패커 (Packer) 시작하기 (4) | 2020.10.01 |
[AWS SQS 들이파기] DLQ(Dead-Letter Queue) 설정하기 (0) | 2020.09.23 |
[AWS SQS 들이파기] SQS에서 메시지 받기 II (Java + Gradle + Spring) (1) | 2020.09.23 |
[AWS SQS 들이파기] SQS에서 메시지 받기 I (Java + Gradle + Spring) (0) | 2020.09.23 |