어플리케이션 간 실시간 알림 관리는 적절한 메시징 서비스 없이는 막대한 도전이 될 수 있습니다.
Amazon Simple Notification Service (SNS)은 마이크로서비스, 분산 시스템 및 서버리스 어플리케이션의 분리 및 확장을 위한 완전히 관리되는 메시징 솔루션을 제공합니다. SNS를 통해 HTTP/S, 이메일, SMS 및 모바일 푸시 알림과 같은 다양한 전송 프로토콜을 통해 대량의 구독자에게 메시지를 전송할 수 있습니다. AWS SNS는 신뢰할 수 있는 전달, 재시도 및 백오프 기능을 포함한 메시지 전달의 모든 중요한 작업을 처리하여 핵심 응용프로그램 기능 구축에 집중할 수 있는 자유를 제공합니다.
AWS SNS는 확장 및 이해하기 쉬운 게시-구독 모델을 따릅니다. 게시된 단일 메시지는 여러 엔드포인트로 동시에 분배되어 이벤트 주도 아키텍처에 이상적입니다.
이 자습서에서 AWS SNS 설정 및 사용 방법을 안내하겠습니다. 다양한 채널로 알림을 보내는 데 사용됩니다.
AWS SNS란 무엇인가?
Amazon의 간단한 알림 서비스 (SNS)는 마이크로서비스, 분산 시스템 및 서버리스 애플리케이션을 분리할 수 있는 AWS의 관리형 게시/구독 메시징 서비스입니다.
SNS는 발행-구독 모델을 기반으로 작동하며 발행자는 주제에 메시지를 보내고 구독자는 해당 메시지를 받습니다. SNS 주제를 커뮤니케이션 채널로 생각해보세요 – 이 채널에 메시지를 발행하면 구독한 모든 사람들에게 즉시 통지됩니다. 이 시스템의 장점은 발행자가 자신의 메시지를 받는 사람을 알 필요가 없으며, 구독자가 메시지를 보내는 사람을 알 필요가 없다는 점입니다.
이것이 Simple Queue Service (SQS)와 어떻게 다른지 궁금할 수 있습니다. 간단히 말해, SQS는 주로 비동기적으로 작업을 처리하기 위해 설계된 대기열 기반 모델을 사용하고, SNS는 여러 수신자에게 동시에 메시지를 브로드캐스트하는 데 초점을 맞춥니다. 따라서 SNS는 방금 발생한 이벤트에 대해 많은 시스템에 알릴 필요가 있는 시나리오에 이상적입니다. 더 많은 차이점은 SQS vs SNS 블로그 게시물에서 확인할 수 있습니다.
SNS는 여러 배달 프로토콜을 지원하여 구독자가 알림을 받는 방식에 유연성을 제공합니다.
AWS SNS의 주요 기능
SNS는 필요한 유일한 알림 서비스로 만들어진 기능을 제공합니다. 여러 가지를 나열해보겠습니다:
- Fan-out 아키텍처:SNS는 수천 개의 엔드포인트로 동시에 메시지를 전송할 수 있어서, 단일 API 호출로 전체 응용 프로그램 생태계에 업데이트를 브로드캐스트할 수 있습니다.
- 다중 전송 프로토콜: 메시지를 보내는 방법이 하나뿐만은 아닙니다. SNS는 HTTP/HTTPS 엔드포인트, 이메일, SMS, 모바일 푸시 알림 및 심지어 SQS 큐를 구독 엔드포인트로 지원합니다.
- 메시지 필터링: 모든 구독자가 모든 메시지를 필요로 하는 것은 아닙니다. 메시지 필터링을 통해 구독자는 관심 있는 메시지만 수신하도록 필터 정책을 만들어 노이즈와 처리 오버헤드를 줄일 수 있습니다.
- 메시지 아카이빙: 모든 전송된 알림의 기록을 유지해야 하는 경우, SNS는 메시지 아카이빙을 위해 Amazon S3와 분석을 위해 Amazon Redshift와 통합됩니다.
- 배송 상태 추적: 알림의 배송 상태를 모니터링하여 목적지에 도달하는지 확인할 수 있습니다. 이는 SMS 및 모바일 푸시 알림의 경우 배송이 보장되지 않을 때 특히 유용합니다.
- 암호화: SNS의 서버 측 암호화 지원으로 민감한 데이터가 보호되어 메시지가 전송 중에도 기밀 유지됩니다.
하지만 SNS의 가장 좋은 점은확장성입니다. SNS는 자동으로 응용 프로그램의 요구에 따라 확장됩니다. 하루에 10개 또는 1000만 개의 알림을 보내더라도 서비스는 수동 개입 없이 자동으로 조정됩니다.
다음으로, SNS 설정 방법을 보여드리겠습니다.
AWS SNS 설정하기
SNS로 첫 번째 알림을 보내려면 모든 것을 갖추기 위해 몇 가지 설정 단계를 따라야 합니다.
단계 1: AWS 계정 생성
이미 AWS 계정이 없는 경우 SNS를 사용하기 전에 계정을 생성해야 합니다.
AWS 홈페이지로 이동하여 AWS 계정 만들기 버튼을 클릭하세요. 오른쪽 상단에 위치한 이 버튼을 클릭하면 이메일 주소를 제공하고 비밀번호를 생성하며 기본 계정 정보를 입력해야 합니다. AWS는 신용 카드 정보도 요청할 것입니다. 걱정하지 마세요, SNS는 매우 관대한 무료 티어를 제공하며 그 한도를 초과하지 않는 한 요금이 청구되지 않을 것입니다.
계정이 설정되면 더 진행할 준비가 되었습니다. 그러나 루트 계정 대신 전용 IAM 사용자를 생성하는 것을 강력히 권장합니다. 이는 오늘의 기사 범위를 벗어난 내용이지만, 상세한 지침은 공식 안내서를 참조하십시오.
단계 2: AWS 관리 콘솔에서 SNS 설정
AWS 계정이 있으므로 이제 SNS 서비스에 액세스할 시간입니다.
자격 증명으로 AWS 관리 콘솔에 로그인하고 SNS를 찾으세요. 세 가지 방법으로 할 수 있습니다:
어떤 방법을 선택하든, 보게 될 화면은 다음과 같습니다:
이미지 1 – AWS SNS 서비스 페이지
SNS 대시보드에 들어가면 왼쪽에 “주제,” “구독,” “모바일” 등의 옵션이 있는 메뉴가 표시됩니다. 대시보드에서는 SNS 자원과 최근 활동을 개요로 확인할 수 있습니다.
새 계정으로는 이 곳이 꽤 비어 있을 것입니다 — 이는 예상대로입니다. 이제 첫 번째 SNS 주제를 생성해 봅시다.
단계 3: SNS 주제 생성
SNS 주제는 기본적으로 발행자가 메시지를 보내고 구독자가 수신하는 통신 채널입니다.
라디오 방송국과 같다고 생각해 보세요 – 방송국은 특정 주파수(주제)로 방송을 하며, 해당 주파수에 튜닝된 모든 사람이 방송을 수신합니다. SNS 용어로 말하면, 여러분의 애플리케이션은 주제에 메시지를 발행하고 해당 주제에 구독된 모든 엔드포인트가 그 메시지를 수신합니다.
첫 번째 SNS 주제를 만드는 방법은 다음과 같습니다:
- 이미지 1에서 보았던 화면에서 주제 이름을 입력하십시오.
- “다음 단계” 버튼을 클릭하십시오.
- 유형으로 “표준”을 선택하십시오 (FIFO 주제는 나준에 다룰 것이 있습니다).
- (선택 사항) 표시 이름을 입력하십시오. 이는 SMS 또는 이메일 구독자에게 전송된 메시지에 포함됩니다.
- 다른 설정은 일단 기본값으로 남겨두세요.
- “주제 만들기”를 클릭합니다.
텍스트보다 이미지를 선호한다면 화면이 이렇게 보일 것입니다:
이미지 2 – SNS 주제 생성
값에 만족하면 “주제 만들기” 버튼이 나타날 때까지 아래로 스크롤합니다:
이미지 3 – SNS 주제 생성 (2)
그게 다입니다! 이제 SNS 주제를 사용할 준비가 되었습니다. 주제 ARN (Amazon Resource Name)과 같은 세부 정보가 표시됩니다. 이는 주제를 고유하게 식별합니다.
이미지 4 – 주제 생성 세부 정보
새 주제는 구독할 준비가 되어 있지만 아직 그런 구독자가 없어서 발행하는 메시지는 어디로도 전송되지 않습니다. 걱정하지 마세요. 다음 섹션에서 구독자를 추가하면 해결될 겁니다.
SNS 구독자 및 구독
이전에 말했듯이, SNS 주제는 라디오 스테이션과 비슷합니다. 현재는 청취자가 없지만 메시지를 받기 위해 구독자를 추가하면 그것이 바뀔 겁니다.
무엇이 SNS 구독자인가요?
구독자는 메시지가 발행될 때 SNS 주제에서 알림을 받는 모든 엔드포인트입니다.
뉴스레터의 비유를 생각해보세요. 새로운 판본(메시지)을 발행할 때마다 모든 메일링 리스트 구독자에게 전달됩니다. SNS는 이 프로세스를 자동화하고 확장 가능하게 만들어주며, 모든 전달 로지스틱스를 처리해줍니다.
AWS는 다양한 구독자 유형을 지원하여 메시지 처리 방식에 유연성을 제공합니다. 주요 유형을 아래에 나열하겠습니다:
- 이메일 주소: 이메일 수신함으로 평문 알림을 직접 전송합니다.
- SMS 번호: 모바일 전화로 텍스트 메시지 알림을 전달합니다.
- SQS 큐:다른 AWS 서비스로 메시지를 라우팅하여 추가 처리합니다.
- 람다 함수: 알림에 대한 응답으로 서버리스 코드 실행을 트리거합니다.
- HTTP/HTTPS 엔드포인트:웹 애플리케이션 또는 API로 메시지를 보냅니다.
- 모바일 푸시: 모바일 앱으로 알림을 직접 전송합니다.
각 구독자 유형에는 고유한 장점과 사용 사례가 있습니다. 예를 들어, 이메일 및 SMS는 인간 수신자에게 적합하며, SQS 대기열 및 람다 함수는 시스템 간 통신에 더 적합합니다.
단계 1: 구독자 추가
이제 구독자가 무엇인지 이해했으니, 튜토리얼에 이메일을 사용하여 주제에 하나를 추가해 보겠습니다. 가장 간단히 설정할 수 있기 때문에 이메일을 사용하겠습니다.
SNS 주제에 이메일 구독자를 추가하는 방법은 다음과 같습니다:
- 귀하의 주제 상세 페이지(이미지 4)에서 “구독 생성” 버튼을 클릭합니다.
- “프로토콜” 드롭다운에서 “이메일”을 선택합니다.
- “엔드포인트” 필드에 알림을 받아야 하는 이메일 주소를 입력합니다.
- 다른 모든 설정은 기본값으로 유지합니다.
- “구독 생성”을 클릭합니다.
당신의 화면은 이렇게 보일 것입니다:
이미지 5 – 이메일 구독 생성
“구독 생성”을 클릭하면 AWS가 구독을 토픽에 추가하지만 “확인 대기 중” 상태가 됩니다:
이미지 6 – 확인 대기 중 상태
이것은 중요한 보안 기능입니다. AWS는 이메일 주소의 소유자가 이 통지를 받길 원하는지 실제로 확인하려고 합니다.
단계 2: 구독 확인
구독자를 추가한 후, 그들은 귀하의 SNS 토픽에서 통지를 받길 원하는지 확인해야 합니다.
AWS에서는 이메일 구독 시 지정한 주소로 자동으로 확인 이메일을 보냅니다. 수신자는 구독을 활성화하기 위해 클릭해야 할 링크가 포함된 이메일을 받게 됩니다. 이 일이 일어나기 전까지 해당 엔드포인트로 발행된 메시지는 전달되지 않습니다.
전형적인 확인 이메일은 다음과 같습니다:
이미지 7 – SNS 확인 이메일
수신자는 이메일의 “구독 확인” 링크를 클릭하기만 하면 됩니다. 그들은 구독이 활성화된 것을 확인하는 페이지로 이동하게 됩니다:
이미지 8 – 구독 확인 메시지
SMS 구독자의 경우 프로세스는 유사합니다– AWS는 확인 링크가 포함된 텍스트 메시지를 보냅니다. 수신자는 해당 링크를 따라야 합니다. HTTP/HTTPS 엔드포인트는 AWS로부터의 확인 요청에 응답해야 하지만, Lambda 함수 및 SQS 큐와 같은 AWS 리소스는 자동 확인을 위해 구성할 수 있습니다.
SNS 콘솔의 왼쪽 사이드바의 “구독” 섹션을 클릭하여 구독 상태를 확인할 수 있습니다. 확인된 구독은 “Confirmed” 상태로 표시되며, 확인을 기다리는 구독은 “Pending confirmation”으로 표시됩니다.
이미지 9 – 구독 상태
구독이 확인되면 메시지를 보내기 시작할 준비가 되었습니다! 주제에 발행된 모든 메시지는 지정된 프로토콜을 사용하여 모든 확인된 구독자에게 전달됩니다.
SNS 구독 설정은 여기까지입니다. 다음 섹션에서는 주제에 메시지를 발행하는 방법과 구독자가 올바르게 수신하는지 테스트하는 방법을 배우게 됩니다.
SNS 주제에 메시지 발행
SNS 주제를 설정하고 구독자를 추가했으므로 이제 첫 번째 알림을 보내는 시간입니다.
단계 1: 메시지 발행
AWS 콘솔을 통해 메시지를 발행하는 것이 시작하는 좋은 방법입니다.
첫 번째 메시지를 보내려면 토픽의 상세 페이지로 이동하여 오른쪽 상단의 “메시지 게시” 버튼을 클릭하십시오 (이미지 4). 이렇게 하면 메시지 게시 양식이 열리며 여기서 알림을 작성할 수 있습니다. 메시지 제목과 내용을 입력할 수 있는 필드가 표시됩니다. 제목은 선택 사항이지만 이메일 알림에 유용하며 이는 이메일 제목 줄이 됩니다.
간단한 테스트 메시지를 보내려면 다음과 같이 입력할 수 있습니다:
이미지 10 – 첫 번째 메시지 내용
메시지를 작성한 후 만족하시면 아래로 스크롤하여 양식 하단의 “메시지 게시” 버튼을 클릭하십시오:
이미지 11 – 콘솔을 통해 메시지 발행
클릭한 후 SNS가 즉시 확인된 구독자에게 메시지를 배포합니다. 이메일 구독을 설정했다면 테스트 메시지를 받아야 합니다. 수 초 내에 받는 것이 일반적입니다:
이미지 12 – 이메일로 수신된 메시지
간단히 말해서 쉬웠죠? 이제 어떻게 더 맞춤화하는지 살펴봅시다.
단계 2: SMS 및 이메일 알림 보내기
SNS를 통해 메시지가 다른 유형의 구독자에게 나타나는 방법을 맞춤화할 수 있습니다.
메시지를 게시할 때 “메시지 구조” 옵션을 볼 수 있습니다. 기본 설정은 “모든 전송 프로토콜에 대해 동일한 페이로드”로 설정되어 있어서 구독자 모두가 정확히 동일한 메시지를 받게 됩니다. 그러나 “각 전송 프로토콜에 대한 사용자 정의 페이로드”를 선택할 수도 있으며, 이를 통해 각 구독자 유형에 대해 메시지 형식을 맞춤 설정할 수 있습니다.
이메일 알림의 경우 두 가지 형식 옵션이 있습니다:
- 이메일-JSON: 이메일 엔드포인트로 원시 JSON 페이로드를 보냅니다.
- 이메일: 제목과 본문이 포함된 형식화된 이메일을 보냅니다.
이미지 13 – 페이로드 사용자 정의
SMS 알림의 경우 160자 제한이 있음을 염두에 두세요. SNS는 더 긴 메시지를 전달하지만 여러 메시지로 처리됩니다. 또한 SMS 메시지 유형을 “홍보” 또는 “거래” 중 하나로 설정할 수 있으며, 이는 전달 최적화에 영향을 줍니다:
이미지 14 – SMS 옵션
AWS 콘솔을 통해 이메일 알림을 보내고 사용자 정의하는 방법을 이제 알게 되었습니다. 다음으로, CLI 및 Python을 통해 동일한 작업을 수행하는 방법을 배우게 됩니다.
단계 3: AWS CLI 또는 SDK를 사용하여 메시지 게시
콘솔은 수동 테스트에 좋지만, 실제로는 메시지를 프로그래밍 방식으로 발행하고 싶을 것입니다.
AWS Command Line Interface (CLI)를 사용하면 터미널이나 자동화 스크립트에서 SNS 메시지를 쉽게 보낼 수 있습니다.
AWS CLI가 설치되고 구성되어 있다고 가정하고, CLI를 통해 메시지를 발행하려면 이 명령을 실행하십시오:
aws sns publish --topic-arn "sns-arn" --subject "CLI Notification" --message "Hello from the AWS CLI!"
이미지 15 – AWS CLI를 통한 메시지 발행
즉시, 이와 유사한 메시지가 받은 편지함에 표시됩니다:
이미지 16 – AWS CLI를 통한 메시지 게시 (2)
더 고급화된 응용프로그램을 위해 AWS SDK는 다양한 프로그래밍 언어로 SNS에 프로그래밍 방식의 액세스를 제공합니다.
다음은 boto3
라이브러리를 사용하여 Python으로 메시지를 게시하는 간단한 예시입니다:
import boto3 # SNS 클라이언트 초기화 sns_client = boto3.client("sns", region_name="eu-central-1") # 토픽 ARN (Amazon Resource Name) topic_arn = "sns-arn" # 간단한 메시지 게시 response = sns_client.publish( TopicArn=topic_arn, Message="Hello from Python!", Subject="Python Notification" ) # 메시지 전송이 성공적으로 완료되었는지 확인 if "MessageId" in response: print(f"Message published successfully! Message ID: {response['MessageId']}")
이미지 17 – Python SDK를 통한 메시지 게시
한 번 더, 메시지는 즉시 제 메일함으로 전달됩니다:
이미지 18 – Python SDK를 통한 메시지 발행 (2)
SNS를 사용하여 메시지를 발행하는 것이 전부입니다! 이제 간단한 콘솔 인터페이스부터 AWS CLI 또는 SDK를 사용한 프로그래밍적 발행까지 다양한 방법으로 알림을 보낼 수 있습니다.
> AWS Boto를 처음 사용하시나요? 당신이 빠르게 숙달할 수 있도록 저희 강의에 등록하세요.
다음 섹션에서는 알림을 더욱 발전시킬 SNS의 고급 기능을 살펴볼 것입니다.
고급 SNS 기능
지금까지 SNS의 기본을 배웠습니다. 이번 섹션에서는 SNS를 진정으로 강력하게 만드는 몇 가지 고급 기능을 살펴볼 것입니다.
SNS 메시지 필터링
모든 가입자에게 동일한 알림을 보내면 종단점이 관심 없는 메시지를 수신하는 경우가 많습니다.
메시지 필터링은 메시지 속성을 기반으로 받는 메시지를 필터링할 수 있도록 하여 이 문제를 해결합니다. 이는 이메일 필터를 설정하는 것과 유사합니다. 통과할 메시지를 결정하는 규칙을 생성합니다. SNS에서 이러한 규칙을 필터 정책이라고 합니다.
먼저 구독에 필터 정책을 설정하여 관련 메시지만 수신하도록 할 수 있습니다:
이미지 19 – 알림 필터 정책
이 예에서 구독자는 속성 order_value
가 숫자 값 1500 이상인 메시지에 대해서만 알림을 받게 됩니다.
이제 이러한 알림을 보내려면 다음과 같은 Python 코드를 사용할 수 있습니다:
import boto3 # SNS 클라이언트 초기화 sns_client = boto3.client("sns", region_name="eu-central-1") # 주제 ARN (Amazon Resource Name) topic_arn = "arn:aws:sns:eu-central-1:105036517833:TestTopic" response = sns_client.publish( TopicArn=topic_arn, Message="A new high-value order has been placed", Subject="New Order Notification", MessageAttributes={ "order_value": {"DataType": "Number", "StringValue": "2000"}, "region": {"DataType": "String", "StringValue": "EU"}, "category": {"DataType": "String", "StringValue": "Electronics"}, }, ) print(response)
Python 스크립트를 실행한 후에는 다음을 볼 수 있습니다:
이미지 20 – Python을 통한 알림 보내기
Only if주문 가치가 1500 이상인 경우에만 알림을 받게 됩니다:
이미지 21 – 알림 내용
간단히 말해, 필터 정책을 사용하면 발행 코드를 변경하지 않고도 대상 알림을 보낼 수 있습니다. 가장 좋은 점은 필터링이 AWS 측에서 발생하여 응용 프로그램이 아닌 효율성을 향상시키고 불필요한 트래픽을 줄입니다.
SNS 데드 레터 큐 (DLQ)
가장 믿을 수 있는 시스템조차 때로는 메시지 전달에 실패할 수 있습니다.
데드 레터 큐(DLQ)는 특별한 Amazon SQS 큐로, SNS가 구독자에게 전달할 수 없는 메시지를 보낼 수 있는 곳입니다. 일반적으로 구독자가 사용 불가능하거나 오류가 발생했을 때 발생합니다. 이러한 실패한 메시지를 영구적으로 손실하지 않고, SNS는 이를 DLQ로 리디렉션하여 나중에 분석하거나 재전송할 수 있습니다.
DLQ 설정에는 두 단계가 필요합니다. 먼저 DLQ로 사용할 SQS 큐를 만듭니다:
이미지 22 – SQS 큐 생성
그런 다음, SNS 구독을 구성하여 전달할 수 없는 메시지에 대해이 큐를 사용하도록 설정합니다:
이미지 23 – SQS 큐에 대한 재전송 정책 추가
이 구성은 SNS가 SQS 대기열로 메시지를 보낼 수 있어야 하므로 올바른 권한이 필요합니다. AWS 콘솔에서는 간단한 확인란을 통해이를 설정할 수 있지만 CloudFormation이나 다른 인프라스트럭처 코드 도구를 사용하는 경우 적절한 IAM 권한을 추가해야 합니다.
DLQ가 설정되어 있으면 전달 실패를 모니터링하고 필요할 때 조치를 취할 수 있습니다. 예를 들어 DLQ에 메시지가 표시되기 시작할 때 트리거되는 경보를 설정하여 구독자에게 문제가 있음을 알려줄 수 있지만 이 내용은 이 섹션의 범위를 벗어납니다.
AWS Lambda와 SNS 사용
람다 함수를 사용하면 SNS 메시지를 처리하는 데 다양한 가능성이 열립니다.
람다 함수를 SNS 주제에 구독하면 메시지가 게시될 때마다 함수가 자동으로 트리거됩니다. 람다의 서버리스 접근 방식은 메시지 양에 따라 자동으로 스케일되므로 메시지 처리를 위한 인프라를 관리할 필요가 없습니다.
먼저 람다 함수를 만들어보세요:
이미지 24 – 람다 함수 만들기
그런 다음 다음과 유사한 코드로 채워 넣으세요:
def lambda_handler(event, context): # SNS 메시지는 'Records' 배열에 들어옵니다 for record in event["Records"]: # 메시지 추출 message = record["Sns"]["Message"] subject = record["Sns"]["Subject"] timestamp = record["Sns"]["Timestamp"] # 메시지 처리 print(f"Received message: {message}") print(f"Subject: {subject}") print(f"Timestamp: {timestamp}") # 여기에 비즈니스 로직 입력 # 예를 들어, 메시지를 데이터베이스에 저장 # 또는 다른 AWS 서비스를 트리거 print("ALL DONE!") # 성공 반환 return {"statusCode": 200, "body": "Message processed successfully"}
이미지 25 – 람다 함수 코드
코드 작성이 완료되면 “트리거 추가” 버튼을 클릭하여 람다 함수를 SNS에 연결하세요:
이미지 26 – SNS를 람다에 연결
함수가 현재 큐에 연결되어 있으므로 테스트 알림을 보낼 수 있습니다:
이미지 27 – 테스트 알림
람다 함수를 사용하면 로그를 모니터링할 수 있어서 최근 함수 호출 결과, 즉 알림 전송 결과를 볼 수 있습니다:
이미지 28 – 람다 함수 로그
람다 함수는 이러한 메시지로 거의 모든 작업을 수행할 수 있습니다 – 데이터베이스에 저장하거나 다른 AWS 서비스를 트리거하거나 이메일을 보내거나 외부 API를 호출할 수도 있습니다. 이로써 SNS 및 람다는 이벤트 기반 아키텍처를 구축하는 데 강력한 조합이 됩니다. 람다 함수에 대해 더 알아보려면 AWS Lambda 시작하기 자습서를 참조하세요.
다음으로, SNS 모니터링 및 로깅에 대해 기본적인 내용을 배우게 됩니다.
SNS 활동 모니터링 및 로깅
당신의 SNS 활동을 추적하는 것은 신뢰할 수 있는 알림 시스템을 유지하는 데 중요합니다.
Amazon CloudWatch 및 SNS 사용
Amazon CloudWatch는 모든 AWS 서비스 및 SNS를 포함한 포괄적인 모니터링을 제공합니다. CloudWatch를 SNS와 함께 설정하면 메시지 전달률, 실패 및 API 사용 패턴과 같은 중요한 운영 메트릭스를 볼 수 있습니다.
SNS에 대한 CloudWatch 모니터링을 시작하려면 AWS 계정의 CloudWatch 콘솔로 이동하십시오. 거기서 AWS가 자동으로 수집하는 미리 구성된 SNS 메트릭스에 액세스할 수 있습니다.
모니터링해야 하는 가장 중요한 SNS 메트릭스는 다음과 같습니다:
- 메시지발행수: 토픽에 발행된 메시지 수를 추적합니다.
- 알림전달수: 구독자에게 성공적으로 메시지를 전달한 횟수를 보여줍니다.
- 전달실패수: 구성 문제를 나타낼 수 있는 전달 실패 시도를 강조합니다.
- 게시 크기: 게시된 메시지의 크기를 측정하여 서비스 제한 내에 유지할 수 있도록 도와줍니다.
이미지 29 – SNS를 위한 기본 CloudWatch 대시보드
CloudWatch 경보를 설정하면 사용자에 영향을 미치기 전에 잠재적인 문제에 신속하게 대응할 수 있습니다. 예를 들어, 메시지 전달 실패가 특정 임계값을 초과할 때 트리거되는 경보를 만들고 싶을 수 있습니다:
- CloudWatch 콘솔에서 “경보” 섹션으로 이동합니다.
- “알람 만들기”를 클릭하고 모니터링하려는 SNS 지표를 선택합니다.
- 임계값을 정의합니다(예: 5분 내에 5번 이상의 전달 실패).
- 운영 팀에 경고를 보내는 등의 알림 작업을 구성합니다.
지시사항보다 이미지를 선호하는 경우, NumberOfNotificationsFailed
와 같은 관심 있는 지표에 대한 알람을 만들기 시작합니다. 알람을 활성화할 임계값을 설정합니다:
이미지 30 – 알람 생성
이제 알람이 만들어지고 활성화되었습니다:
이미지 31 – 알람 생성 (2)
이러한 알람은 문제에 대해 선행적으로 대응하고 불만족한 사용자로부터 알게 되는 것 사이의 차이를 만들 수 있습니다.
SNS 로그 검토
AWS CloudTrail은 AWS 계정 내에서 SNS 서비스 내에서 취해진 모든 API 활동을 캡쳐합니다.
콘솔, CLI 또는 SDK를 통해 수행된 SNS 주제에 대한 모든 작업은 CloudTrail 로그에 항목을 생성합니다. 이러한 로그는 보안 분석, 리소스 변경 추적 및 규정 준수 감사에 유용한 정보를 제공합니다.
CloudTrail에서 SNS 로그에 액세스하려면:
- AWS 계정에서 CloudTrail 콘솔을 열어보세요 (새로운 트레일을 만들어야 할 것입니다).
- “이벤트 기록”으로 이동하여 최근 SNS 활동을 확인하세요.
- 이벤트를 필터링하려면 “이벤트 소스”를 선택하고 “sns.amazonaws.com”을 입력하세요.
텍스트 지침만으로 충분하지 않다면 아래 이미지를 참조하세요. 먼저 새로운 트레일을 만들어보세요:
이미지 32 – 새로운 트레일 생성
그런 다음 “이벤트 기록”에서 SNS에 대한 이벤트만 필터링하세요:
이미지 33 – 로그 필터링
로그는 자동으로 S3 버킷에 저장되므로 이 접근 방식은 로그에 대한 영구적인 저장을 제공하고 더 고급 질의 기능을 활성화합니다.
> AWS에서 저장소는 어떻게 동작합니까? S3 및 EFS에 대한 가이드를 읽어보세요.
결론적으로 CloudWatch 메트릭과 CloudTrail 로그를 결합하여 SNS 인프라가 안정적으로 작동하도록 보장하는 포괄적인 모니터링 시스템을 만들 수 있습니다.
AWS SNS 사용에 대한 모범 사례
AWS SNS의 기본 및 고급 기능을 알게 되었습니다. 이제 남은 것은 주제를 생성하고 메시지를 보내는 데 최적의 사례를 논의하는 것입니다.
SNS 주제 보안
SNS 인프라를 설정할 때 보안은 최우선 과제여야 합니다. 적절한 제어가 없으면 주제는 무단 액세스의 취약점이 될 수 있으며, 이는 막대한 보안 위험입니다.
AWS Identity and Access Management (IAM)은 SNS 주제를 보호하는 데 필요한 도구를 제공합니다. 각 사용자 또는 서비스에 필요한 구체적인 권한만 부여하는 최소 권한 원칙을 따르는 정책을 생성하여 시작하세요. 예를 들어, 일부 애플리케이션이 메시지를 발행하는 데만 필요한 경우도 있고, 다른 애플리케이션이 주제를 구독하는 데만 필요한 경우도 있을 수 있습니다.
다음은 특정 주제에 대한 발행을 제한하는 샘플 IAM 정책입니다.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "sns:Publish", "Resource": "sns-arn" } ] }
또한 주제 정책을 사용하여 어떤 AWS 계정이 주제를 구독할 수 있는지 제어할 수도 있습니다. 특히 조직적 경계를 넘어 데이터를 공유하는 경우에 이 기능은 매우 중요합니다.
AWS CloudTrail을 사용하여 정기적으로 권한을 감사하고 더 이상 필요하지 않은 액세스를 제거하는 것을 잊지 마십시오.
메시지 양 관리
높은 메시지 양은 적절히 처리되지 않으면 구독자들을 압도할 수 있습니다. 이것은 다른 AWS 서비스와 SNS를 결합하는 것이 필수적인 곳입니다.
인기 있는 패턴 중 하나는 “팬아웃” 아키텍처입니다. 여기서는 다수의 SQS 대기열이 구독된 SNS 주제에 메시지를 발행합니다. 각 대기열은 자체 속도로 다른 처리 시스템으로 공급할 수 있습니다. 이렇게 함으로써 발행자와 소비자를 분리하고 트래픽 증가 시 버퍼를 제공합니다.
실시간 처리 요구 사항의 경우, 람다 함수를 주제에 구독하는 것을 고려하십시오. 람다는 메시지 양에 따라 자동으로 확장되므로 서버를 프로비저닝하고 관리할 필요가 없어집니다.
비용 절감
SNS는 비용 효율적이지만 메시지 양이 증가함에 따라 비용이 빠르게 누적될 수 있습니다. 몇 가지 전략적 선택은 비용을 효과적으로 관리하는 데 도움이 될 수 있습니다.
먼저, 구독 프로토콜을 신중하게 선택하세요. HTTP/HTTPS 엔드포인트가 일반적으로 가장 비용 효율적인 옵션입니다. 편리하지만 메시지 당 높은 비용이 발생하는 이메일 알림은 신중하게 사용해야 합니다.
메시지 필터링은 또 다른 강력한 비용 절감 도구입니다. 구독에 필터 정책을 구현함으로써 메시지가 관심 있는 구독자에게만 전달되도록합니다. 예를 들어, 모든 시스템 경고에 대한 주제가 있는 경우 근무 중인 엔지니어들이 교대 근무 중에 중요한 경고만 받도록하려면 모든 알림이 아닌 필수 알림만 받도록하려면:
# 필터 정책으로 구독하기 response = sns.subscribe( TopicArn="sns-arn", Protocol="email", Endpoint="[email protected]", Attributes={"FilterPolicy": '{"severity": ["critical"]}'}, )
마지막으로, AWS 비용 탐색기에서 SNS 사용량을 정기적으로 검토하고 주제를 통합하거나 사용되지 않는 구독을 제거할 기회를 찾으세요. 사용되지 않는 또는 중복된 리소스는 불필요한 비용뿐만 아니라 아키텍처를 복잡하게 만듭니다.
이러한 모범 사례를 따르면 안전하고 확장 가능하며 비용 효율적인 SNS 구현을 만들 수 있습니다 – 예상치 못한 비용이나 보안 문제 없이 신뢰할 수 있는 알림 서비스를 구축할 수 있습니다.
AWS SNS 요약
분산된 애플리케이션 간 실시간 알림이 필요하다면 AWS SNS를 사용해보세요. 사용하기 쉽고 다른 AWS 서비스와 원활하게 통합되며 필요에 맞게 무한정으로 확장됩니다.
SNS의 게시-구독 모델을 사용하면 여러 채널에 동시에 도달할 수있는 통지 시스템을 구현하기가 간단해집니다. 주제를 생성하고 구독자를 관리하여 메시지 필터링 및 데드 레터 큐와 같은 고급 기능을 구현하는 것으로, 이제 탄탄한 통지 인프라를 구축할 지식이 생겼습니다.
모니터링, 보안 및 비용 관리의 중요한 측면에 대해 학습했으므로 SNS 구현이 생산 환경에서 신뢰성 있고 효율적으로 유지되도록 할 수 있습니다.
응용 프로그램이 이벤트 주도 아키텍처를 계속 채택함에 따라 SNS와 같은 서비스가 점점 가치 있어집니다. 간단한 경고 시스템이나 복잡한 마이크로서비스를 구축하든, 이 자습서의 패턴은 시스템 구성 요소 간의 효과적인 통신을 위한 기초를 제공합니다.
AWS에 대해 더 알아보려면 DataCamp의 다음 코스를 따르십시오:
데이터캠프를 활용하여 AWS 자격증 시험을 준비할 수도 있습니다 – AWS 클라우드 실무자 (CLF-C02).