
SNS는 발행/구독(Pub/Sub) 기반의 완전관리형 알림·브로드캐스트 서비스. Topic으로 메시지를 발행하면 여러 구독자(SQS, Lambda, HTTP/S, 이메일, 모바일 푸시, SMS 등)에게 동시에 전달
핵심 개념
- Topic: 메시지를 모아두는 채널. 퍼블리셔가 Publish 하면, 구독자들에게 전달.
- Subscription(구독): Topic을 어디로 보낼지 정의. (SQS, Lambda, HTTP/S 엔드포인트, 이메일/이메일-JSON, SMS, 모바일 푸시 등)
- Publisher(발행자): 애플리케이션, AWS 서비스(CloudWatch Alarms, S3 이벤트…), 사용자가 메시지를 보냄.
- Message Attributes: 키/값 메타데이터. 필터링에 사용.
무엇이 좋은가?
- 팬아웃(Fan-out): 한 번 발행 → 여러 소비자로 즉시 복제 전파(SQS 큐 여러 개, Lambda 여러 함수 등).
- 서로 느슨하게 결합: 발행자와 구독자가 서로를 몰라도 됨(확장과 교체가 쉬움).
- 완전관리형: 서버 없음, 고가용성/확장 자동.
자주 쓰는 패턴
-
SNS → SQS 여러 개
- 마이크로서비스별 큐로 병렬 처리. 장애 격리/재시도는 각 SQS에서 담당.
-
SNS → Lambda
- 이벤트 드리븐 처리(썸네일 생성, 슬랙 알림 등).
-
경보/알림
- CloudWatch Alarm → SNS → 이메일/SMS/챗봇/웹훅(HTTP/S).
-
모바일 푸시/SMS
- 플랫폼 애플리케이션(APNS/FCM) 연동, 국가별 SMS 발송.
메시지 필터링(Subscription Filter Policy)
-
구독자별로 원하는 메시지만 받기.
-
예:
{
"eventType": ["orderCreated", "orderUpdated"],
"region": [{ "prefix": "ap-" }],
"amount": [{ "numeric": [">=", 100] }]
}
→ eventType가 주문 관련이고, 리전이 ap-로 시작하며, 금액 ≥ 100인 메시지만 전달.
FIFO 토픽(정확히-한-번 + 순서 보장)
- SNS FIFO: 메시지 순서(=MessageGroupId) 와 중복 제거 보장.
- 주로 SQS FIFO 구독과 조합(정확히-한-번 처리 파이프라인).
보안/운영
- 암호화: 전송 시 TLS, 저장 시 KMS(SSE).
- 액세스 제어: Topic 정책(리소스 기반 정책) + IAM. 계정 간 발행/구독 허용 가능.
- 프라이빗 퍼블리시: VPC Interface Endpoint(PrivateLink) 로 인터넷 없이 퍼블리시.
- 재시도/백오프: HTTP/S/Lambda로 전달 실패 시 자동 재시도(지수 백오프). 실패 메트릭과 로깅 제공.
- 크기 제한: 메시지 본문 최대 256KB.
- 배치 발행:
PublishBatch(여러 메시지 한 번에) 지원.
요금 감각
- 요청 수 + 프로토콜별 전송료 기반.
- 이메일은 저렴, SMS/모바일 푸시는 국가·사업자별 차등.
- SQS/Lambda로의 전달은 해당 서비스 요금 체계에 따름.
빠른 시작(CLI 예시)
aws sns create-topic --name my-topic
aws sns subscribe \
--topic-arn arn:aws:sns:ap-northeast-2:111122223333:my-topic \
--protocol sqs \
--notification-endpoint arn:aws:sqs:ap-northeast-2:111122223333:my-queue
aws sns publish \
--topic-arn arn:aws:sns:ap-northeast-2:111122223333:my-topic \
--message '{"eventType":"orderCreated","amount":120,"region":"ap-northeast-2"}' \
--message-attributes '{"eventType":{"DataType":"String","StringValue":"orderCreated"},"amount":{"DataType":"Number","StringValue":"120"},"region":{"DataType":"String","StringValue":"ap-northeast-2"}}'
SNS vs SQS 빠른 구분
- SNS: 브로드캐스트(푸시). 한 메시지를 여러 곳으로 즉시 전달.
- SQS: 버퍼/큐(풀링). 소비자가 나중에 가져가서 처리. 재시도·DLQ로 탄탄.
요약
- SNS = 발행/구독 알림 허브.
- Topic에 Publish → 여러 구독자(SQS/Lambda/HTTP/메일/SMS) 로 동시 전달.
- 필터링·FIFO·암호화·VPC 엔드포인트 등 운영 기능까지 갖춘 표준 이벤트 브로드캐스트 서비스.