이 자습서에서는 Amazon Simple Notification Service(SNS)의 메시지 필터링 기능을 활용하는 방법을 배웁니다. 메시지 필터 기능을 사용하면 SNS 주제에 구독한 엔드포인트가 관심 있는 주제 메시지의 하위 세트만 수신할 수 있습니다.

예제에서 사용자는 웹 사이트로 이동하여 보험 견적을 요청하게 됩니다. 이러한 견적 요청은 자동차 보험, 선박 보험 또는 생명 보험일 수 있습니다. 보험 견적이 요청되면, 해당 요청은 일련의 백엔드 시스템으로 전달됩니다. 차량 및 선박의 자동차 보험을 취급하는 판매 시스템, 생명 보험을 취급하는 다른 판매 시스템 및 모든 견적 요청을 처리해야 하는 분석 시스템이 있습니다.

팬아웃 이벤트 알림 전송 자습서를 학습했으므로 SNS 및 SQS를 사용하는 팬아웃 메시징 패턴을 사용하여 웹 사이트와 백엔드 시스템을 분리합니다. 해당하는 백엔드 시스템에 이벤트 알림이 수신되려면, 각 유형의 견적 요청에 대한 별도의 주제를 생성한 후 메시지 라우팅 로직을 게시자에 추가할 수 있습니다. 그러나 이 방법을 사용하면 게시자가 매우 복잡해지고 주제가 급증하며 SNS 주제 프로비저닝 및 관리에서 추가적인 오버헤드가 발생하게 됩니다. SNS 메시지 필터링이 훨씬 더 간편합니다!

이 자습서에서는 Amazon SNS와 Amazon Simple Queue Service(SQS)를 사용하도록 하겠습니다. 두 서비스는 AWS 프리 티어에 포함됩니다.

 

AWS에서 메시지를 필터링하려면 계정 필요

무료 계정 생성

AWS 프리 티어에는 Amazon Simple Notification Service의 게시 1백만 건과 Amazon Simple Queue Service의 요청 1백만 건이 포함되어 있습니다.

AWS 프리 티어 세부 정보 보기 »

 

1단계는 Amazon SNS 주제를 생성하여 보험 웹 사이트에 견적이 요청될 때마다 메시지를 게시하는 것입니다. 이러한 견적 요청은 자동차 보험, 선박 보험 또는 생명 보험과 관련된 것일 수 있습니다.  


a. 여기를 클릭하면 AWS Management Console이 새 브라우저 창에서 열리므로 이 단계별 안내서를 계속 열어 놓을 수 있습니다. 이 화면이 로드되면 먼저 사용자 이름 및 암호를 입력하여 시작합니다. 그런 다음 검색 창에 notification을 입력하고 Simple Notification Service를 선택하여 서비스 콘솔을 엽니다.

tmt_filter-messages-sent-to-topics_1a

(확대하려면 클릭)

tmt_filter-messages-sent-to-topics_1a

b.  SNS 콘솔 랜딩 페이지가 표시되면 [개요로 시작하기]를 클릭합니다. 이 페이지가 표시되지 않으면, 다음 단계로 이동합니다.

1b-console-home

(확대하려면 클릭)

1b-console-home

c.  왼쪽 메뉴에서 [주제]를 클릭합니다.

1c-create-topic-nav-open

(확대하려면 클릭)

1c-dashboard

d.  [주제 생성]을 클릭합니다.

 

1d-No-topics

(확대하려면 클릭)

1d-No-topics

e.  [주제 이름] 필드에 Insurance-Quote-Requests를 입력한 다음 스크롤을 내리고 [주제 생성]을 클릭합니다.

 

1e-create-topic-nav-closed

(확대하려면 클릭)

1e-create-topic-nav-closed

f.  주제 세부 정보 페이지에 새 주제가 표시됩니다.

 

1f-topic-insurence-quote-request-created-success

(확대하려면 클릭)

1f-topic-insurence-quote-request-created-success

각 보험 판매 시스템은 SNS 주제를 구독하는 해당 SQS 메시지 대기열에서 견적 요청을 폴링합니다.

첫 번째 대기열은 자동차 및 선박 보험 견적 요청을 모두 처리하며, 두 번째 대기열은 생명 보험 견적을 처리하고, 세 번째 대기열은 모두를 처리합니다. 세 번째 대기열은 보험 유형에 관계없이 모든 견적을 처리하여 분석 시스템에 정보를 제공합니다. 이러한 기본 설정은 SNS 구독의 필터 정책으로 설정됩니다.

이 단계에서는 대기열 3개를 생성하고 각각이 SNS 주제를 구독하도록 합니다.


a. 여기를 클릭하여 새 브라우저 창에서 Amazon SQS 콘솔을 엽니다. SQS 랜딩 페이지가 나타나면 Get Started Now를 클릭합니다. 그렇지 않으면 다음 단계로 진행합니다.

 

tmt_filter-messages-sent-to-topics_2a

(확대하려면 클릭)

tmt_filter-messages-sent-to-topics_2a

b.  새 대기열 생성 페이지의 [대기열 이름] 필드에 Vehicle-Insurance-Quotes를 입력합니다.

Standard Queue를 선택된 상태로 두고 Quick-Create Queue를 클릭합니다.

 

tmt_filter-messages-sent-to-topics_2b

(확대하려면 클릭)

tmt_filter-messages-sent-to-topics_2b

c.  [새 대기열 생성]을 클릭한 다음 2b단계를 반복하여 다음과 같은 대기열을 추가로 2개 생성합니다.
Life-Insurance-Quotes
All-Quotes.

 

tmt_filter-messages-sent-to-topics_2c

(확대하려면 클릭)

tmt_filter-messages-sent-to-topics_2c

d.  이제 대기열 3개가 모두 SQS 콘솔에 나열되었습니다.

 

tmt_filter-messages-sent-to-topics_2d

(확대하려면 클릭)

tmt_filter-messages-sent-to-topics_2d

Amazon SQS 대기열을 3개 생성했으므로, 이제 대기열에서 새 보험 견적 요청을 브로드캐스팅하는 Amazon SNS 주제를 구독해야 합니다.


a.  대기열 목록에서 Vehicle-Insurance-Quotes, Life-Insurance-QuotesAll-Quotes 대기열을 선택합니다.

대기열 작업에서 Subscribe Queues to SNS Topic을 선택합니다.

 

 

tmt_filter-messages-sent-to-topics_3a

(확대하려면 클릭)

tmt_filter-messages-sent-to-topics_3a

b.  Subscribe to a Topic 대화 상자가 나타납니다. 주제 선택 드롭다운 목록에서 3개의 대기열을 구독할 Insurance-Quote-Requests 주제를 선택합니다. 동일한 계정에서 SNS 주제를 생성했으므로 주제가 목록에 표시됩니다.

다른 계정으로 SNS 주제를 생성한 경우 Topic ARN을 사용하여 해당 주제를 구독할 수 있습니다. 자세한 내용은 Amazon SNS 설명서 또는 Cross-Account Integration with SNS 블로그를 참조하십시오.

 

 

tmt_filter-messages-sent-to-topics_3b

(확대하려면 클릭)

tmt_filter-messages-sent-to-topics_3b

c.  Topic Region을 변경하지 않은 채로 Subscribe를 클릭합니다.  

 

 

tmt_filter-messages-sent-to-topics_3c

(확대하려면 클릭)

tmt_filter-messages-sent-to-topics_3c

d.  Topic Subscription Result 대화 상자가 표시됩니다. OK를 클릭합니다.

tmt_filter-messages-sent-to-topics_3d

(확대하려면 클릭)

tmt_filter-messages-sent-to-topics_3d

모든 SNS 및 SQS 리소스가 생성되었으므로, 이제 필터 정책을 SNS 구독에 적용할 준비가 되었습니다. 필터 정책은 SNS 구독의 속성으로 설정된 간단한 JSON 문서로, 구독자가 관심이 있는 알림의 유형을 정의합니다.

필터 정책이 없는 구독의 경우 SNS 주제에 게시되는 모든 메시지가 수신되므로 이러한 경우에는 모든 견적 대기열에 필터링 정책을 설정할 필요가 없습니다.


a.  다른 브라우저 창의 Amazon SNS 콘솔로 돌아가 [주제]를 클릭하여 리전 내에서 전체 주제 목록을 찾습니다.

목록에서 Insurance-Quote-Requests 주제 이름을 클릭합니다.  

4a-topic-list

(확대하려면 클릭)

4a-topic-list

b.  그러면 Insurance-Quote-Requests 주제 세부 정보 페이지로 이동되어 이 SNS 주제를 구독하고 있는 모든 SQS 대기열을 확인할 수 있습니다. Vehicle-Insurance-Quotes 대기열을 선택한 다음 [편집]을 클릭합니다.

4b-topic-detail-insurance-quote-request

(확대하려면 클릭)

4b-topic-detail-insurance-quote-request

c.  그러면 구독 편집 페이지로 이동됩니다. 화살표를 클릭하여 구독 필터 정책을 편집합니다. 

4c-edit-sub-insurance-quote-request

(확대하려면 클릭)

4c-edit-sub-insurance-quote-request

d.  표시되는 대화 상자에 {"insurance_type": ["car", "boat"]} JSON 객체를 입력합니다.

[변경 사항 저장]을 클릭합니다.

4d-topic-edit-filter-car-boat

(확대하려면 클릭)

4d-topic-edit-filter-car-boat

e.  구독 필터 정책이 생성되었음을 확인하는 확인 대화 상자가 표시됩니다.

 

4e-sub-saved-success

(확대하려면 클릭)

4e-sub-saved-success

f.  이제 절차를 반복하여 두 번째 대기열에 필터 정책을 추가합니다. Life-Insurance-Quotes 대기열을 선택하고 [편집]을 클릭합니다.

화살표를 클릭하여 구독 필터 정책을 편집합니다.

표시되는 대화 상자에 {"insurance_type": ["life"]} JSON 객체를 입력합니다.

[변경 사항 저장]을 클릭합니다.

All-Quotes 대기열과 관련한 구독에는 필터 정책을 설정할 필요가 없습니다. 정책을 설정하지 않음으로써 이 대기열은 주제에 게시되는 모든 이벤트를 수신할 수 있습니다.

4f-topic-edit-filter-life

(확대하려면 클릭)

4f-topic-edit-filter-life

테스트해보겠습니다! 이 단계에서는 메시지를 주제로 게시하여 잠재 고객 창출 웹 사이트로부터 유입되는 신규 보험 견적 요청을 시뮬레이션해보겠습니다.

다양한 속성의 메시지를 게시하여 Amazon SNS의 메시지 필터링이 실제로 작동하는 방법에 대해 알아보십시오.


a.  Insurance-Quote-Requests 주제 페이지에서 [메시지 게시]를 클릭합니다.

5a-topic-detail-with-3subs-2

(확대하려면 클릭)

5a-topic-detail-with-3subs-2

b.  양식에 다음 값을 입력하여 첫 번째 메시지를 생성합니다.

제목에 Insurance Quote Request #1을 입력합니다.

메시지 구조에서 Identical payload for all delivery protocols를 선택한 상태로 유지합니다.

엔드포인트로 전송할 메시지 본문에 다음 텍스트를 입력하여 자동차 보험 견적 요청임을 나타냅니다.
2017 Volvo S60, Montreal

메시지 속성에서 다음을 수행합니다.

  • [유형] 필드에서 [문자열]을 선택합니다.
  • [이름] 필드에 insurance_type을 입력합니다.
  • [] 필드에 car를 입력합니다.

Publish message를 클릭합니다.

5b-publish-message-montreal-address

(확대하려면 클릭)

5b-publish-message-montreal-address

c.  Insurance-Quote-Requests 주제 페이지로 이동됩니다. [메시지 게시]를 다시 클릭하고 다음 값을 사용하여 두 번째 메시지를 생성합니다.

제목Insurance Quote Request #2를 입력합니다.

메시지 구조에서 Identical payload for all delivery protocols를 선택한 상태로 유지합니다.

엔드포인트로 전송할 메시지 본문에 다음 텍스트를 입력하여 자동차 보험 견적 요청임을 나타냅니다.
Male, 33 years old, Vancouver

메시지 속성에서 다음을 수행합니다.

  • [유형] 필드에서 [문자열]을 선택합니다.
  • [이름] 필드에 insurance_type을 입력합니다.
  • [] 필드에 life를 입력합니다.

Publish message를 클릭합니다.

5c-publish-message-male33

(확대하려면 클릭)

5c-publish-message-male33

d.  Insurance-Quote-Requests 주제 페이지로 이동됩니다. [메시지 게시]를 다시 클릭하고 다음 값을 사용하여 두 번째 메시지를 생성합니다.

제목Insurance Quote Request #3을 입력합니다.

메시지 구조에서 Identical payload for all delivery protocols를 선택한 상태로 유지합니다.

엔드포인트로 전송할 메시지 본문에 다음 텍스트를 입력하여 자동차 보험 견적 요청임을 나타냅니다.
Townhouse, 1500 sq ft, Toronto

메시지 속성에서 다음을 수행합니다.

  • [유형] 필드에서 [문자열]을 선택합니다.
  • [이름] 필드에 insurance_type을 입력합니다.
  • [] 필드에 home을 입력합니다.

Publish message를 클릭합니다.

5d-publish-message-toronto-address

(확대하려면 클릭)

5d-publish-message-toronto-address

이제 수행된 메시지 전달을 조사하여 각 유형의 보험 견적 요청이 해당하는 SQS 메시지 대기열로 전달되었는지 확인해야 합니다.

해당 SNS 구독에 이러한 유입 메시지의 속성과 일치하는 필터 정책이 있는 경우에만 구독 중인 Amazon SQS 대기열에 메시지가 전달된 것을 확인할 수 있어야 합니다.

또한, 특히 대기열 1개는 실제로 주제에 게시된 모든 메시지를 수신해야 합니다. 왜냐하면 이 구독은 필터 정책 설정되지 않아 모든 동작을 수신해야 하기 때문입니다.


a.  Amazon SQS 콘솔로 이동 Vehicle-Insurance-Quotes 대기열을 선택하고 [대기열 작업]을 클릭합니다.

[메시지 보기/삭제]를 선택합니다.  

tmt_filter-messages-sent-to-topics_6a

(확대하려면 클릭)

tmt_filter-messages-sent-to-topics_6a

b.  [메시지 폴링 시작]을 선택합니다.

자동차 보험 견적과 관련해서는 1개의 메시지(Insurance Quote Request #1)만 이 대기열에 게시되었음에 유의하십시오. 대화 상자를 선택합니다.

tmt_filter-messages-sent-to-topics_6b

(확대하려면 클릭)

tmt_filter-messages-sent-to-topics_6b

c.  두 번째 대기열에서도 절차를 반복합니다. Life-Insurance-Quotes 대기열의 상자를 선택합니다. 대기열 작업 드롭다운 목록에서 View/Delete Messages를 선택합니다.

[메시지 폴링 시작]을 선택합니다.

생명 보험 견적과 관련해서는 다른 메시지(Insurance Quote Request #2)가 이 대기열에 푸시되었음에 유의하십시오.

[닫기]를 클릭합니다.

tmt_filter-messages-sent-to-topics_6c

(확대하려면 클릭)

tmt_filter-messages-sent-to-topics_6c

d.  마지막으로, All-Quotes 대기열의 상자를 선택합니다. [대기열 작업]을 클릭하고 [메시지 보기/삭제]를 선택한 다음 [메시지 폴링 시작]을 클릭합니다.

이 대기열에는 모든 세 개의 메시지(Insurance Quote Requests #1, #2 및 #3)가 푸시되었음에 유의하십시오.

[닫기]를 클릭합니다.

tmt_filter-messages-sent-to-topics_6d

(확대하려면 클릭)

tmt_filter-messages-sent-to-topics_6d

이 단계에서는 이 자습서에서 생성한 주제, 구독, 대기열 등의 리소스를 삭제합니다. 더 이상 사용하지 않는 리소스를 삭제하여 비용이 부과되지 않도록 하는 것이 가장 좋습니다.


a.  Amazon SNS 콘솔에서 [주제]를 클릭한 다음 Insurance-Quote-Requests 주제 링크를 클릭합니다.

7a단계

(확대하려면 클릭)

7a단계

b.  Insurance-Quote-Requests 주제 세부 정보 페이지에서 각 구독을 선택한 다음 [삭제]를 클릭합니다.

대화 상자에서 [삭제]를 클릭하여 삭제를 확인합니다. 

7b-topic-detail-with-3subs

(확대하려면 클릭)

7b-topic-detail-with-3subs

c.  Insurance-Quote-Requests 주제 세부 정보 페이지에서 [삭제]를 클릭합니다.

대화 상자에 delete me를 입력하고 [삭제]를 클릭하여 삭제를 확인합니다. 

 

7c-topic-detail-no-sub

(확대하려면 클릭)

7c-topic-detail-no-sub

d.  Amazon SQS 콘솔로 이동 이 자습서에서 사용한 대기열 3개를 모두 선택하고 [대기열 작업]을 클릭한 다음 [대기열 삭제]를 클릭합니다.

대화 상자에서 삭제를 확인합니다.

tmt_filter-messages-sent-to-topics_7d

(확대하려면 클릭)

tmt_filter-messages-sent-to-topics_7d

e.  이제 AWS Management Console에서 로그아웃해도 됩니다.  

tmt_filter-messages-sent-to-topics_7e

(확대하려면 클릭)

tmt_filter-messages-sent-to-topics_7e

이제 Amazon Simple Notification Service(SNS)에서 메시지 필터링을 사용하여 더 간단하고 효율적인 게시/구독 아키텍처를 구축할 수 있습니다.

메시지 필터링을 사용하면 Amazon SNS 주제 구독자는 주제에 게시된 모든 메시지를 수신하는 대신, 원하는 메시지의 하위 집합만 선택적으로 수신할 수 있습니다. 이 새로운 접근 방식을 도입하면 구독자에게 메시지 필터링 로직을 구현하거나 게시자 시스템에 메시지 라우팅 로직을 구현하기 위한 복잡한 설계가 필요 없습니다.


Amazon Simple Notification Service를 사용하여 메시지 필터링을 구현하는 방법을 배웠으므로, 이제 다음 옵션 중 하나를 선택하여 AWS의 클라우드 메시징에 대해서 더 자세히 알아보십시오.

자세히 알아보기

Amazon Web Services(AWS)의 메시지 주제에 대한 기능, 구성 요소 및 사용 사례에 대한 개요를 살펴볼 수 있습니다.

Amazon SNS 웹 페이지로 이동 »

심화 학습

SNS 주제를 위한 메시지 필터링을 구현하는 방법을 알아보려면 개발자 안내서를 살펴보십시오.

설명서 읽기 »

실습

Python용 AWS SDK를 사용한 메시지 필터링 구현 방법을 설명하는 예시를 살펴보십시오.

블로그 읽기 »

아니요