본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다.
강의 요약
오늘 강의에서는 알람 시스템에 대해 다뤘다. 알람은 장애 감지와 대응, 서비스 가용성 유지, 성능 모니터링, 비용 절감, 사용자 경험 향상, 예방적 조치 등 시스템 운영에서 중요한 역할을 한다. 강의에서는 AWS SNS와 Slack을 연동하여 알람을 받는 방법을 소개했는데, SNS에 대해 좀 더 알아보기로 했다.
AWS SNS란?
AWS SNS(Simple Notification Service)는 완전 관리형 메시징 서비스로, Publisher-Subscriber 패턴을 기반으로 한다. 메시지를 발행하는 쪽과 수신하는 쪽을 분리하여 시스템 간 느슨한 결합을 구현할 수 있다.
기본 동작 방식은 다음과 같다.
- Publisher가 SNS Topic에 메시지 발행
- Topic을 구독하는 모든 Subscriber에게 메시지 자동 전달
- 각 Subscriber는 독립적으로 메시지 처리
Publisher는 메시지를 받을 대상을 알 필요가 없고, Subscriber는 메시지 발신자를 신경 쓰지 않아도 된다. 이런 구조가 분산 시스템에서 유용한 이유는 명확하다. 한 시스템의 변경이 다른 시스템에 영향을 주지 않기 때문이다.
Topic 유형
SNS는 두 가지 Topic 유형을 제공한다.
Standard Topic
- 거의 무제한에 가까운 처리량 지원
- 메시지 순서 보장 안 됨(Best-effort ordering)
- 중복 전송 가능(At-least-once delivery)
- 모든 구독 프로토콜 지원
- 대부분의 사용 케이스에 적합
FIFO Topic
- 초당 300개 메시지 또는 10MB 처리량 제한
- 엄격한 순서 보장(Strict ordering)
- 정확히 한 번 전달(Exactly-once delivery)
- SQS FIFO 큐로만 Fan-out 가능
- 순서가 중요한 금융 거래, 주문 처리 등에 사용
지원 프로토콜 및 엔드포인트
SNS가 지원하는 Subscriber 타입이 상당히 다양하다.
Application-to-Application (A2A)
- Amazon SQS: 비동기 처리를 위한 큐잉
- AWS Lambda: 서버리스 함수 트리거
- Amazon Kinesis Data Firehose: 실시간 데이터 스트리밍
- HTTP/HTTPS: Webhook 엔드포인트
Application-to-Person (A2P)
- Email/Email-JSON: 이메일 알림
- SMS: 문자 메시지
- Mobile Push: iOS, Android, FireOS 등 푸시 알림
특히 HTTP/HTTPS 엔드포인트 지원 덕분에 Slack, MS Teams 같은 외부 서비스와 쉽게 연동할 수 있다.
주요 기능
Fan-out 아키텍처
하나의 메시지를 여러 Subscriber에게 동시에 전달하는 패턴이다. 예를 들어 주문 완료 이벤트를 SNS에 발행하면
- SQS 큐로 보내서 비동기 처리
- Lambda로 보내서 실시간 처리
- Kinesis로 보내서 데이터 분석
- HTTP 엔드포인트로 보내서 외부 시스템 연동
이 모든 게 하나의 이벤트 발행으로 동시에 처리된다. MSA 환경에서 이벤트 기반 아키텍처를 구현할 때 핵심적인 패턴이다.
메시지 필터링
Subscriber가 필요한 메시지만 선택적으로 수신할 수 있도록 필터 정책을 설정할 수 있다. 필터는 두 가지 방식으로 적용된다:
- Attribute-based filtering: 메시지 속성 기반
- Payload-based filtering: 메시지 본문 내용 기반
예를 들어 주문 이벤트에서 특정 금액이 얼마 이상인 경우만 특정 Subscriber에게 전달하는 식으로 구성할 수 있다. 불필요한 메시지 처리를 줄여서 효율성을 높일 수 있는 기능이다.
메시지 내구성 및 재시도
- 메시지가 여러 가용 영역에 복제되어 저장됨
- Subscriber 장애 시 자동 재시도 정책 작동
- 최종 실패 시 Dead Letter Queue(DLQ)로 전송 가능
- CloudWatch를 통한 전달 상태 로깅
프로덕션 환경에서 메시지 유실을 방지하는 메커니즘이 잘 갖춰져 있다.
보안
- AWS KMS를 통한 서버 사이드 암호화
- IAM 정책을 통한 Topic 접근 제어
- VPC 엔드포인트를 통한 프라이빗 통신
- 메시지 데이터 보호 정책으로 민감 정보 필터링
참고 출처
- https://aws.amazon.com/ko/sns/features/
- https://www.datacamp.com/tutorial/aws-sns
- https://www.antstack.com/guides/amazon-sns-full-guide/



