0Pricing
AWS Solutions Architect · 강의

SNS 주제 및 팬아웃 아키텍처

하나의 SNS 주제에 메시지를 게시하고 여러 SQS 대기열, Lambda 함수 및 HTTP 엔드포인트로 동시에 팬아웃합니다.

SNS 주제 및 팬아웃 아키텍처은(는) CoddyKit의 무료 AWS Solutions Architect 강의입니다. 이것은 4개 중 3번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 AWS Solutions Architect 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. AWS Solutions Architect 강의에는 총 4개의 강의가 포함되어 있습니다.

Amazon SNS란 무엇인가요

Amazon Simple Notification Service (SNS)는 완전관리형 게시/구독 메시징 서비스입니다. 게시자는 SNS 토픽에 메시지를 보내고, SNS는 해당 메시지를 모든 구독자에게 즉시 전달합니다. SQS가 가져오기 방식인 것과 달리 SNS는 푸시 방식이므로 메시지가 게시되는 즉시 구독자에게 전달합니다. 따라서 SNS는 여러 다운스트림 시스템에 이벤트를 동시에 브로드캐스트하는 데 적합합니다.

SNS 토픽: Standard 및 FIFO

SQS와 마찬가지로 SNS에는 두 가지 토픽 유형이 있습니다. Standard 토픽은 최선 노력 방식의 메시지 순서 보장, 최소 한 번 전달, 사실상 제한 없는 처리량을 제공하며 SQS, 람다, HTTP 엔드포인트, 이메일, SMS, 모바일 푸시로 전달할 수 있습니다. FIFO 토픽은 FIFO SQS 구독자에게만 엄격한 순서와 정확히 한 번 전달을 보장합니다. FIFO 토픽은 일괄 처리를 사용하면 초당 최대 3,000개의 메시지를 지원하며, 여러 구독자 사이에서 이벤트 순서를 보존해야 할 때 사용합니다.

aws sns create-topic --name 'OrderEvents'

# Create FIFO topic
aws sns create-topic \
  --name 'OrderEvents.fifo' \
  --attributes '{"FifoTopic": "true", "ContentBasedDeduplication": "true"}'

SNS 구독자 유형

SNS는 프로토콜을 기반으로 하는 여러 구독자 유형을 지원합니다.

  • SQS: 내구성 있는 대기열(비동기 처리에서 가장 일반적)
  • 람다: 직접 호출(SNS 관점에서는 동기식)
  • HTTP/HTTPS: 외부 엔드포인트로 웹훅 전달
  • 이메일 / Email-JSON: 사용자 알림
  • SMS: 문자 메시지 전달
  • 모바일 푸시: 플랫폼 애플리케이션을 통한 FCM, APNs
  • Firehose: Kinesis Data Firehose를 통해 S3 또는 Redshift로 스트리밍
# Subscribe an SQS queue to an SNS topic
aws sns subscribe \
  --topic-arn 'arn:aws:sns:us-east-1:123456789012:OrderEvents' \
  --protocol sqs \
  --notification-endpoint 'arn:aws:sqs:us-east-1:123456789012:InventoryQueue'

팬아웃 아키텍처 패턴

팬아웃은 SNS의 핵심 패턴입니다. 하나의 메시지를 토픽에 게시하면 SNS가 모든 구독자에게 동시에 전달합니다. 예를 들어 새 주문 이벤트를 창고 출고 처리를 위한 SQS 대기열, 재고 업데이트를 위한 또 다른 SQS 대기열, 사기 탐지를 위한 람다 함수, 운영 팀을 위한 이메일 구독으로 팬아웃할 수 있습니다. 각 구독자는 서로 결합되지 않은 상태에서 이벤트를 독립적으로 처리합니다. 이는 하나의 소비자가 여러 시스템으로 라우팅하는 방식보다 훨씬 확장성이 높습니다.

SNS + SQS 팬아웃: 권장 방식

권장 패턴은 SNS와 SQS를 결합하는 것입니다. SNS에 게시하면 여러 SQS 대기열로 팬아웃됩니다. 이를 통해 다음과 같은 이점을 얻을 수 있습니다.

  • 내구성: 소비자가 중단되어도 메시지가 SQS에 대기합니다.
  • 독립적인 확장: 각 소비자가 자신의 속도로 처리합니다.
  • 결합도 감소: 게시자를 변경하지 않고 새 소비자를 SNS에 구독시키기만 하면 됩니다.
  • 재시도 내성: SQS가 가시성 제한 시간과 DLQ를 제공합니다.

람다를 직접 구독자로 사용하면 SQS가 제공하는 버퍼링이 없으므로, SNS→SQS→람다가 더 내성이 높은 3계층 패턴입니다.

메시지 전달 재시도 및 DLQ

SNS가 구독자에게 전달하지 못하면(HTTP 엔드포인트가 5xx를 반환하거나, 람다가 예외를 발생시키거나, SQS를 사용할 수 없는 경우) 지수 백오프 전략으로 재시도합니다. 재시도 정책은 프로토콜마다 다릅니다. HTTP 엔드포인트는 최대 4회의 즉시 재시도와 23일 동안의 지수 백오프를 적용하고, 람다와 SQS는 자체 재시도 메커니즘으로 재시도를 관리합니다. 모든 전달 재시도를 소진한 메시지를 수집하려면 SNS 토픽 DLQ를 구성하여 이벤트가 조용히 유실되지 않도록 하십시오.

SNS에 메시지 게시

AWS SDK 또는 CLI를 사용하여 SNS에 게시합니다. 각 메시지에는 제목(이메일용), 메시지 본문(최대 256KB), 라우팅을 위한 메시지 속성을 포함할 수 있습니다. 서로 다른 구독자 유형(SQS, 이메일, 모바일)에 서로 다른 콘텐츠를 보내려면 메시지 구조를 사용할 수 있습니다. 프로토콜별 키가 포함된 JSON을 사용하면 구독자 유형에 맞게 페이로드를 구성할 수 있습니다.

aws sns publish \
  --topic-arn 'arn:aws:sns:us-east-1:123456789012:OrderEvents' \
  --message '{"orderId": "12345", "status": "PLACED", "amount": 99.99}' \
  --subject 'New Order Placed' \
  --message-attributes '{
    "orderType": {"DataType": "String", "StringValue": "PREMIUM"}
  }'

SNS 구독 필터 정책

구독 필터 정책을 사용하면 각 구독자가 메시지 속성을 기준으로 자신과 관련된 메시지만 받을 수 있습니다. 필터링하지 않으면 모든 구독자가 게시된 모든 메시지를 받습니다. 필터 정책을 사용하면 구독자가 관심 있는 속성 값을 지정합니다. 예를 들어 'PREMIUM' 주문 대기열은 {"orderType": ["PREMIUM"]} 필터로 구독하고, 'STANDARD' 대기열은 ["STANDARD"]를 기준으로 필터링합니다. 각 구독자는 자신과 관련된 하위 집합만 처리하므로 불필요한 처리가 줄어듭니다.

aws sns set-subscription-attributes \
  --subscription-arn 'arn:aws:sns:...:subscription/...' \
  --attribute-name FilterPolicy \
  --attribute-value '{"orderType": ["PREMIUM"], "region": ["US", "EU"]}'

모바일 푸시 알림을 위한 SNS

SNS는 iOS(APNs) 및 Android(FCM/GCM) 기기에 직접 모바일 푸시 알림을 보낼 수 있습니다. 디바이스 토큰을 플랫폼 엔드포인트 ARN으로 등록한 다음 엔드포인트에 직접 게시하거나 플랫폼 애플리케이션 구독자가 있는 토픽에 게시합니다. 대규모 디바이스 직접 알림(수백만 대의 디바이스)에는 SNS를 SQS 팬아웃과 결합하십시오. SNS가 알림 이벤트를 SQS로 라우팅하면 작업자 서비스가 대량 토큰 확인과 전달을 규모에 맞게 처리합니다.

SNS 메시지 암호화 및 액세스 제어

AWS KMS를 사용한 서버 측 암호화로 SNS 메시지를 보호하십시오. 이렇게 하면 SNS 인프라 내부에 저장된 메시지가 암호화됩니다. 액세스 제어에는 리소스 기반 정책(토픽에 게시하거나 토픽에서 구독할 수 있는 주체)과 IAM 정책이 모두 사용됩니다. S3 버킷이 SNS 토픽에 알림을 게시하도록 허용하려면 토픽의 리소스 정책에서 S3 서비스 주체에 sns:Publish 권한을 부여하십시오. 권한이 없는 이벤트 삽입을 방지하려면 항상 게시할 수 있는 출처를 승인된 출처로 제한하십시오.

SNS와 SQS: 상호 보완적인 서비스

SNS와 SQS는 대안 관계가 아니라 상호 보완적인 서비스입니다. SNS(푸시)는 여러 소비자에게 즉시 브로드캐스트할 때 사용하며, 여러 시스템이 이벤트에 반응해야 하는 경우에 적합합니다. SQS(가져오기)는 재시도와 DLQ를 지원하는 안정적이고 내구성 있는 단일 소비자 처리에 사용하며, 한 소비자가 각 메시지를 자신의 속도로 정확히 한 번 처리해야 할 때 적합합니다. SNS→SQS 팬아웃 패턴을 사용하면 SNS의 브로드캐스트 전달과 SQS의 내구성 있고 재시도 가능한 처리를 모두 얻을 수 있습니다. 이 조합은 SAA-C03 시험 시나리오에 자주 등장합니다.

빠른 확인

이 단원에서 다룬 AWS Solutions Architect (SAA-C03) 개념을 얼마나 이해했는지 확인해 보십시오.

단원 요약

이 단원에서는 다음을 배웠습니다. SNS 토픽은 SQS, 람다, HTTP, SMS, 이메일을 비롯한 구독자에게 푸시 방식의 게시/구독 브로드캐스트를 동시에 제공합니다. 팬아웃 아키텍처는 하나의 SNS 토픽에서 여러 SQS 대기열로 전달하여 내구성이 있고 독립적으로 확장 가능한 다중 소비자 이벤트 처리를 구현합니다. 또한 구독 필터 정책은 메시지 속성을 기준으로 각 구독자에게 관련 이벤트만 라우팅하여 불필요한 처리를 줄입니다. 다음으로 SQS 메시지 필터링과 SNS + SQS 통합을 자세히 살펴보겠습니다.

자주 묻는 질문

“SNS 주제 및 팬아웃 아키텍처” 강의는 무료인가요?

네 — “SNS 주제 및 팬아웃 아키텍처” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 AWS Solutions Architect 강의 전체를 잠금 해제할 수 있습니다. AWS Solutions Architect 강의에는 총 4개의 강의가 포함되어 있습니다.

“SNS 주제 및 팬아웃 아키텍처”에서 뭘 배우나요?

하나의 SNS 주제에 메시지를 게시하고 여러 SQS 대기열, Lambda 함수 및 HTTP 엔드포인트로 동시에 팬아웃합니다. 브라우저에서 직접 실행하는 실습 코드로 AWS Solutions Architect을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

AWS Solutions Architect을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 AWS Solutions Architect은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 3번째 강의입니다.

“SNS 주제 및 팬아웃 아키텍처” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 AWS Solutions Architect 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 AWS Solutions Architect 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. SQS Standard와 FIFO 대기열
  2. 가시성 제한 시간, DLQ 및 롱 폴링
  3. SNS 주제 및 팬아웃 아키텍처
  4. SQS 메시지 필터링 및 SNS와 SQS 통합
← AWS Solutions Architect(으)로 돌아가기