AWS 기반 비동기 메시징 시스템 설계에서 가장 핵심적으로 활용되는 서비스는 SNS와 SQS이다. 이 두 서비스는 함께 활용되며 특히 분산 시스템, 마이크로서비스, 서버리스 환경에서 중요한 역할을 한다.

마이크로서비스, 분산 시스템 및 서버리스 애플리케이션을 위한 완전 관리형 메시지 대기열 서비스이다.
| 항목 | 설명 |
|---|---|
| 비동기 처리 | 서비스들 간 결합도 감소 |
| FIFO Queue 지원 | 정확히 한 번 처리(Exactly-Once) |
| 표준 Queue (Standard Queue) | 높은 처리량 지원(중복 가능) |
| 메시지 보존 가능 | 유실 없는 전달 |
| Auto Scaling 트리거 가능 | 큐 길이 기반 확장 설정 |
| DLQ 연동 가능 | 장애 발생 메시지 보존 및 재처리 |

게시/구독(pub/sub) 패턴을 위한 이벤트 알림 서비스로 메시지를 여러 구독자에게 동시에 전달할 수 있다.
| 항목 | 설명 |
|---|---|
| Push 기반 메시징 | 실시간 알림(Notify 기반) |
| 다양한 프로토콜 지원 | HTTP(S), Email, SMS, Lambda 등 |
| Email 전송 시 SES 필요 | SNS → Email 직접 불가 → SES 연계 필요 |
| Fan-Out 구성 가능 | 하나의 이벤트 → 다수 시스템으로 브로드캐스트 |
| Cross-Account Lambda 호출 가능 | 정책 설정 시 타 계정 호출 가능 |
어떤 서비스에서 중요한 이벤트가 발생했을 때, 그 정보를 필요로 하는 곳이 여러 곳이라면 일일이 정보를 보내야 하는데, 이때 Fan-out 구조를 사용하면 된다.

메시지가 재처리에도 실패하거나 손실 우려가 있는 경우 DLQ를 사용해 보존 후 후속 분석 및 재처리가 가능하다.
타 AWS 계정의 Lambda를 SNS Topic이 호출하려면 Lambda 리소스 정책에 SNS 호출 허용, SNS Topic 정책에 외부 계정 Lambda 구독 허용이 필요하다.

{
"Version": "2012-10-17",
"Statement": [{
"Effect": "Allow",
"Principal": { "AWS": ["111122223333"] },
"Action": ["sqs:ReceiveMessage"],
"Resource": "arn:aws:sqs:us-east-1:444455556666:queue1"
}]
}
"Principal": { "AWS": ["111122223333"] }
→ 이 큐에 접근 가능한 AWS 계정은 111122223333 (EC2가 있는 계정)
"Action": ["sqs:ReceiveMessage"]
→ 메시지 가져오기만 허용
"Resource"
→ 접근할 SQS 큐의 ARN
즉, 메시지와 메시지를 읽는 소비자의 계정이 다를 때 큐 정책에서 EC2에게 읽기 권한을 부여하는 과정이다.
SNS는 메시지를 받아 이메일, 문자, 앱 푸시 알림 뿐만 아니라 외부 웹서버에도 메시지를 보낼 수 있다.

메시지 발행(Publish)
이벤트가 발생하면 구독자에게 해당 정보를 SNS Topic으로 단 한번 발행한다.
구독자에게 동시 전송(Fan-out)
SNS 토픽은 자신을 구독하고 있는 모든 대상에게 메시지를 복제해 동시 전달한다.
메시지 전달
A2A (Application-to-Application)
| 전달 방식 | 설명 |
|---|---|
| Amazon SQS | 다른 시스템이 비동기로 처리할 수 있도록 메시지를 큐에 전달 |
| AWS Lambda | 이벤트 기반으로 서버리스 함수 실행 |
| HTTPS 엔드포인트 | 외부 웹 서버 또는 API로 직접 메시지 전송 (이 구성의 핵심 활용 사례) |
A2P (Application-to-Person)
| 전달 방식 | 설명 |
|---|---|
| 이메일 알림 (단, 실제 전송은 Amazon SES 필요) | |
| SMS | 문자 메시지 발송 |
| Mobile Push | 모바일 앱 푸시 알림 |