Amazon SQS(Simple Queue Service)
SQS란?
- SQS는 AWS에서 오래된 서비스로, 애플리케이션 간 통신을 비동기로 처리함.
- 애플리케이션 간 느슨한 결합을 돕는 큐 기반 서비스임.

SQS의 주요 특징
- 완전 관리형 서비스로 무제한 처리량 제공.
- 메시지 크기: 최대 256KB까지 지원함.
- 메시지 보존 기간: 기본 4일, 최대 14일까지 설정 가능.
- 최소 1회 전달 보장, 중복 메시지가 발생할 수 있음.
- 메시지 순서 보장되지 않음 (Best-effort ordering).
SQS 메시지 생성
- SendMessage API로 메시지 전송.
- 메시지는 소비자가 삭제할 때까지 큐에 저장됨.
- 예: 주문 정보를 큐에 전송 (주문 ID, 고객 ID 등).
SQS 메시지 소비
- 소비자는 큐에서 최대 10개의 메시지를 폴링해서 가져옴.
- 메시지 처리 후 DeleteMessage API로 삭제해야 함.
- 예: RDS에 데이터를 저장하는 작업.


SQS 메시지 가시성 타임아웃
- 메시지가 소비자에게 전달된 후 일정 시간 동안 다른 소비자에게 보이지 않게 설정 가능.
- 기본 값: 30초 (최대 12시간 설정 가능).
- 메시지 처리 시간이 초과되면 다시 가시화되어 중복 처리 가능성이 있음.
- A consumer could call the ChangeMessageVisibility API to get more time

Long Polling
- When a consumer requests messages from the queue, it can optionally “wait” for messages to arrive if there are none in the queue
- LongPolling decreases the number of API calls made to SQS while increasing the efficiency and reducing latency of your application

Amazon SQS – FIFO Queue
- FIFO = First In First Out (ordering of messages in the queue)
- Exactly-once send capability
SQS 보안
- HTTPS API로 전송 중 암호화 제공.
- KMS(Key Management Service)로 데이터 저장 시 암호화 지원.
- IAM 정책과 큐 액세스 정책으로 서비스 접근 제어 가능.
Amazon SNS(Simple Notification Service)
SNS란?

- SNS는 Pub/Sub(발행/구독) 모델 기반 메시징 서비스임.
- 이벤트를 주제로 발행하면, 여러 구독자가 이를 수신함.
SNS의 주요 특징
-
하나의 주제(topic)로 다수의 구독자에게 메시지 전송 가능.
-
최대 1,250만 개 구독자, 10만 개의 주제를 지원함.
-
메시지 필터링 기능으로 특정 구독자에게만 메시지 전송 가능.

-
FIFO 주제 지원: 메시지 순서 보장과 중복 제거 가능.
SNS 메시지 전송 방식
- Topic Publish:
- 주제를 생성하고 구독자를 추가함.
- SDK로 주제에 메시지 게시.
- Direct Publish(모바일 앱):
SNS 보안
- HTTPS API로 전송 중 암호화 제공.
- KMS로 데이터 저장 시 암호화 가능.
- SNS 액세스 정책으로 크로스 계정 및 서비스 접근 제어 가능.
SNS + SQS Fan-Out

- 하나의 SNS 주제에서 여러 SQS 큐로 메시지 전송 가능.
- 데이터 지연 처리 및 재처리 지원.
- 교차 지역 메시지 전송도 가능.
SQS와 SNS 비교
| 특징 | SQS | SNS |
|---|
| 주요 사용 사례 | 비동기 메시지 큐 처리 | 이벤트 기반 알림 |
| 메시지 전달 방식 | 큐 기반(소비자가 폴링함) | 주제 기반(구독자에게 푸시됨) |
| 중복 메시지 | 최소 1회 전달(중복 발생 가능) | 동일 메시지가 모든 구독자에게 전달 |
| 메시지 순서 | 기본 순서 없음 (FIFO 선택 가능) | FIFO 주제로 순서 보장 가능 |
| 지속성 | 메시지가 큐에 저장됨 (최대 14일) | 메시지 전달 후 저장되지 않음 |
| 구독자 수 | 제한 없음 | 최대 1,250만 개 구독자 |
| 결합성 | 낮음 (완전 비동기 처리) | 높음 (동기 이벤트 알림) |
SQS와 SNS의 사용 사례
- SQS 사용 사례:
- 대규모 주문 처리 시스템.

- 비동기적 데이터 처리(예: 백엔드 작업).

- SNS 사용 사례:
- 실시간 알림 서비스(예: 이메일, SMS).
- Fan-Out 구조로 여러 서비스에 이벤트 전달.
Amazon Kinesis: 실시간 데이터 스트리밍 서비스
Amazon Kinesis는 실시간 데이터 수집, 처리, 분석을 쉽게 할 수 있는 AWS 서비스임.
주요 특징
- 실시간 데이터 처리:
- 애플리케이션 로그, 메트릭, 웹사이트 클릭스트림, IoT 원격 데이터 등 다양한 데이터 처리 가능.
- 데이터 스트리밍을 위한 다양한 구성요소 제공.
Kinesis 구성요소
-
Kinesis Data Streams
- 데이터 스트림을 캡처, 처리, 저장하는 서비스.
- 실시간 데이터 스트리밍 지원.
-
Kinesis Data Firehose
- 데이터 스트림을 AWS 데이터 스토어로 로드.
- S3, Redshift, Elasticsearch 등으로 자동 저장 가능.
-
Kinesis Data Analytics
- SQL 또는 Apache Flink를 사용하여 데이터 스트림 분석.
- 실시간 데이터 분석을 간단히 수행 가능.
-
Kinesis Video Streams
- 비디오 스트림을 캡처, 처리, 저장.
- 실시간 비디오 분석 및 처리에 적합.
사용 사례
- 실시간 애플리케이션 로그 분석.
- IoT 장치에서 전송된 데이터 수집.
- 웹사이트 클릭스트림 데이터 처리 및 분석.
Kinesis Data Streams

주요 특징
- 데이터 보존: 1일 ~ 365일까지 데이터 저장 가능.
- 재처리 가능: 데이터 재생(replay) 가능.
- 데이터 불변성: 삽입된 데이터는 삭제 불가능(Immutable).
- 순서 보장: 동일한 파티션 키(partition key)를 가진 데이터는 같은 샤드(shard)로 전송되어 순서 보장.
- 생산자:
- AWS SDK, Kinesis Producer Library(KPL), Kinesis Agent 사용.
- 소비자:
- 사용자 정의: Kinesis Client Library(KCL), AWS SDK.
- 관리형 서비스: AWS Lambda, Kinesis Data Firehose, Kinesis Data Analytics.
Kinesis Data Streams – 용량 모드
1. 프로비저닝 모드 (Provisioned Mode)
- 특징:
- 사용자가 직접 샤드 수를 설정하고 관리.
- API를 통해 수동 또는 자동으로 스케일링 가능.
- 처리량:
- 각 샤드당 1MB/s 입력 또는 1000개의 레코드/초.
- 각 샤드당 2MB/s 출력 (기본 또는 강화된 팬아웃 소비자).
- 과금:
2. 온디맨드 모드 (On-Demand Mode)
- 특징:
- 용량을 프로비저닝하거나 관리할 필요 없음.
- 최근 30일 동안 관찰된 최대 처리량에 따라 자동으로 확장.
- 처리량:
- 기본으로 4MB/s 입력 또는 4000개의 레코드/초 제공.
- 과금:
- 스트림 단위로 시간당 요금과 데이터 입/출력량(GB 단위) 기준으로 요금 부과.
Kinesis Data Streams – 보안
1. 접근 제어 및 권한 부여
- IAM 정책을 사용해 데이터 스트림에 대한 접근 제어.
2. 데이터 암호화
- 전송 중 암호화: HTTPS 엔드포인트를 사용.
- 저장 시 암호화: AWS KMS(Key Management Service)를 사용.
- 클라이언트 측 암호화/복호화: 직접 구현 가능(복잡도가 높음).
3. 네트워크 보안
- VPC 엔드포인트를 통해 VPC 내에서 Kinesis에 접근 가능.
4. 모니터링
- CloudTrail을 사용해 API 호출 로그를 기록 및 모니터링.
- 프로비저닝 모드는 사용자가 용량을 직접 관리하고, 고정된 처리량에 적합.
- 온디맨드 모드는 자동 확장이 필요하거나 처리량이 가변적인 워크로드에 적합.
- Kinesis Data Streams는 IAM, HTTPS, KMS를 활용한 강력한 보안 기능을 제공하며, 네트워크와 API 호출을 안전하게 관리할 수 있음.

Kinesis Data Firehose

주요 특징
- 완전 관리형 서비스: 관리 작업 불필요, 자동 스케일링 지원.
- 데이터 로드 대상:
- AWS 서비스: S3, Redshift, OpenSearch.
- 서드파티 서비스: Splunk, MongoDB, DataDog 등.
- 사용자 정의 HTTP 엔드포인트로 데이터 전송.
- 버퍼링:
- 버퍼 간격: 0초(버퍼링 없음) ~ 900초.
- 버퍼 크기: 최소 1MB.
- 데이터 변환 및 압축:
- 다양한 데이터 형식, 변환, 압축 지원.
- AWS Lambda로 사용자 정의 변환 가능.
- 백업: 실패하거나 모든 데이터를 S3 버킷으로 백업 가능.
Kinesis Data Streams vs Firehose
| 특징 | Kinesis Data Streams | Kinesis Data Firehose |
|---|
| 목적 | 실시간 데이터 스트리밍 처리 | 데이터를 S3/Redshift/OpenSearch로 로드 |
| 코드 작성 필요 여부 | 사용자 정의 코드 필요 (Producer/Consumer) | 코드 작성 불필요 (Fully Managed) |
| 처리 속도 | 실시간 처리 (~200ms) | 근실시간 처리 |
| 스케일링 | 샤드 분할/병합 필요 | 자동 스케일링 |
| 데이터 보존 | 1~365일 | 데이터 저장 없음 |
| 재처리 지원 여부 | 재생(replay) 가능 | 재처리 불가능 |
데이터 순서 보장
Kinesis에서 데이터 순서 처리
- 예제: 100대의 트럭이 GPS 데이터를 주기적으로 Kinesis에 전송.
- 해결 방법:
- 트럭의
truck_id를 파티션 키(partition key)로 사용.
- 동일한 키를 가진 데이터는 항상 동일한 샤드로 전송되어 순서 보장.

SQS에서 데이터 순서 처리
-
SQS 표준(Standard):
- 메시지 순서 보장 없음.

-
SQS FIFO:
- Group ID로 메시지를 그룹화하여 순서 보장.
- Group ID당 하나의 소비자가 메시지 처리.

Kinesis vs SQS 순서 처리 비교
| 특징 | Kinesis Data Streams | SQS FIFO |
|---|
| 샤드 수 | 5 샤드 (예제 기준) | 1 FIFO 큐 |
| 데이터 순서 | 샤드 내에서 순서 보장 | Group ID 내에서 순서 보장 |
| 소비자 수 | 최대 샤드 수와 동일 (5명) | 최대 Group ID 수와 동일 (100명) |
| 처리 속도 | 샤드당 최대 5MB/s | 최대 300 메시지/초 (배치 처리 시 3000) |
비교
-
Kinesis Data Streams:
- 실시간 데이터 스트리밍, 데이터 재처리가 필요한 경우 적합.
- 순서가 중요한 데이터는 파티션 키를 사용해 관리.
-
Kinesis Data Firehose:
- 데이터를 S3, Redshift, OpenSearch 등으로 간단히 로드할 때 적합.
- 자동 스케일링 및 관리가 필요 없는 스트리밍 처리에 유리.
-
SQS FIFO:
- 메시지 순서 보장 및 그룹화된 메시지 처리가 필요한 경우 적합.

Amazon MQ: 관리형 메시지 브로커 서비스
Amazon MQ는 기존 온프레미스 애플리케이션을 AWS로 마이그레이션할 때, 기존 메시징 프로토콜을 유지하면서 클라우드로 이전할 수 있도록 지원하는 서비스임.
Amazon MQ의 주요 특징
-
기존 메시징 프로토콜 지원:
- MQTT, AMQP, STOMP, OpenWire, WSS 등 오픈 프로토콜 지원.
- 기존 애플리케이션을 재설계 없이 클라우드로 마이그레이션 가능.
-
SQS 및 SNS와의 차이점:
- SQS와 SNS는 AWS 고유의 클라우드 네이티브 서비스로, 독점 프로토콜을 사용.
- Amazon MQ는 기존 메시징 시스템과의 호환성을 제공.
-
큐와 주제 기능 제공:
- 큐 기능: SQS와 유사하게 메시지 저장 및 전달.
- 주제 기능: SNS처럼 Pub/Sub 메시징 가능.
-
멀티 AZ 지원:
- Multi-AZ 구성을 통해 장애 복구(failover) 가능.
- 서버 기반으로 동작하여 고가용성을 보장.
-
확장성:
- SQS와 SNS처럼 무제한 확장은 불가능하지만, 기존 브로커 수준에서는 충분한 확장성 제공.
Amazon MQ 사용 사례
- 기존 온프레미스 애플리케이션에서 클라우드로 전환 시:
- 기존의 메시징 시스템을 사용하는 애플리케이션을 재설계할 필요가 없음.
- 다양한 오픈 프로토콜 기반 애플리케이션의 메시징 요구 사항 해결.
Amazon MQ vs SQS/SNS
| 특징 | Amazon MQ | SQS / SNS |
|---|
| 프로토콜 | MQTT, AMQP, STOMP, OpenWire 등 오픈 프로토콜 사용 | AWS 독점 프로토콜 |
| 확장성 | 제한적 (브로커 기반 확장) | 무제한 확장 가능 |
| 멀티 AZ 지원 | Multi-AZ 장애 복구 가능 | 고가용성 내장 |
| 사용 사례 | 기존 메시징 시스템과 통합 | 클라우드 네이티브 애플리케이션 |
| 구성 요소 | 큐 및 주제 제공 | 큐(SQS), 주제(SNS)로 분리됨 |
요약
- Amazon MQ는 기존 메시징 시스템과 호환성을 유지하면서 클라우드로 이전하려는 경우에 적합.
- SQS/SNS는 AWS 네이티브 서비스로, 대규모 확장성과 간편한 관리가 필요한 경우 적합.
- 특정 요구사항에 따라 Amazon MQ와 SQS/SNS를 혼합 사용하여 최적의 메시징 솔루션을 구현 가능.
