Event Grid 및 이벤트 기반 아키텍처
Event Grid를 사용해 Azure 서비스와 사용자 지정 게시자의 이벤트를 라우팅하고, 여러 구독자에게 분배하며, Event Grid를 Event Hubs 및 Service Bus와 비교합니다.
Event Grid 및 이벤트 기반 아키텍처은(는) CoddyKit의 무료 Azure Fundamentals 강의입니다. 이것은 4개 중 4번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Azure Fundamentals 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Azure Fundamentals 강의에는 총 4개의 강의가 포함되어 있습니다.
이벤트 기반 아키텍처란 무엇인가요
이벤트 기반 아키텍처에서는 구성 요소가 서로를 직접 호출하는 대신 이벤트를 게시하고 구독하여 통신합니다. 구성 요소(생산자)는 파일이 업로드되거나, 주문이 접수되거나, 디바이스가 측정값을 보낼 때처럼 주목할 만한 일이 발생하면 이벤트를 내보냅니다. 다른 구성 요소(구독자)는 자신이 관심 있는 이벤트에 독립적이고 비동기적으로 반응합니다. 이를 통해 생산자와 소비자가 분리되어 확장성, 복원력, 유지 관리성이 향상됩니다.
Azure Event Grid란 무엇인가요
Azure Event Grid는 푸시 모델을 사용하여 원본(게시자)의 이벤트를 처리기(구독자)에게 전달하는 완전 관리형 이벤트 라우팅 서비스입니다. Event Grid는 반응형 개별 이벤트를 위해 설계되었습니다. 즉, 무언가 변경되었고 즉시 반응해야 하는 경우에 적합합니다. 자동 재시도를 통해 최소 한 번 전달을 보장하고, 구독자가 관련 이벤트만 수신하도록 필터링을 지원하며, 이벤트를 Azure Functions, Logic Apps, 웹후크, Event Hubs 및 Service Bus 큐로 라우팅할 수 있습니다.
Event Grid 토픽 및 이벤트 구독
게시자는 Event Grid 토픽으로 이벤트를 보냅니다. 구독자는 토픽에 이벤트 구독을 만들고 엔드포인트와 선택적 필터 규칙을 지정합니다. 하나의 토픽에 여러 구독을 만들 수 있으며, 각 구독은 일치하는 이벤트를 독립적인 사본으로 받습니다. Blob Storage, Resource Manager, Service Bus, Azure Container Registry와 같은 Azure 서비스는 추가 구성 없이 사용할 수 있는 시스템 토픽을 제공하는 기본 제공 이벤트 원본입니다.
# Create a custom Event Grid topic
az eventgrid topic create \
--name MyEventTopic \
--resource-group MyRG \
--location eastus
# Create a subscription routing to an Azure Function
az eventgrid event-subscription create \
--name myFunctionSub \
--source-resource-id '/subscriptions/.../providers/Microsoft.EventGrid/topics/MyEventTopic' \
--endpoint '/subscriptions/.../providers/Microsoft.Web/sites/myFunctionApp/functions/EventHandler'이벤트 스키마
Event Grid에 게시되는 이벤트는 필수 필드가 포함된 표준 JSON 스키마를 따릅니다. 필수 필드는 id(고유 식별자), eventType(예: Microsoft.Storage.BlobCreated), subject(이벤트 리소스의 경로), eventTime(ISO 8601 타임스탬프), dataVersion, data(이벤트별 payload)입니다. Event Grid는 다른 이벤트 플랫폼과의 상호 운용성을 위해 CloudEvents 스키마(CNCF 표준)도 지원합니다.
// Event Grid event payload (Event Grid schema)
[
{
'id': 'b781910b-3000-4f19-a4c2-b6b9c4ca7a12',
'eventType': 'Microsoft.Storage.BlobCreated',
'subject': '/blobServices/default/containers/uploads/blobs/photo.jpg',
'eventTime': '2025-01-15T12:30:00.000Z',
'data': {
'api': 'PutBlockList',
'url': 'https://mystorageacct.blob.core.windows.net/uploads/photo.jpg',
'contentType': 'image/jpeg',
'contentLength': 524288
},
'dataVersion': '',
'metadataVersion': '1'
}
]이벤트 필터링
이벤트 구독은 구독자 측의 불필요한 이벤트를 줄이기 위해 필터링을 지원합니다. 이벤트 유형(BlobDeleted가 아니라 BlobCreated만 수신), subject 접두사 또는 접미사(특정 컨테이너의 blob만 수신), 또는 StringContains, NumberGreaterThan, BoolEquals와 같은 연산자를 사용하여 이벤트 데이터의 모든 필드에 대한 고급 필터를 기준으로 필터링할 수 있습니다. 필터링은 서버 측에서 수행되므로 구독자는 기준에 일치하는 이벤트만 받습니다.
# Subscribe to BlobCreated events for .jpg files only
az eventgrid event-subscription create \
--name jpgImageSub \
--source-resource-id '/subscriptions/.../storageAccounts/mystorageaccount' \
--endpoint 'https://myfunction.azurewebsites.net/api/ProcessImage' \
--included-event-types 'Microsoft.Storage.BlobCreated' \
--subject-ends-with '.jpg'Event Grid, Event Hubs 및 Service Bus 비교
세 가지 Azure 서비스가 이벤트와 메시지를 처리하므로 시나리오에 따라 선택해야 합니다. Event Grid는 반응형 이벤트 라우팅(적은 양의 개별적이고 반응형인 이벤트, 예: 리소스 변경 알림)에 사용합니다. Event Hubs는 높은 처리량의 이벤트 스트리밍(초당 수백만 개의 이벤트, 원격 분석, 빅 데이터 파이프라인)에 사용합니다. Service Bus는 순서 지정, 중복 제거, 배달 못한 편지 처리 및 트랜잭션이 필요한 엔터프라이즈 메시징(주문 처리, 금융 거래)에 사용합니다.
// Decision guide:
// Event Grid — 'Something happened, react to it'
// Azure resource events, webhooks, low-latency fan-out
// Price: per event (cheap for low volume)
// Event Hubs — 'Capture a firehose of streaming data'
// IoT telemetry, log aggregation, real-time analytics
// Price: per throughput unit + capture
// Service Bus — 'Reliable message delivery between services'
// Order processing, workflow steps, dead-letter queues
// Price: per operation + messaging units사용자 지정 이벤트 게시
토픽의 액세스 키를 사용하는 간단한 HTTP POST 요청으로 Event Grid 토픽에 사용자 지정 이벤트를 게시할 수 있습니다. HTTP 요청을 보낼 수 있는 모든 서비스나 애플리케이션에서 이벤트를 게시할 수 있습니다. 따라서 온-프레미스 애플리케이션, 타사 서비스 또는 기본적으로 Event Grid를 지원하지 않는 Azure 서비스에서도 쉽게 이벤트를 내보낼 수 있습니다. 효율성을 위해 POST 하나당 최대 1MB의 이벤트를 일괄 처리하십시오.
# Get the topic endpoint and key
TOPIC_ENDPOINT=$(az eventgrid topic show --name MyEventTopic --resource-group MyRG --query endpoint -o tsv)
TOPIC_KEY=$(az eventgrid topic key list --name MyEventTopic --resource-group MyRG --query key1 -o tsv)
# Publish a custom event
curl -X POST $TOPIC_ENDPOINT \
-H 'Content-Type: application/json' \
-H "aeg-sas-key: $TOPIC_KEY" \
-d '[{
"id": "event-001",
"eventType": "Contoso.OrderPlaced",
"subject": "/orders/ORD-12345",
"eventTime": "2025-01-15T12:00:00Z",
"data": { "orderId": "ORD-12345", "total": 99.99 },
"dataVersion": "1.0"
}]'배달 못한 편지 및 재시도 정책
이벤트 전달 시도에 실패하면(구독자가 2xx가 아닌 HTTP 응답을 반환하는 경우) Event Grid는 최대 24시간 동안 지터가 적용된 지수 백오프 방식으로 재시도합니다(최대 72시간까지 구성 가능). 최대 재시도 횟수는 30회입니다. 재시도를 모두 소진한 후 Event Grid는 배달되지 않은 이벤트를 Azure Blob Storage 컨테이너로 배달 못한 편지 처리하여 수동으로 조사할 수 있습니다. 안정적인 이벤트 전달이 중요하고 실패한 이벤트를 감사하거나 다시 처리해야 하는 경우 배달 못한 편지 처리를 구성하십시오.
# Configure dead-letter storage and retry for a subscription
az eventgrid event-subscription update \
--name myFunctionSub \
--source-resource-id '/subscriptions/.../topics/MyEventTopic' \
--deadletter-endpoint '/subscriptions/.../storageAccounts/mystg/blobServices/default/containers/deadletter' \
--max-delivery-attempts 30 \
--event-ttl 1440 # 24 hours in minutesAzure Event Hubs 개요
Azure Event Hubs는 초당 수백만 개의 이벤트를 수신하고 처리할 수 있는 분산 데이터 스트리밍 플랫폼입니다. 분할된 소비자 모델을 사용하여 이벤트를 파티션 전체에 분산하고, 각 소비자 그룹이 자체 속도로 이벤트를 독립적으로 읽습니다. 따라서 여러 소비자가 조정 없이 동일한 스트림을 처리할 수 있습니다. 일반적인 사용 사례로는 IoT 원격 분석 수집, 애플리케이션 로그 집계, 클릭스트림 분석 및 실시간 대시보드 데이터 파이프라인이 있습니다.
# Create an Event Hubs namespace and hub
az eventhubs namespace create \
--name myEventHubNS \
--resource-group MyRG \
--location eastus \
--sku Standard
az eventhubs eventhub create \
--name telemetry \
--namespace-name myEventHubNS \
--resource-group MyRG \
--partition-count 8 \
--message-retention 3 # Days to retain events안정적인 메시징을 위한 Azure Service Bus
Azure Service Bus는 큐(지점 간)와 구독이 있는 토픽(게시-구독)을 제공하는 엔터프라이즈 메시징 브로커입니다. Event Grid(전송 후 잊기) 및 Event Hubs(스트리밍)와 달리 Service Bus는 순서가 보장된 전달(FIFO 큐), 중복 검색, 처리 실패를 위한 배달 못한 편지 큐, 그룹화된 처리를 위한 메시지 세션, 트랜잭션을 보장합니다. 이러한 기능은 금융 및 주문 처리 워크플로에 필수적입니다.
# Create a Service Bus namespace and queue
az servicebus namespace create \
--name myServiceBusNS \
--resource-group MyRG \
--location eastus \
--sku Standard
az servicebus queue create \
--name order-processing \
--namespace-name myServiceBusNS \
--resource-group MyRG \
--enable-dead-lettering-on-message-expiration true \
--max-delivery-count 10 # Move to dead-letter after 10 failed attempts실용적인 이벤트 기반 패턴: 파일 처리
일반적인 Azure 이벤트 기반 패턴은 다음과 같습니다. 사용자가 Blob Storage에 파일을 업로드하면 BlobCreated 이벤트가 Event Grid로 전송됩니다. Event Grid는 이벤트를 파일을 처리하는 Azure Function으로 라우팅하고, 함수는 이미지 크기 조정, 텍스트 추출, 데이터 유효성 검사 등을 수행한 후 결과를 Azure SQL Database에 씁니다. 처리에 실패하면 이벤트는 스토리지 컨테이너로 배달 못한 편지 처리됩니다. 이 전체 파이프라인은 폴링이 전혀 필요하지 않으며 유휴 상태일 때 지속적으로 실행되는 컴퓨팅 리소스도 필요하지 않습니다.
// Azure Function: process image on BlobCreated event
module.exports = async function (context, eventGridEvent) {
const blobUrl = eventGridEvent.data.url;
const blobName = eventGridEvent.subject.split('/blobs/').pop();
context.log('Processing image:', blobName);
// Process via Cognitive Services Vision API
const tags = await analyzeImage(blobUrl);
// Write metadata to Cosmos DB via output binding
context.bindings.cosmosOutput = {
id: blobName,
tags,
processedAt: new Date().toISOString()
};
context.log('Processing complete for:', blobName);
};빠른 확인
이 단원에서 다룬 Microsoft Azure Fundamentals (AZ-900) 개념에 대한 이해도를 확인해 보십시오.
단원 요약
이 단원에서는 다음을 배웠습니다. Azure Event Grid는 필터링과 배달 못한 편지 처리가 가능한 푸시 전달을 사용하여 게시자의 개별 이벤트를 구독자에게 라우팅하고, Event Grid(반응형 이벤트), Event Hubs(스트리밍), Service Bus(안정적인 엔터프라이즈 메시징)의 주요 차이점을 이해했으며, Blob Storage 이벤트를 Event Grid를 통해 Azure Functions로 연결하여 이벤트 기반 파이프라인을 구축하는 방법을 살펴보았습니다. 다음으로 Azure DevOps 서비스를 살펴보겠습니다.
자주 묻는 질문
“Event Grid 및 이벤트 기반 아키텍처” 강의는 무료인가요?
네 — “Event Grid 및 이벤트 기반 아키텍처” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Azure Fundamentals 강의 전체를 잠금 해제할 수 있습니다. Azure Fundamentals 강의에는 총 4개의 강의가 포함되어 있습니다.
“Event Grid 및 이벤트 기반 아키텍처”에서 뭘 배우나요?
Event Grid를 사용해 Azure 서비스와 사용자 지정 게시자의 이벤트를 라우팅하고, 여러 구독자에게 분배하며, Event Grid를 Event Hubs 및 Service Bus와 비교합니다. 브라우저에서 직접 실행하는 실습 코드로 Azure Fundamentals을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Azure Fundamentals을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Azure Fundamentals은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 4번째 강의입니다.
“Event Grid 및 이벤트 기반 아키텍처” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Azure Fundamentals 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Azure Fundamentals 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- Azure Functions 트리거 및 바인딩
- 상태 저장 워크플로를 위한 Durable Functions
- Azure Logic Apps
- Event Grid 및 이벤트 기반 아키텍처