Azure Event Grid 선택

완료됨

많은 애플리케이션이 게시-구독 모델을 사용하여 문제가 발생하거나 일부 개체가 변경되었음을 배포 구성 요소에 알립니다. Azure에서 실행되는 Web API를 사용하는 음악 공유 애플리케이션이 있다고 가정해 봅시다. 사용자가 새 음악을 업로드하면 해당 장르에 관심을 표시한 전 세계의 사용자 디바이스에 설치된 모든 모바일 앱에 이 사실을 알려야 합니다.

이 아키텍처에서 사운드 파일의 게시자는 공유되는 음악에 관심이 있는 구독자에 대해 알 필요가 없습니다. 또한 여러 구독자가 이 신곡에 관심이 있는지 여부를 선택적으로 결정할 수 있는 일대다 관계를 맺길 원합니다. Azure Event Grid는 이러한 유형의 아키텍처에 가장 이상적인 솔루션입니다.

Azure Event Grid란?

Azure Event GridAzure Service Fabric에서 실행되는 완전히 관리되는 이벤트 라우팅 서비스입니다. Event Grid는 Azure Blob 스토리지 계정 또는 Azure Media Services 같은 여러 원본의 이벤트Azure Functions 또는 Webhooks 같은 여러 처리기로 분산합니다. Event Grid는 Azure에서 이벤트 기반의 서버리스 애플리케이션을 쉽게 빌드할 수 있도록 개발되었습니다.

Event Grid는 게시자 또는 구독자로서 대부분의 Azure 서비스를 지원하며 타사 서비스에 사용할 수 있습니다. 게시자가 구독자에게 상태 변화를 알릴 수 있는 동적으로 확장 가능하고 저렴한 메시지 시스템을 제공합니다. 다음 일러스트레이션은 여러 원본에서 메시지를 받고 구독에 따라 이벤트 처리기에 해당 메시지를 배포하는 Azure Event Grid를 보여줍니다.

Azure Event Grid에는 원본을 구독자에 연결하는 여러 개념이 있습니다.

  • 이벤트: 발생한 내용.
  • 이벤트 원본: 이벤트가 발생한 곳.
  • 토픽: 게시자가 이벤트를 보낸 엔드포인트.
  • 이벤트 구독: 때때로 여러 처리기에 이벤트를 라우팅하는 엔드포인트 또는 기본 제공 메커니즘입니다. 처리기도 들어오는 이벤트를 지능적으로 필터링하는 데 구독을 사용합니다.
  • 이벤트 처리기: 이벤트에 반응하는 앱 또는 서비스.

다음 그림에서는 여러 이벤트 원본과 여러 이벤트 처리기 간의 Azure Event Grid를 보여 줍니다. 이벤트 원본은 Event Grid에 이벤트를 보내고 Event Grid는 관련 이벤트를 구독자에게 전달합니다. Event Grid는 토픽을 사용하여 어떤 이벤트를 어떤 처리기에 보낼지를 결정합니다. 이벤트 원본은 하나 이상의 토픽을 사용하여 각 이벤트에 태그를 지정하고 이벤트 처리기는 관심 있는 토픽을 구독합니다.

Diagram of various event sources sending messages as topics to the Event Grid which in turn sends messages to subscribing event handlers.

이벤트란?

이벤트는 발생한 일에 대해 설명하는 데이터 메시지이며 Event Grid를 통과합니다. 각 이벤트는 자체 포함되고, 최대 크기는 64KB이며, Event Grid에서 정의하는 스키마 기반의 여러 정보 조각을 포함하고 있습니다.

[
  {
    "topic": string,
    "subject": string,
    "id": string,
    "eventType": string,
    "eventTime": string,
    "data":{
      object-unique-to-each-publisher
    },
    "dataVersion": string,
    "metadataVersion": string
  }
]
필드 설명
topic 이벤트 원본에 대한 전체 리소스 경로입니다. Event Grid는 이 값을 제공합니다.
subject 게시자가 정의한 이벤트 주체의 경로입니다.
id 이벤트의 고유한 식별자입니다.
eventType 이 이벤트 원본에 대해 등록된 이벤트 유형 중 하나입니다. 이 값(예 CustomerCreated, BlobDeleted, HttpRequestReceived 등)에 대한 필터를 만들 수 있습니다.
eventTime 공급자의 UTC 시간을 기준으로 이벤트가 생성된 시간입니다.
data 이벤트 유형과 관련된 정보입니다. 예를 들어 Azure Storage에서 만드는 새 파일에 대한 이벤트에는 lastTimeModified 값 같은 파일에 대한 세부 정보가 포함되어 있습니다. 또는 Event Hubs 이벤트는 캡처 파일의 URL을 갖습니다. 이 필드는 선택 사항입니다.
dataVersion 데이터 개체의 스키마 버전입니다. 게시자가 스키마 버전을 정의합니다.
metadataVersion 이벤트 메타데이터의 스키마 버전입니다. Event Grid는 최상위 속성의 스키마를 정의합니다. Event Grid는 이 값을 제공합니다.

Event Grid는 무언가가 발생 또는 변경되었음을 알리는 이벤트를 보냅니다. 그러나 변경된 실제 개체는 이벤트 데이터에 포함되지 않습니다. 그 대신, 변경된 개체를 참조하기 위해 URL 또는 식별자를 자주 전달합니다.

이벤트 원본이란?

이벤트 원본은 Event Grid에 이벤트를 보내는 역할을 담당합니다. 각 이벤트 원본은 하나 이상의 이벤트 유형과 관련이 있습니다. 예를 들어 Azure Storage는 이벤트가 생성된 Blob에 대한 이벤트 원본입니다. IoT Hub는 디바이스에서 만든 이벤트에 대한 이벤트 원본입니다. 애플리케이션은 사용자가 정의한 사용자 지정 이벤트에 대한 이벤트 원본입니다. 잠시 후 이벤트 원본에 대해 자세히 알아보겠습니다.

Azure Event Grid에는 이벤트 게시자라는 개념이 있는데, 이 개념은 이벤트 원본과 혼동하기가 쉽습니다. 이벤트 게시자는 Event Grid에 이벤트를 보내기로 결정하는 사용자 또는 조직입니다. 예를 들어 Microsoft는 여러 가지 Azure 서비스에 대한 이벤트를 게시합니다. 개발자의 자체 애플리케이션에서 이벤트를 게시할 수 있습니다. Azure 외부 서비스를 호스트하는 조직은 Event Grid를 통해 이벤트를 게시할 수 있습니다. 이벤트 원본은 해당 게시자에 대한 이벤트를 생성하는 특정 서비스입니다. 두 용어는 약간 다르지만 이 단원에서는 “게시자”와 “이벤트 소스” 모두 Event Grid로 메시지를 보내는 엔터티를 나타내는 데 사용합니다.

이벤트 토픽이란?

이벤트 토픽은 이벤트를 그룹으로 분류합니다. 토픽은 공용 엔드포인트로 표시되며 이벤트 원본이 이벤트를 보내는 위치입니다. 애플리케이션을 디자인할 때 토픽을 몇 개나 만들 것인지 결정할 수 있습니다. 대규모 솔루션은 관련 이벤트의 각 범주에 대한 사용자 지정 토픽을 만들고, 소규모 솔루션은 모든 이벤트를 단일 토픽으로 보냅니다. 사용자 계정을 수정하고 주문을 처리하는 것과 관련된 이벤트를 보내는 애플리케이션을 예로 들 수 있습니다. 이벤트 처리기가 이벤트의 두 범주 모두를 원할 가능성은 낮습니다. 두 개의 사용자 지정 토픽을 만들고 이벤트 처리기가 관심 있는 토픽을 구독할 수 있도록 하세요. 이벤트 구독자는 특정 토픽에서 원하는 이벤트 유형을 필터링할 수 있습니다.

토픽은 시스템 토픽과 사용자 지정 토픽으로 분류됩니다.

시스템 토픽

시스템 토픽은 Azure 서비스에서 제공하는 기본 제공 토픽입니다. 게시자가 토픽을 소유하기 때문에 Azure 구독에는 시스템 토픽이 표시되지 않지만 토픽을 구독할 수 있습니다. 구독하려면 이벤트를 받을 리소스에 대한 정보를 입력하세요. 리소스에 액세스 권한이 있기만 하면 해당 이벤트를 구독할 수 있습니다.

사용자 지정 토픽

사용자 지정 토픽은 애플리케이션 및 타사 토픽입니다. 사용자 지정 토픽을 만들거나 사용자 지정 토픽에 대한 액세스가 할당되면 구독에 사용자 지정 토픽이 표시됩니다.

이벤트 구독이란?

이벤트 구독은 이벤트 처리기가 받을 토픽의 이벤트를 정의합니다. 구독은 형식 또는 제목으로 이벤트를 필터링할 수 있으므로 이벤트 처리기가 관련 이벤트만 수신하는지 확인할 수 있습니다.

이벤트 처리기란?

이벤트 처리기(이벤트 "구독자"라고도 함)는 Event Grid에서 이벤트를 받을 수 있는 구성 요소(애플리케이션 또는 리소스)입니다. 예를 들어 Blob 스토리지 계정에 새 음악이 추가되면 Azure Functions는 그에 대응하여 코드를 실행할 수 있습니다. 구독자는 어떤 이벤트를 처리할 것인지 결정할 수 있고, Event Grid는 새 이벤트를 사용할 수 있게 되면 관심이 있는 각 구독자에게 그 사실을 효율적으로 알리며 폴링은 필요 없습니다.

이벤트 원본 형식

다음 Azure 리소스 유형은 이벤트를 생성할 수 있습니다.

시스템 토픽을 지원하는 Azure 서비스

다음은 시스템 토픽을 지원하는 몇 가지 Azure 서비스입니다. 시스템 토픽을 지원하는 Azure 서비스의 전체 목록은 Azure Event Grid의 시스템 토픽을 참조하세요.

  • Azure 구독 및 리소스 그룹: 구독 및 리소스 그룹은 Azure에서 관리 작업에 관련된 이벤트를 생성합니다. 예를 들어 사용자가 가상 머신을 만들 때 이 원본은 이벤트를 생성합니다.
  • 컨테이너 레지스트리: 레지스트리의 이미지가 추가, 제거 또는 변경되면 Azure Container Registry 서비스가 이벤트를 생성합니다.
  • Event Hubs: Event Hubs를 사용하여 일반적으로 로깅 또는 원격 분석과 관련된 다양한 데이터 원본의 이벤트를 처리하고 저장할 수 있습니다. Event Hubs는 파일이 캡처될 때 Event Grid에 대한 이벤트를 생성할 수 있습니다.
  • Service Bus: 활성 수신기가 없는 활성 메시지가 있는 경우 서비스 버스에서 Event Grid로 이벤트를 생성할 수 있습니다.
  • 스토리지 계정: 스토리지 계정은 사용자가 Blob, 파일, 표 항목 또는 큐 메시지를 추가할 때 이벤트를 생성할 수 있습니다. Blob 계정과 범용 V2 계정을 둘 다 이벤트 원본으로 사용할 수 있습니다.
  • Media Services: Media Services는 비디오 및 오디오 미디어를 호스트하고 미디어 파일에 대한 고급 관리 기능을 제공합니다. Media Services는 비디오 파일에서 인코딩 작업이 시작되거나 완료될 때 이벤트를 생성할 수 있습니다.
  • Azure IoT Hub: IoT Hub는 IoT 디바이스와 통신하고 IoT 디바이스에서 원격 분석을 수집합니다. 해당 통신이 도착할 때마다 이벤트를 생성할 수 있습니다.

자세한 내용은 Azure Event Grid의 시스템 토픽을 참조하세요.

사용자 지정 토픽

사용자 지정 이벤트는 REST API 또는 Java, GO, .NET, Node, Python 및 Ruby용 Azure SDK를 사용하여 생성할 수 있습니다. 예를 들어 Azure App Service의 Web Apps 기능에서 사용자 지정 이벤트를 만들 수 있습니다. 이는 스토리지 큐에서 메시지를 선택할 때 작업자 역할에서 발생할 수 있습니다.

Azure 내의 다양한 이벤트 원본과 이렇게 긴밀하게 통합하면 Event Grid가 거의 모든 Azure 리소스에 관련된 이벤트를 배포할 수 있습니다.

이벤트 처리기

Azure의 다음 개체 형식은 Event Grid에서 이벤트를 수신하고 처리할 수 있습니다.

  • Azure Functions: 호스트 가상 서버 또는 컨테이너를 명시적으로 구성할 필요 없이 Azure에서 실행되는 사용자 지정 코드입니다. 이벤트에 대한 사용자 지정 응답을 코딩하려는 경우 Azure 함수를 이벤트 처리기로 사용합니다.
  • Azure Logic Apps: Logic Apps를 사용하여 Event Grid 이벤트를 처리하는 비즈니스 프로세스를 구현합니다. 이 시나리오에서는 웹후크를 명시적으로 만들지 않습니다. 웹후크는 Event Grid에서 이벤트를 처리하도록 논리 앱을 구성할 때 자동으로 생성됩니다.
  • Webhook: 웹후크는 푸시 아키텍처를 구현하는 웹 API입니다. Azure Automation Runbook을 사용하여 이벤트를 처리할 수도 있습니다. 웹후크는 자동화된 Runbook을 사용하여 이벤트를 처리하는 작업을 지원합니다. Runbook용 웹후크를 만든 다음, 웹후크 처리기를 사용합니다.
  • Event Hubs: 솔루션이 이벤트를 처리하는 것보다 더 빠르게 Event Grid에서 이벤트를 가져오는 경우 Event Hubs를 사용합니다. 이벤트가 이벤트 허브에 있으면 애플리케이션은 자체 일정에 따라 이벤트 허브에서 이벤트를 처리할 수 있습니다.
  • Service Bus: 서비스 큐 또는 토픽을 Event Grid의 이벤트 처리기로 사용할 수 있습니다.
  • 스토리지 큐: Queue Storage를 사용하여 끌어와야 하는 이벤트를 수신합니다. 응답 시간이 너무 오래 걸리는 장기 실행 프로세스가 있는 경우 Queue Storage를 사용할 수 있습니다. 이벤트를 Queue Storage를 보내면 앱이 자체 일정에 따라 프로세스를 끌어와서 처리할 수 있습니다.
  • Microsoft Power Automate: Power Automate 역시 워크플로를 호스트하지만 비기술 직원이 더욱 쉽게 사용할 수 있습니다.

자세한 내용은 이벤트 처리기를 참조하세요.

Event Grid를 사용해야 하나요?

다음 기능이 필요한 경우 Event Grid를 사용합니다.

  • 단순성: 원본을 Event Grid의 구독자에게 쉽게 연결할 수 있습니다.
  • 고급 필터링: 구독은 토픽에서 수신하는 이벤트를 엄격하게 제어합니다.
  • 팬아웃: 동일한 이벤트 및 토픽에 무제한의 엔드포인트를 가입시킬 수 있습니다.
  • 안정성: Event Grid는 최대 24시간 동안 각 구독에 대한 이벤트 전송을 다시 시도합니다.
  • 이벤트별 요금: 전송하는 이벤트 수에 대한 요금만 지급합니다.

Event Grid는 단순하지만 유연한 이벤트 배포 시스템입니다. Event Grid를 사용하여 구독자에게 별도의 이벤트를 전송하면 구독자가 해당 이벤트를 안정적이고 신속하게 수신할 수 있습니다. 살펴볼 메시지 모델이 하나 더 있습니다. 대규모 이벤트 스트림을 전송하려면 어떻게 해야 할까요? Event Grid는 한 번에 한 이벤트를 전송하도록 설계되었기 때문에 이 시나리오에는 적합하지 않습니다. 그 대신 다른 Azure 서비스인 Event Hubs로 전환해야 합니다.