게시/구독 패턴 - AWS 규범적 지침

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

게시/구독 패턴

플랫폼이 성장하면 서로 다른 마이크로서비스가 상호 의존성을 만들지 않고는 상호 작용하기 어려울 수 있습니다. 게시/구독 (Pub/sub) 패턴은 Amazon SQS, Lamda, Amazon Simple Storage Service(S3)와 같은 AWS 여러 서비스 간에 상호 종속성을 생성하지 않고도 비동기적으로 통신할 수 있습니다. 이 패턴에서 마이크로서비스는 구독자가 들을 수 있는 채널에 이벤트를 메시지로 게시합니다. 예를 들어 공장에서 게시/구독 패턴을 사용하여 장비가 문제나 장애를 채널에 게시하도록 하면 구독자가 이러한 장비 문제를 표시하고 기록할 수 있습니다.

다음과 같은 경우에는 이 패턴을 사용하는 것이 좋습니다:

  • 이벤트 기반 아키텍처를 사용하고 있습니다.

  • 느슨하게 결합된 아키텍처를 활성화할 수 있습니다.

  • 호출 시스템에 대한 응답 전에 트랜잭션의 모든 작동 부분을 완료할 필요는 없습니다 (특정 작업은 비동기적일 수 있음).

  • 기존 데이터 센터의 용량을 넘어서는 볼륨으로 확장해야 합니다. 이러한 수준의 확장성은 주로 병렬 운영, 메시지 캐싱, 트리 기반 라우팅 및 기타 기능이 게시/구독 모델에 내장되어 있기 때문입니다.

    이 패턴을 사용하면 몇 가지 단점이 있습니다. 예를 들어, 게시/구독 패턴은 일반적으로 모든 구독자 유형에 대한 메시지 전송을 보장할 수 없지만 Amazon Simple Notification Service(SNS)와 같은 특정 서비스는 일부 구독자 하위 집합에 정확히 한 번만 메시지를 전송할 수 있습니다. 또 다른 단점은 구독자가 채널을 청취하고 있다고 가정할 수 있는데 실제로는 그렇지 않다는 것입니다.

사용 사례

이 사용 사례에서는 SNS 주제를 사용하여 보험 시스템의 여러 종속 마이크로서비스에 이벤트를 게시합니다. 고객이 월별 결제를 완료한 후에는 “고객” 또는 “판매”와 같은 하위 시스템에서 정보를 업데이트하고 결제 확인이 포함된 이메일을 고객에게 보내야 합니다. 이 패턴은 Amazon SNS 또는 Amazon EventBridge를 사용하여 구현할 수 있습니다.

EventBridge는 여러 구독자 간의 이벤트를 필터링합니다. EventBridge 구현은 다음 두 가지 옵션을 제공합니다:

  • 이벤트 유형이 서로 다른 세 개의 이벤트를 전송하세요. 멀리 있는 타겟이 이벤트 규칙에 따라 이벤트를 픽업합니다.

  • 동일한 이벤트 유형을 수신하는 이벤트 규칙 3개가 포함된 메시지 1개를 전송하세요. 불필요한 데이터는 특정 대상을 호출하기 전에 필터링됩니다.

Amazon SNS 구현

다음 그림은 Amazon SNS를 사용하여 게시/구독 패턴을 구현하는 방법을 보여줍니다. 사용자가 결제를 완료하면 ‘결제’ Lambda 함수를 통해 ‘결제’ SNS 주제로 SNS 메시지가 전송됩니다. 이 SNS 주제에는 메시지 사본을 수신하여 처리하는 세 명의 구독자가 있습니다.

게시/구독 패턴을 위한 Amazon SNS 구현

Amazon EventBridge 구현

다음 그림에서 EventBridge는 이벤트 규칙을 사용하여 구독자를 정의하는 게시/구독 패턴 버전을 구축하는 데 사용됩니다. 사용자가 결제를 완료하면 ‘결제’ Lambda 함수는 서로 다른 대상을 가리키는 세 가지 규칙이 있는 사용자 지정 스키마를 기반으로 하는 기본 이벤트 버스를 사용하여 EventBridge에 메시지를 보냅니다. 각 마이크로서비스는 메시지를 처리하고 필요한 작업을 수행합니다.

게시/구독 패턴을 위한 Amazon EventBridge 구현