[AWS] SNS, SQS

gyeol·2025년 11월 19일

AWS

목록 보기
17/20
post-thumbnail

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

SQS (Simple Queue Service)

마이크로서비스, 분산 시스템 및 서버리스 애플리케이션을 위한 완전 관리형 메시지 대기열 서비스이다.

항목설명
비동기 처리서비스들 간 결합도 감소
FIFO Queue 지원정확히 한 번 처리(Exactly-Once)
표준 Queue (Standard Queue)높은 처리량 지원(중복 가능)
메시지 보존 가능유실 없는 전달
Auto Scaling 트리거 가능큐 길이 기반 확장 설정
DLQ 연동 가능장애 발생 메시지 보존 및 재처리

SNS (Simple Notifiaction Service)

게시/구독(pub/sub) 패턴을 위한 이벤트 알림 서비스로 메시지를 여러 구독자에게 동시에 전달할 수 있다.

항목설명
Push 기반 메시징실시간 알림(Notify 기반)
다양한 프로토콜 지원HTTP(S), Email, SMS, Lambda 등
Email 전송 시 SES 필요SNS → Email 직접 불가 → SES 연계 필요
Fan-Out 구성 가능하나의 이벤트 → 다수 시스템으로 브로드캐스트
Cross-Account Lambda 호출 가능정책 설정 시 타 계정 호출 가능

SNS + SQS 활용 아키텍처

Fan-out 구조

어떤 서비스에서 중요한 이벤트가 발생했을 때, 그 정보를 필요로 하는 곳이 여러 곳이라면 일일이 정보를 보내야 하는데, 이때 Fan-out 구조를 사용하면 된다.


출처 : https://medium.com/better-programming/how-to-fan-out-to-different-sqs-queues-using-sns-message-filtering-84cd23ed9d07

  1. 이벤트 발생
  2. 이벤트 내용을 SNS Topic으로 발행 (Publish)
  3. SNS가 자신을 구독하는 모든 SQS Queue로 메시지 복제해 전달
  4. 각 큐를 기반으로 Lambda 또는 마이크로서비스에서 독립적으로 처리 수행

DLQ (Dead Letter Queue)

메시지가 재처리에도 실패하거나 손실 우려가 있는 경우 DLQ를 사용해 보존 후 후속 분석 및 재처리가 가능하다.

  1. SQS로 메시지 전송
  2. 메시지 처리 실패 시, 자동으로 1차 DLQ로 격리
  3. Lambda 함수가 1차 DLQ의 메시지를 가져와 자동으로 재처리 시도
  4. 재처리 성공 시, 메시지를 다시 메인 SQS 큐로 되돌림
  5. 재처리 실패 시, 2차 DLQ로 보냄
  6. 운영자가 2차 DLQ에 쌓인 메시지를 직접 확인해 원인 분석 및 조치

Cross-Account 호출

타 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 + HTTP/HTTPS 엔드포인트 활용

SNS는 메시지를 받아 이메일, 문자, 앱 푸시 알림 뿐만 아니라 외부 웹서버에도 메시지를 보낼 수 있다.

  1. 메시지 발행(Publish)
    이벤트가 발생하면 구독자에게 해당 정보를 SNS Topic으로 단 한번 발행한다.

  2. 구독자에게 동시 전송(Fan-out)
    SNS 토픽은 자신을 구독하고 있는 모든 대상에게 메시지를 복제해 동시 전달한다.

  3. 메시지 전달

  • A2A (Application-to-Application)

    전달 방식설명
    Amazon SQS다른 시스템이 비동기로 처리할 수 있도록 메시지를 큐에 전달
    AWS Lambda이벤트 기반으로 서버리스 함수 실행
    HTTPS 엔드포인트외부 웹 서버 또는 API로 직접 메시지 전송 (이 구성의 핵심 활용 사례)
  • A2P (Application-to-Person)

    전달 방식설명
    Email이메일 알림 (단, 실제 전송은 Amazon SES 필요)
    SMS문자 메시지 발송
    Mobile Push모바일 앱 푸시 알림
profile
공부 기록 공간 '◡'

0개의 댓글