이번에는 SQS 개념 및 기능에 대해 알아보겠습니다.
SQS(Simple Queue Service)란?
AWS의 SQS는 내구력 있고 가용성이 뛰어난 보안 호스팅 대기열을 제공하며 이를 통해 분산 소프트웨어 시스템과 구성 요소를 통합 및 분리할 수 있습니다.
- 서버들끼리 사용할 수 있는 메세지 큐를 제공하는 서비스
- 해야할 일을 나중에 처리하거나, 다른 시스템이 처리할 수 있도록 하기위한 비동기 메세징 서비스
- 시스템이 처리해야할 TO-DO List
- 애플리케이션 간 비동기 처리를 도와줌
사용자에게 결과를 빨리 보여줘야 하는 작업과 시간이 오래 걸리는 작업을 분리할 때,
중요한 작업과 중요하지 않은 작업을 분리할떄 SQS 큐를 유용하게 사용할 수 있다.
SQS의 주요 기능
- 내구성 :
메시지를 안전하게 저장하기 위해 여러 서버에 의존합니다. 또한 표준 대기열 및 FIFO 대기열은 최소 한번 및 정확히 한번 메시지 전달 시스템에서 작동합니다.
- 가용성 :
중복 인프라를 활용하여 고속 동시 메시징을 생성합니다. 이렇게 하면 프로덕션 및 소비 모두에 대해 메시지 가용성이 향상됩니다.
- 확장성 :
버퍼링된 모든 메시지 요청을 독립적으로 처리할 수 있으므로 높은 확장성을 제공합니다. 또한 갑작스러운 로드 스파이크에서 투명하게 확장할 수 있으며 사전 지침이 필요하지 않습니다.
- 안정성 :
처리 단계에서 메시지 잠금 매커니즘을 사용합니다. 이를 통해 여러 생산자가 다양한 소비자에게 동시에 메시지를 보낼 수 있습니다.
사용 사례
예를들어 Youtube를 AWS에서 구축한다고 해보자. Youtube는 대규모의 사용자가 전송하는 대용량의 데이터를 수신해서 처리해야 하는 서비스다. 이런 서비스는 여러개의 독립적인 시스템을 구축하고 각각의 시스템이 서로 협력하는 방식으로 구현하는 것이 보다 효율적이다. 예를들어 아래와 같은 시스템들이 있을 것이다.
- 사용자가 업로드한 동영상을 수신하는 시스템 - 수신자
- 업로드된 동영상을 전달 받아서 이를 인코딩하는 시스템 - 인코더
- 인코딩이 끝났음을 업로더에게 이메일로 발송하는 시스템 - 메일러
이러한 시스템들이 서로 협력하기 위해서는 서로의 진행상황을 공유해야 할 필요가 있다. 우선 수신자가 SQS 서비스에 업로드된 동영상을 추가한다. 인코더는 정기적으로 SQS를 확인한다. SQS에 추가된 동영상 파일이 발견되면 인코딩을 시작한다. 인코딩이 끝나면 SQS에 인코딩이 끝난 동영상을 추가한다. 메일러는 SQS에 인코딩이 끝난 동영상이 존재하는지 확인한다. 동영상이 발견되면 해당 동영상의 업로더에게 이메일을 발송한다.
SQS에 사용되는 단어
메세지
- SQS의 기본 데이터 단위
- 메시지는 XML, JSON과 같은 텍스트 형태이며 최대 64KB까지 보낼 수 있다
- 유니코드 문자를 사용할 수 있다
- 보관 기간을 초 단위로 설정할 수 있다. 기본 보관 기간은 345,600초(4일)이며 60초(1분)부터 1,209,600(14일)까지 설정할 수 있다. 그리고 메세지 보관 기간이 지나면 자동으로 삭제된다
- 메시지마다 고유한 ID가 부여된다
- 3~4KB 메세지라도 64KB로 책정된다. 따라서 용량이 작은 메세지를 자주 처리하는 것보다 메세지를 모아서 배치 API로 처리하면 요금을 절약할 수 있다.
큐(Queue)
- 메세지를 담는 공간
- 리전 별로 생성해야 하며, HTTP 프로토콜을 이용하여 다른 리전끼리도 메세지를 주고 받을 수 있다. 그러므로 큐의 이름은 모든 리전에서 융일해야 한다.
- 담을 수 있는 메세지의 개수는 무제한
- 30일동안 아무 요청이 발생하지 않으면 AWS가 큐를 삭제할 수 있다
- FIFO를 보장하지 않는다
- 다양한 접근 권한과 정책을 설정할 수 있으며, AWS 계정 번호를 이용하여 다른 AWS 계정과도 큐를 공유할 수 있다
- 같은 리전 안에서는 데이터 전송이 무료이며, 다른 리전에 있는 큐나 EC2 인스턴스와 메세지를 주고 받으면 데이터 요금이 부과된다
- 큐 생성 개수는 무제한
배치 API
- 배치 API 한번에 메세지를 최대 10개 혹은 최대 256KB까지 동시에 처리할 수 있다
- 여러 메세지를 합쳐서 64KB 이하일 때 배치 API를 이용하면 요청 1개로 청구됨
SQS 함수 종류
- CreateQueue : 큐 생성
- ListQueues : 큐 목록 출력
- DeleteQueue : 큐 삭제
- SendMessage : 큐에 메세지 추가
- SendMessageBatch : 큐에 여러 메세지 추가
- ReceiveMessage : 큐에서 메세지를 꺼내서 보기
- ChangeMessageVisibility : 메세지의 보기 제한 시간 변경
- ChangeMessageVisibilityBatch : 여러 메세지의 보기 제한 시간 변경
- DeleteMessage : 큐에서 메세지 삭제
- DeleteMesasgeBatch : 큐에서 여러 메세지 삭제
- SetQueueAttributes : 큐 설정 변경 (지연 전송 시간, 최대 메세지 크기, 메세지 보관 기간, 접근 정책, 짧은 폴링/긴 폴링 시간, 처리 실패 큐)
- GetQueueAttributes : 큐 설정 확인 (메세지 개수, 큐 생성 시간, 최종 큐 변경 시간, 큐 ARN, 지연 전송 시간, 최대 메세지 크기, 메세지 보관 기간, 접근 정책, 짧은 폴링/긴 폴링 시간, 처리 실패 큐)
- GetQueueUrl : 큐 엔드포인트 URL 확인
- AddPermission : 다른 AWS 계정에 대한 접근 권한 설정
- RemovePermission : 다른 AWS 계정에 대한 접근 권한 삭제
참고 :
https://velog.io/@holicme7/AWS-SQS-%EB%9E%80
'AWS' 카테고리의 다른 글
[AWS] SQS 사용하기 (0) | 2023.02.14 |
---|---|
AWS 결제 대시보드 확인하기 (0) | 2023.02.01 |
[AWS] Elastic Beanstalk에 https 적용하기 (2) (2) | 2023.01.30 |
[AWS] Elastic Beanstalk에 https 적용하기 (1) (0) | 2023.01.29 |
[AWS] Mac EC2 ssh 접속 하기 (0) | 2023.01.26 |