개요
마이크로서비스 아키텍처에서 서비스 간 통신을 효율적으로 처리하는 것은 중요한 과제입니다. AWS EventBridge는 서버리스 환경에서 이벤트 기반 통신을 가능하게 해주는 강력한 서비스로, SNS/SQS와 비교해 더 유연한 라우팅 및 필터링 기능을 제공합니다. 이 글에서는 EventBridge의 개념을 이해하고, Node.js를 활용한 이벤트 드리븐 아키텍처를 구축하는 방법을 소개합니다.
1. AWS EventBridge란?
AWS EventBridge는 다양한 AWS 서비스 및 사용자 지정 애플리케이션 간 이벤트를 전달하는 관리형 이벤트 버스 서비스입니다. EventBridge를 사용하면 마이크로서비스 간의 비동기 이벤트 기반 통신을 쉽게 구현할 수 있습니다.
주요 특징
- 이벤트 라우팅: 이벤트 패턴을 기반으로 특정 대상(Target)으로 라우팅 가능
- 필터링: 필요 없는 이벤트는 필터링하여 불필요한 트래픽 방지
- 서드파티 서비스 연동: SaaS 애플리케이션 및 외부 서비스와 통합 가능
- 서버리스 친화적: Lambda, Step Functions, SQS, SNS 등과 원활하게 연동
2. EventBridge vs SNS/SQS
기능EventBridgeSNSSQS
메시지 전달 방식 | 이벤트 라우팅 | 브로드캐스트 | 메시지 큐잉 |
필터링 기능 | JSON 패턴 필터링 | 기본 필터링 | 없음 |
대상 | 여러 AWS 서비스, HTTP API 등 | 여러 구독자 (Lambda, SQS 등) | 메시지 소비자가 직접 Pull |
순서 보장 | X (일반적으로 비순서) | X | FIFO 지원 (FIFO 큐 선택 시) |
메시지 보존 | 없음 (이벤트 기반) | 없음 | 최대 14일 저장 |
EventBridge는 SNS처럼 메시지를 브로드캐스트할 수도 있지만, 더 정교한 필터링과 타겟팅이 가능하여 특정 이벤트를 필요로 하는 서비스만 구독할 수 있습니다.
3. Node.js를 활용한 EventBridge 아키텍처 구축
이제 실제로 AWS EventBridge를 활용하여 이벤트 기반 아키텍처를 구축하는 방법을 살펴보겠습니다.
3.1 EventBridge 이벤트 버스 생성
먼저, EventBridge에서 이벤트 버스를 생성해야 합니다.
AWS CLI를 사용한 이벤트 버스 생성
aws events create-event-bus --name MyCustomEventBus
이제 MyCustomEventBus가 생성되었으며, 이를 사용하여 이벤트를 게시하고 구독할 수 있습니다.
3.2 Node.js로 이벤트 게시 (PutEvents)
EventBridge에 이벤트를 게시하려면 AWS SDK를 사용하면 됩니다.
Node.js 코드 예제
import { EventBridgeClient, PutEventsCommand } from "@aws-sdk/client-eventbridge";
const client = new EventBridgeClient({ region: "us-east-1" });
async function publishEvent() {
const event = {
Entries: [
{
EventBusName: "MyCustomEventBus",
Source: "myapp.order",
DetailType: "OrderCreated",
Detail: JSON.stringify({ orderId: "12345", status: "created" })
}
]
};
const command = new PutEventsCommand(event);
const response = await client.send(command);
console.log("Event published:", response);
}
publishEvent();
위 코드에서 PutEventsCommand를 사용하여 EventBridge에 OrderCreated 이벤트를 게시합니다.
3.3 이벤트 필터링 및 대상 설정
EventBridge에서 특정 이벤트를 수신할 서비스(Lambda 등)를 설정하려면 규칙(Rule) 을 생성해야 합니다.
AWS CLI를 사용한 규칙 생성
aws events put-rule \
--name OrderCreatedRule \
--event-bus-name MyCustomEventBus \
--event-pattern '{"source": ["myapp.order"], "detail-type": ["OrderCreated"]}'
대상(Lambda) 추가
aws events put-targets --rule OrderCreatedRule --targets "Id"="1","Arn"="<LAMBDA_ARN>"
위 설정을 통해 myapp.order 소스의 OrderCreated 이벤트가 발생하면, 지정된 Lambda가 실행됩니다.
4. 실무에서 사용할 수 있는 패턴 예제
4.1 마이크로서비스 간 이벤트 기반 주문 처리
시나리오
- Order Service: 주문 생성 → EventBridge에 OrderCreated 이벤트 게시
- Inventory Service: OrderCreated 이벤트 수신 → 재고 업데이트 수행
- Notification Service: OrderCreated 이벤트 수신 → 고객에게 알림 전송
아키텍처 다이어그램
Order Service → EventBridge → Inventory Service (Lambda)
→ Notification Service (Lambda)
이런 방식으로 여러 서비스가 동일한 이벤트를 필요에 따라 구독하고 비동기적으로 처리할 수 있습니다.
결론
AWS EventBridge를 활용하면 마이크로서비스 간 유연한 이벤트 기반 통신을 구축할 수 있습니다. SNS/SQS보다 정교한 이벤트 필터링과 다양한 대상 연동 기능을 제공하므로, 복잡한 서버리스 아키텍처에서도 효과적으로 사용할 수 있습니다.
핵심 요약
✅ EventBridge는 마이크로서비스 간 이벤트 기반 통신을 지원하는 강력한 솔루션이다.
✅ SNS/SQS와 비교했을 때 더 세밀한 이벤트 필터링과 다양한 서비스 연동이 가능하다.
✅ Node.js를 사용하여 이벤트를 게시하고, 규칙을 설정하여 특정 서비스를 트리거할 수 있다.
✅ 실무에서는 주문 처리, 재고 관리, 알림 시스템 등 다양한 시나리오에서 활용 가능하다.
이 가이드가 AWS EventBridge를 활용한 마이크로서비스 구축에 도움이 되길 바랍니다! 🚀
'개발 환경 > AWS' 카테고리의 다른 글
[AWS] AWS Step Functions을 이용한 서버리스 워크플로우 구축 (Lambda + S3 + DynamoDB) (0) | 2025.02.28 |
---|---|
[AWS] AWS Lambda & API Gateway 성능 최적화: Cold Start와 Latency 줄이기 (0) | 2025.02.28 |
[AWS] Amazon SQS와 Lambda를 활용한 서버리스 데이터 처리 (Node.js) (0) | 2025.02.25 |
[AWS] Amazon Cognito ID 토큰을 사용하여 프론트엔드에서 Private S3 직접 접근하기 (0) | 2025.02.25 |
[AWS] Serverless Framework를 이용한 AWS Lambda와 API Gateway 배포하기 (1) | 2024.10.28 |
댓글