메시지 또는 이벤트 사용 여부 선택

완료됨

분산된 음악 공유 애플리케이션의 아키텍처를 계획한다고 가정합니다. 애플리케이션이 가능한 한 안정적으로 확장성이 있는지 확인하고 Azure 기술을 사용하여 강력한 통신 인프라를 구축하려고 합니다.

올바른 Azure 기술을 선택하기 전에 애플리케이션의 구성 요소가 교환하는 각 통신을 살펴봐야 합니다. 각 통신에 서로 다른 Azure 기술을 선택할 수 있습니다.

처음 살펴봐야 할 통신 관련 내용은 메시지이벤트를 보낼지 여부입니다. 이 지식은 사용하기에 적합한 Azure 서비스를 선택하는 데 도움이 됩니다.

Azure의 통신 전략(API)

메시지란?

배포 애플리케이션의 용어에서 메시지의 특성은 다음과 같습니다.

  • 메시지에는 한 구성 요소가 생성하고 또 다른 구성 요소가 사용하는 원시 데이터가 포함됩니다.
  • 메시지에는 단지 해당 데이터에 대한 참조가 아닌 데이터 자체가 포함됩니다.
  • 발신 구성 요소는 대상 구성 요소가 특정 방식으로 메시지 콘텐츠를 처리할 것으로 예상합니다. 전체 시스템 무결성은 특정 작업을 수행하는 발신자와 수신자에 따라 달라질 수 있습니다.

예를 들어 사용자가 모바일 음악 공유 앱을 사용하여 새 노래를 업로드한다고 가정합니다. 모바일 앱은 Azure에서 실행되는 웹 API로 해당 노래를 보내야 합니다. 새 노래가 추가되었음을 나타내는 단지 알림이 아닌 노래 미디어 파일 자체를 보내야 합니다. 모바일 앱은 웹 API가 데이터베이스에 새 노래를 저장하고 다른 사용자에게 제공한다고 예상합니다. 이는 메시지의 예입니다.

이벤트란?

이벤트는 메시지보다 간단하고 브로드캐스트 통신에 가장 자주 사용됩니다. 이벤트를 보내는 구성 요소는 게시자라고 하고 수신자는 구독자라고 합니다.

이벤트의 경우, 수신 구성 요소는 관심이 있는 통신을 결정하고 이벤트를 구독합니다. Azure Event Grid 또는 Azure Event Hubs와 같은 중개자가 구독을 관리합니다. 게시자가 이벤트를 보내면 중개자는 이벤트를 관심 있는 구독자에게 라우팅합니다. 이 패턴을 “게시-구독 아키텍처”라고 하며, 이벤트를 처리하는 유일한 방법은 아니지만 가장 일반적인 방법입니다.

이벤트에는 다음과 같은 특성이 있습니다.

  • 이벤트는 어떤 것이 발생했음을 나타내는 간단한 알림입니다.
  • 이벤트가 여러 수신자에게 발신되거나 전혀 발신되지 않을 수 있습니다.
  • 이벤트는 종종 각 게시자에 대한 다수의 구독자를 “팬아웃”하거나 포함해야 합니다.
  • 이벤트 게시자는 수신 구성 요소가 수행하는 작업에 대한 기대가 없습니다.
  • 일부 이벤트는 개별 단위이며 다른 이벤트와 관련이 없습니다.
  • 일부 이벤트는 관련되고 정렬된 시리즈의 일부입니다.

예를 들어 음악 파일 업로드가 완료되었고 새 노래가 데이터베이스에 추가되었다고 가정합니다. 새 파일 정보를 사용자에게 알리기 위해 웹 API는 웹 프런트 엔드 및 모바일 앱 사용자에게 새 파일 정보를 알려야 합니다. 사용자가 새로운 노래를 들을지 여부를 선택할 수 있으므로, 초기 알림은 음악 파일을 포함하지 않고 노래가 존재한다는 것만 사용자에게 알립니다. 전송자는 이벤트 수신기가 이 이벤트에 대한 응답으로 특별히 어떤 작업을 수행할 것으로 기대하지 않습니다.

이 시나리오는 개별 이벤트의 예입니다.

메시지 또는 이벤트 선택 방법

단일 애플리케이션에서 일부 용도에 이벤트를 사용하고 다른 용도에 메시지를 사용할 수 있습니다. 선택하기 전에 애플리케이션 아키텍처와 모든 사용 사례를 분석하여 구성 요소가 서로 통신해야 하는 다양한 용도를 모두 파악해야 합니다.

이벤트는 브로드캐스트에 사용될 가능성이 높으며, 대부분 사용 후에 삭제됩니다. 즉, 현재 구독 중인 항목이 없다면 어떤 수신자에 의해서도 통신이 처리되지 않을 수 있습니다. 배포 애플리케이션에 통신이 처리된다는 보장이 필요한 경우에는 메시지가 사용될 가능성이 더 큽니다.

각 통신에 대해 다음 질문을 고려하세요. 발신 구성 요소는 대상 구성 요소가 통신을 특정 방법으로 처리할 것으로 예상하나요?

대답이 이면 메시지를 사용하도록 선택합니다. 대답이 아니요면 이벤트를 사용할 수 있습니다.

구성 요소가 어떻게 통신해야 하는지 이해하면 구성 요소의 통신 방식을 선택하는 데 도움이 됩니다. 메시지를 사용하여 시작해 보겠습니다.

지식 점검

1.

사용자를 인증하는 웹 서비스를 사용하는 분산 애플리케이션이 있다고 가정하겠습니다. 사용자가 로그온하면 웹 서비스는 사용자의 상태를 “온라인”으로 표시할 수 있도록 모든 클라이언트 애플리케이션에 알립니다. 로그인 알림은 메시지 또는 이벤트의 예인가요?

2.

사용자가 계정을 관리할 수 있는 웹 서비스가 지원되는 분산 애플리케이션이 있다고 가정해보겠습니다. 사용자는 등록하고 프로필을 편집하며 계정을 삭제할 수 있습니다. 사용자가 계정을 삭제하면 해당 사용자의 데이터가 데이터베이스에서 제거되도록 웹 서비스가 데이터 계층에 통보합니다. 계정 삭제 알림은 메시지 또는 이벤트의 예인가요?