🔠 AWS에서 제일 오래된 완전 관리형 서비스(사용자가 Infran나 system을 직점 관리 할 필요가 없음) 고 메시지 대기 서비스이며 분산 메시징 시스템을 간편하게 구축하고 운영할 수 있다. 매월 처음 100만 건의 요청은 무료이며 Amazon S3 및 KMS와 상호 작용 시 S3스토리지, KMS에 대해서 요금 발생이 된다.
SQS를 사용하는 이유는?
- 관리의 편의성 (완전 관리형 서비스)
- 확장성
SQS는 필요에 따라 자동으로 확장되는 기능을 제공합니다. 메시지 수신 및 송신량이 증가하면 SQS는 필요한 수의 메시지를 처리할 수 있도록 자동으로 스케일링됩니다. - 내구성과 안정성
SQS는 메시지를 안전하게 저장하고 전송하는 기능을 제공합니다. 메시지는 여러 가용 영역에 복제되어 저장되며, 데이터 손실을 방지하기 위해 내구성이 보장됩니다. - 비동기 통신
SQS를 사용하면 시스템 구성 요소 간의 느슨한 결합(소프트웨어 컴포넌트 또는 시스템 간의 의존성을 최소화하고 서로 간에 독립적으로 동작할 수 있는 설계 원칙)을 유지할 수 있습니다. 프로듀서와 컨슈머가 메시지를 비동기적으로 교환하여 시스템의 확장성과 유연성을 향상시킬 수 있습니다.
💡 SQS를 사용하지 않는다면? On-premise(온프레미스) 환경에서 메시지 큐 시스템을 구축하기 위해 사용되는 도구 중 하나로 Apache Kafka를 사용했을 것이며 Kafka는 분산 스트리밍 플랫폼으로, 대규모 실시간 데이터 피드 처리에 주로 사용됩니다. On-premise 환경에서는 Kafka와 같은 오픈 소스 도구를 사용하여 메시지 큐 시스템을 구성하고 운영해야 했습니다. 그러나 이에는 인프라 구성, 운영, 확장 등의 추가적인 관리 작업이 필요했습니다. AWS의 SQS는 이러한 부담을 줄이고 메시지 큐 시스템을 더 쉽게 구축하고 관리할 수 있는 클라우드 기반의 완전히 관리형 서비스로 제공됩니다.
Queue와 Message
💡 Queue란? 메시지를 저장하는 공간 또는 컨테이너입니다. 큐는 메시지 대기열로서 동작하며, 프로듀서(메시지 생성자)가 보낸 메시지가 대기하고 있는 장소입니다. 💡 message란? 프로듀서(메시지 생성자)가 큐(Queue)에 보낸 데이터 패킷입니다. 메시지는 특정 작업, 이벤트 또는 작업 요청을 나타내며, SQS를 통해 프로듀서(메시지 생산자)와 컨슈머(메시지 소비자) 간에 비동기적으로 교환됩니다. 메시지는 일반적으로 텍스트 또는 이진 데이터로 구성될 수 있으며, 최대 256KB까지의 크기를 가질 수 있습니다. 메시지에는 프로듀서가 전송하는 정보를 포함하여, 컨슈머가 수행해야 할 작업 또는 처리해야 할 내용을 설명하는 데이터가 포함될 수 있습니다. 즉, 메시지는 큐에 저장되는 데이터 자체를 의미하며, 큐는 메시지를 저장하고 관리하는 구조
SQS 대기열 유형
📍 AWS SQS에서는 표준대기열과 FIFO대기열 2가지 유형의 대기열을 지원
표준 대기열(Standard)
- 무제한 처리량
- 최소 한번 전송
(경우에 따라 사본이 2개이상 전달) - 우선순위에 따른 전송 순서
(2개 이상의 메시지 사본이 순서가 맞지 않게 전달될 수 있음)
FIFO(First In Fisrt Out)
- 빠른 처리량(일괄 처리)
- 정확하게 한번 전송(중복 없음)
- 선입선출로 인한 순서 유지
💡 무슨 유형을 선택을 해야될까?
처리량이 많고 순서는 맞지 않아도 되며 적어도 한번은 전송을 해야하는 상황이면 표준대기열을 빠르게 처리하고 정확한 순서와 중복없이 한번은 전송을 해야하면 FIFO 대기열을 선택하면 되는데 의미가 와닿지 않아서 온라인 주문 서비스를 예로 들어봤다.
- 주문 요청(표준 대기열)
- 주문 요청은 순서도 중요하지만 1분이라는 시간 안에서의 순서는 크게 중요하지는 않고 주문을 빠짐없어 받는것이 중요하다.
- 적어도 한번은 전송을 하여 메세지를 보장 해야 하므로 표준 대기열로 하는게 적합하다.
- 주문 처리(FIFO Queue):
- 주문을 처리할때 2번 이상 처리를 하게 되면 서비스 사업자는 손해를 받게 된다. 또한 주문을 먼저 받은 순으로 처리를 해야하는 순서유지가 필요
- 정확하게 주문을 한번만 처리하고 순서가 유지되어야 하므로 FIFO가 적합하다.
SQS 대기열 생성 및 생성 옵션
Type(유형)
- 표준대기열
- FIFO
Name(이름)
- 대소문자를 구분, 최대 길이는 80자
- 영숫자, 하이픈(-) 및 밑줄(_)을 사용
표시 제한 시간(Visibility Timeout)
🔠 Default : 30 초 | Scope : 0 ~ 12시간 메세지 consumer가 queue에서 메시지를 검색 한 후 다른 consumer에서 메시지에 access할 수 없는 시간

- 소비자가 표시 제한 시간이 만료되기 전까지 메시지를 처리 및 삭제하지 못하면 메시지가 다른 소비자에게 표시
(메시지를 한 번만 수신해야 할 경우, 소비자는 표시 제한 시간 내에 메시지를 삭제) - 일반적으로 표시 제한 시간 초과는 애플리케이션이 대기열에서 메시지를 처리하고 삭제하는 데 걸리는 최대 시간으로 설정
- 여러 consumer가 동일한 메시지를 처리하는 것을 방지
- Consumer 및 네트워크 장애가 발생해도 다른 consumer 에서 다시 처리
메세지 보존 기간
🔠 Default : 4일 | Scope : 1분 ~ 14일
전송 지연
🔠 Default : 0초 | Scope : 0 ~ 15분
최대 메시지 크기
🔠 Default : 256KB | Scope : 1 ~ 256일
메시지 수신 대기 시간(Polling Time)
🔠 Default : 0초 | Scope : 0 ~ 20초
Polling

- Polling은 SQS의 기본적인 메시지 수신 방법이며, 애플리케이션은 주기적으로 SQS를 확인하여 메시지를 처리합니다.
- 애플리케이션이 SQS 대기열에서 메시지를 가져오기 위해 주기적으로 조사하는 방법을 의미
- Polling 주기를 더 길게 설정하여 application의 네트워크 트래픽, CPU부하를 줄이고 응답 시간을 개선할 수 있습니다.
- 메시지 수신을 위해 빈번한 요청에 따른 비용 증가를 방지
암호화
🔠 서버 측 암호화(SSE)를 활성화하면 Amazon SQS는 이 대기열로 전송되는 모든 메시지를 암호화합니다. 기본적으로 SQS 데이터는 암호화가 되어있으며 이것을 해제 할경우 평문으로 전송된다. Encrypyion Key type : Amazon SQS 키(SSE-SQS), AWS KMS(SSE-KMS)
SSE(Server-Side Encrypion)는 메시지 본문은 암호화 하지만 다음 필드와 메세지는 암호화 하지 않습니다.
- 대기열 메타데이터(대기열 이름 및 속성)
- 메시지 메타데이터(메시지 ID, 타임스탬프 및 속성)
- 대기열별 지표
- 백로깅된 메시지
(SQS 대기열에 대기 중인 메시지를 처리할 수 있는 애플리케이션이나 작업자가 없을 경우, SQS는 백로깅을 사용하여 해당 메시지를 보관)
액세스 정책
🔠 대기열에 액세스할 수 있는 계정 및 사용자와 허용되는 작업을 정의하며 기본적으로 대기열 소유자는 전부 허용
리드라이브 허용 정책
🔠 기본적으로 리드라이브 허용 정책은 비활성화되어 있으며 배달 못한 편지 대기열을 배달 못한 편지 대기열은 동일한 AWS 계정이 소유해야 하며 배달 못한 편지 대기열과 동일한 리전에 있어야 합니다.
배달 못한 편지 대기열(DLQ, Dead Letter Queue)
🔠 성공적으로 처리 (소비) 할 수 없는 메시지(최대 수신수 : 1 ~ 1,000) 사용되지 않은 메시지를 분리하여 처리가 실패한 이유를 확인할 수 있으므로 애플리케이션 또는 메시징 시스템을 디버깅하는 데 유용합니다. ‼FIFO 대기열의 배달 못한 편지 대기열 역시 FIFO 대기열이어야 합니다. 이와 마찬가지로 표준 대기열의 배달 못한 편지 대기열 역시 표준 대기열이어야 합니다.
