🔠 게시자에서 구독자(생산자 및 소비자라고도 함)로 메시지를 전송하는 완전 관리형 서비스입니다. 일반적으로 마이크로서비스, 분산 시스템 및 서버리스 애플리케이션을 위한 메시징 및 모바일 알림서비스로 사용합니다.

Publisher(게시자 | 발행자 | 생산자)
위의 그림의 예처럼 SNS로 Publish한 Application의 메세지를 (Topic)주제로 하여 다른 구독자 즉, Application, 개인알림(Email, Mobile 등) 으로 Fan-Out~을 펼치다하는 Push형 서비스(Consumer 에서 Pull 또는 Polling할 필요가 없음) 이다.
SNS는 다음과 같은 특징 및 기능이 있다.
- A2AApplication-to-Application, A2PApplication-to-person 메시징
- Standard 및 FIFO Topic
FIFO 주제를 사용하여 엄격한 메시지 순서를 보장하고, 메시지 그룹을 정의하고, 메시지 중복을 방지할 수 있습니다. Amazon SQS FIFO 대기열만 FIFO 주제를 구독할 수 있습니다. - 높은 신뢰성
여러 가용영역에 걸친 메시지 저장 - 유연성
Mobile, HTTP(s), Email, SMS, SQS, LAMBDA로 push - 높은 처리량
- 저비용
매월 무료 범위 + 사용한만큼의 종량 과금
💡 무엇이 주제(Topic)로 publish를 할 수 있는 걸까?
Amazon SNS 공식문서에 따르면 이벤트 소스로 표기 되어있으며 EDA(Event Driven Architecture) 구성요소중 이벤트를 게시할수 있는 요소는 전부 해당된다.
EC2를 Auto Scaling으로 구성하고 운영중일때 트래픽이 증가하여 클러스터가 원하는 크기보다 더 증가했을때
S3로 업로드를 했을때, RDS의 용량이 부족해졌을때, 도메인으로 유입되는 트래픽이 예상했던 임계치보다 증가했을때 등등 이런 이벤트들을 예로 들 수 있다.
Topic(주제)
FIFO Topic
FIFO Topic은 구독자가 오직 SQS만 지원된다. 일반적으로 메시지 순서가 보장되고 중복을 원하지 않을때 사용한다.
- 엄격하게 보존된 메시지 순서 지정
- 정확히 1회 메시지 전송
- 높은 처리량, 초당 최대 300회 게시

FIFO Topic은 주제에 메시지를 게시할 때 그룹화를 할 수 있으며 메시지 그룹ID를 설정하여 전달 할 수 있습니다.

Standard Topic
- 최선의 메시지 순서 지정
- 최소 1회 메시지 전송
- 가장 높은 처리량(초당 게시 횟수)
- 구독 프로토콜: SQS, Lambda, HTTP, SMS, 이메일, 모바일 애플리케이션 엔드포인트
SNS 확장 클라이언트 라이브러리
일반적으로 최대값인 256KB(최대 2GB)보다 큰 메시지에 유용합니다. 모든 라이브러리는 실제 페이로드를 Amazon S3 버킷에 저장하고 저장된 Amazon S3 객체의 참조를 Amazon SNS 주제에 게시합니다.
🛑Standard Topic의 경우 64KB의 Payload chunk 하나가 1개 요청으로 요금이 부과 되지만 대용량일 경우 S3 스토리지에 대해 S3요금이 발생되므로 많은 고려가 필요하다.
데이터 보호 정책
SNS를 사용하면서 중요한 데이터(SID, Password 등 민감데이터)가 교환된다면 보안에 취약해 진다. Amazon SNS는 데이터 보호 정책을 사용하여 해당 데이터가 주제에 의해 교환되지 않도록 보호할 수 있다.
데이터 보호 정책은 중요한 데이터를 데이터 식별자를 사용하여Topic으로 Inbound, Outbound되는 message를 패턴 일치가 되는지 탐지 한다.

Subscriber(구독자 | 소비자)
SNS의 Subscriber의 대상을 다수로 구성할 수 있으며 이 때 메세지를 Copy해서 다수로 전송하는 것을 Fan-out
이라고 합니다. 크게 분류하여 2가지로 Application과 Person(개인)이 있다.
A2A(Application-to-Application)
- Amazon Kinesis DataFirehose
아카이브 및 분석을 위해 전송 스트림에 이벤트를 전송합니다. 전송 스트림을 통해 Amazon Simple Storage Service(Amazon S3), Amazon Redshift 및 Amazon OpenSearch Service(OpenSearch Service)와 같은 AWS 대상이나 Datadog, New Relic, MongoDB 및 Splunk와 같은 서드 파티 대상으로 이벤트를 전송할 수 있습니다. - AWS Lambda
사용자 지정 비즈니스 로직의 실행을 트리거하는 함수에 이벤트를 전달합니다. - Amazon SQS
애플리케이션 통합을 위해 대기열에 이벤트를 전송합니다. - AWS Event Fork Pipelines
이벤트 백업 및 저장, 이벤트 검색 및 분석 또는 이벤트 재생 파이프라인에 이벤트를 전달합니다. - HTTP/S
A2P(Application-to-Person)
- Mobile SMS
- Platform End-point
Mobile로 Push 알림으로 전달합니다. - AWS Chatbot
Amazon Chime 채팅룸 또는 Slack 채널로 이벤트를 전달 - PagerDuty
대기 중인 팀에 운영 인사이트를 제공합니다.
Subscribe Filter Policy(구독 필터 정책)
기본적으로 Amazon SNS 주제 구독자는 주제에 게시된 모든 메시지를 수신합니다. 메시지의 하위 세트만 수신하거나 특정 메세지(e.g error_message)를 보내기 싫다면 구독자는 주제 구독에 필터 정책을 할당해야 합니다.
필터 정책이 메시지에 적용되는 방식을 메시지 속성
과 본문
에 적용하는것으로 JSON방식으로 편집하여 결정할 수 있다.
// 에러 타입의 메세지를 필터링
{
"msg_type":["error_1","error_2","error_3"]
}