Simple Queue Service (SQS)
• Queue는 대기한다는 의미
• SQS는 메시지를 대기하는 기능
• 애플리케이션 간에 느슨한 결합 제공(decoupling)
• 시나리오: 쇼핑몰 주문
SQS Queue
• SQS는 Poll 방식으로 메시지를 전송 (Consumer가 메시지를 요청하여 받는 방식)
• Consumer 가 메시지를 소비하면 SQS Queue에서는 메시지가 삭제됨
SQS - 표준대기열 vs FIFO 대기열
SQS – 배달 못한 편지 대기열 (DLQ, Dead Letter Queue)
• 일반적으로 메시지는 처리될 때까지 계속 메시지를 보냄
• 이 경우 다른 메시지처리까지 영향을 줄 수 있음
• 일정 횟수 이상 시도 후 처리되지 못한 메시지는 DLQ로 이동하여 보관
SQS - 제한 시간 초과/표시 제한 시간(Visibility Timeout)
• 메시지소비자가 대기열에서 메시지를 수신하고 처리하면 메시지는 계속 대기열에 있음
• 연결 문제 또는 메시지소비자의 애플리케이션 문제로 인해 메시지를 다시 수신해야 할 수 있기에 Amazon SQS에서 메시지를 자동으로 삭제하지 않음
• 소비자는 메시지를 수신하고 처리한 후 대기열에서 이 메시지를 삭제해야 함
• 제한 시간 초과는 메시지 소비자가 메시지를 수신 후 다른 소비자가 메시지를 다시 처리하지 못하게 하기위한 기간 (SQS에서 다른 소비자가 메시지를 수신하고 처리할 수 없도록 차단하는 기간)
• 메시지의 기본 제한 시간은 30초 (최소는 0초, 최대 시간은 12시간)
**SQS – Short Polling(짧은 폴링) vs. Long Polling(긴 폴링)
• 폴링은 SQS Queue로부터 메시지를 가져오는 방법 (Consumer가 메시지를 요청)
• Short Polling(디폴트 값)은 메시지 queue가 비어 있어도 메시지 소비자의 메시지 요청을 즉시 반환하는 방법
• Long Polling은 queue에 메시지가 비어있으면 메시지가 도착할 때까지 또는 메시지 수신 대기시간 (Receive message wait time)이 완료 될 때 까지 메시지 요청을 기다림
• 메시지 수신 대기시간은 1초 부터 최대 20초까지 설정 가능
• Long Polling을 사용하면 빈 응답의 수를 제거하여 Amazon SQS 사용 비용을 절감할 수 있음
• 예, API 요청 수를 감소시켜 효율성 향상 및 애플리케이션의 지연시간 감소
Simple Notification Service (SNS)
• 메시지 전송 서비스
• 게시자(Publishers)에서 구독자, Subscriber(생산자 및 소비자 라고도 함)
로 메시지를 전송
• 애플리케이션 간(A2A) 및 애플리케이션과 사용자 간(A2P) 통신
• SNS는 Push 방식으로 메시지를 전송(Subscriber에게 메시지를 보내는 방식)
• 전송 순서
1. SNS에서 주제(Topic) 생성
2. 구독 생성(메시지를 받는 사람)
3. 메시지 생성
4. 구독자에게 메시지 전달
SNS + SQS Fan Out
• Amazon SQS와 Amazon SNS는 둘 다 AWS 내 메시징 서비스
• Amazon SNS를 사용하면 애플리케이션에서 정기적으로 업데이트를 확인하거나 ‘폴링(Polling)'할 필요 없이 ‘푸시(Push)' 메커니즘을 통해 다수의 구독자에게 메시지를 보낼 수 있음
• Amazon SQS는 분산 애플리케이션에서 폴링 모델을 통해 메시지를 교환하는 데 사용되는 메시지 대기열
서비스. 이 서비스를 통해 송신 구성 요소와 수신 구성 요소를 분리
SNS FIFO Topic
• SNS FIFO 주제는 메시지가 주제에 게시된 정확한 순서로 구독된 Amazon SQS FIFO 대기열에 메시지를 전달
• SQS FIFO 대기열을 사용하면 대기열의 소비자는 메시지가 대기열로 전송된 정확한 순서로 메시지를 수신
• 예, 은행 거래 로그, 주식 시세 표시기, 항공편 추적기, 가격 업데이트, 뉴스 브로드캐스팅, 인벤토리 관리
Kinesis
실시간 스트리밍 데이터를 손쉽게 수집, 처리 및 분석 하는 서비스
• 비디오, 오디오, 애플리케이션 로그, 웹 사이트 클릭스트림 및 IoT 텔레메트리 데이터와 같은 실시간 데이
터를 수집
• 데이터가 수집된 후에야 처리를 시작할 수 있는 것이 아니라 데이터가 수신되는 대로 처리 및 분석
• Kinesis 서비스 유형
✓ Kinesis Data Streams: 데이터 스트림을 수집, 저장 및 처리
✓ Kinesis Data Firehose: 데이터 스트림을 AWS 데이터 스토어에 로드 (저장기능은 없음)
✓ Kinesis Data Analytics: SQL 또는 Apache Flink로 데이터 스트림 분석
✓ Kinesis Video Streams: 비디오 스트림을 수집, 저장 및 처리
Kinesis Data Streams
• 데이터 스트림을 캡처, 처리 및 저장할 수 있는 스트리밍 데이터 서비스
• 실시간(Realtime) 서비스
• Amazon DynamoDB, Amazon Aurora, Amazon CloudWatch 및 AWS IoT Core와 같은 AWS 서비스의 기존 리소스에서 데이터를 보낼 수 있음
• 스트리밍 데이터를 AWS Lambda, Amazon Kinesis Data Analytics, Amazon Kinesis Data Firehose 등으로 전송
• 데이터 스토리지가 있음 (1일 ~ 365일 사이의 기간으로 데이터 보관)
Kinesis Data Firehose (ETL 솔루션임)
• 스트리밍 ETL(extract, transform, and load) 솔루션
• 스트리밍 데이터를 데이터 스토어와 분석 도구에 로드
• 스트리밍 데이터를 캡처하고 변환한 후 Amazon S3, Amazon Redshift, Amazon OpenSearch Service 및
Splunk로 로드하여 비즈니스 인텔리전스 도구 및 대시보드를 통해 거의 실시간으로 분석
• 거의 실시간(Near Realtime) 서비스
• 데이터 스토리지가 없음 (데이터를 저장하지 않음)
Kinesis Data Analytics
• SQL 또는 Apache Flink를 사용하여 실시간으로 스트리밍 데이터를 변환하고 분석
• Apache Flink는 데이터 스트림 처리를 위한 오픈 소스 프레임워크 및 엔진
• Amazon Kinesis Data Streams 및 Amazon Kinesis Data Firehose 스트리밍 소스로부터의 데이터 수집 가능
Amazon MQ
• Apache ActiveMQ 및 RabbitMQ용 관리형 메시지 브로커 서비스
• JMS 및 NMS와 같은 업계 표준 API와 AMQP, STOMP, MQTT, WebSocket 등을 비롯한 메시징 프로토콜을
지원
• 활성(Active)/대기(Standby) 브로커 배포모드를 지원하여 고가용성 및 장애조치 가능
• 클라우드 기반의 애플리케이션은 SNS, SQS 메시지 서비스를 사용하는 것을 추천 (스케일링, 고가용성, 더
나은 성능, 더 많은 기능 등)
• 기존에 Apache ActiveMQ 및 RabbitMQ 등의 애플리케이션을 온프레미스에서 사용하고 있고 코드의 변경 없이 클라우드로 마이그레이션 할 경우 Amazon MQ 사용
API Gateway
• 개발자가 API를 생성, 게시, 유지 관리, 모니터링 및 보안 유지를 할 수 있게 하는 서비스
• API: Application Programming Interface
• RESTful API 및 WebSocket API를 지원
• 예, 애플리케이션이 API를 통해 백엔드 시스템 및 데이터에 액세스 하여 통신
AWS Step Functions & Amazon AppFlow
• 시각적 워크플로(workflow) 구축 서비스
• 애플리케이션의 구성 요소를 단계별로 배열 하여 다단계 애플리케이션을 구축하고 실행
• 사용 예
✓ 데이터 처리: 여러 데이터베이스의 데이터를 통일된 보고서로 통합, 분석 및 기계 학습 워크플로 조정
✓ DevOps 및 IT 자동화: 지속적 통합 및 지속적 배포를 위한 도구 구축, 인프라의 변경에 자동으로 대응하는 이벤트 중심 애플리케이
션 생성
✓ 전자 상거래: 주문 처리, 재고 추적 등 프로세스 자동화
✓ 웹 애플리케이션: 강력한 사용자 등록 프로세스와 로그인 인증 구현
Amazon AppFlow
• Software-as-a-Service(Saas) 애플리케이션과 AWS 간에 안전하게 데이터를 전송할 수 있게 해주는 서비스
• SaaS 애플리케이션과 데이터를 교환하기 위해 AWS 서비스용 API 커넥터를 구축(코드 작성)하고 관리할
필요 없음
• 소스: Salesforce, SAP, Zendesk, Slack 및 ServiceNow와 같은 서비스형 소프트웨어(SaaS) 애플리케이션
• 대상: Amazon S3 및 Amazon Redshift와 같은 AWS 서비스
• 일정에 따라, 비즈니스 이벤트에 대한 응답으로 또는 온디맨드로 데이터 플로우를 실행 가능