대용량 처리를 위한 **비동기 Event Driven Architecture (EDA)**는 시스템이 이벤트(event)를 중심으로 작동하며, 확장성, 유연성, 성능을 확보하는 데에 효과적인 아키텍처입니다. 아래에 개념과 구성 요소, 장점 및 적용 사례에 대해 자세히 설명드릴게요.
✅ 1. 기본 개념
**Event Driven Architecture (EDA)**는 시스템 내에서 이벤트가 발생하면, 이를 감지하고 처리하는 구조로 구성됩니다. 이벤트는 어떤 상태의 변화를 의미하고, 이를 **프로듀서(생산자)**가 발생시키고, **컨슈머(소비자)**가 이를 처리합니다.
비동기 방식에서는 이 이벤트가 즉시 처리되지 않고, 큐나 버퍼를 통해 일시 저장되며, 컨슈머가 가능한 시점에 이벤트를 처리합니다. 이 구조는 시스템이 처리해야 할 데이터나 요청이 많을 때 부하를 완화하고 확장성을 제공합니다.
🧱 2. 핵심 구성 요소
1. 이벤트 (Event)
- 시스템 내에서 발생하는 상태 변화
- 예: 주문 생성, 결제 완료, 사용자 가입 등
2. 이벤트 프로듀서 (Producer)
- 이벤트를 발생시키는 컴포넌트
- 예:
order-service가 주문 생성 이벤트를 발생
3. 이벤트 브로커 (Broker / 메시지 큐)
- 이벤트를 중간에서 전달하는 역할
- 예: Kafka, RabbitMQ, AWS SNS/SQS, Google Pub/Sub 등
4. 이벤트 컨슈머 (Consumer)
- 이벤트를 수신하고 처리하는 컴포넌트
- 예:
inventory-service가 주문 이벤트를 받아 재고 차감
🚀 3. 대용량 처리에 강한 이유
| 특성 | 설명 |
|---|---|
| 비동기 처리 | 프로듀서가 이벤트를 브로커에 전달하면 즉시 반환 → 시스템 병목 방지 |
| 수평 확장성 | 컨슈머를 여러 개 배포하여 이벤트 처리량 분산 가능 |
| 내결함성 (Fault Tolerance) | 한 컨슈머가 실패해도 다른 인스턴스가 처리 지속 가능 |
| 버퍼링 기능 | 브로커가 이벤트를 일시 저장하여 급격한 트래픽에도 유연하게 대응 |
🔁 4. 활용 예시
예시 1: 전자상거래 플랫폼
- 주문이 들어오면
OrderCreated이벤트 발생 InventoryService,ShippingService,NotificationService등이 이 이벤트를 각각 구독하여 독립적으로 작업 수행
예시 2: 마이크로서비스 MSA 구조
- 서비스 간 강결합을 피하고, 느슨한 연결을 유지하면서 유연하게 확장 가능
예시 3: 데이터 파이프라인 / 로그 수집
- 수많은 로그 데이터를 Kafka 등으로 전송 → 후속 분석/집계는 컨슈머에서 병렬 처리
🔧 5. 주요 구현 기술
| 기술 스택 | 설명 |
|---|---|
| Apache Kafka | 고속 스트리밍 데이터 처리에 특화된 분산형 이벤트 브로커 |
| RabbitMQ | AMQP 기반, 비교적 간단한 구성의 메시지 브로커 |
| Spring Cloud Stream | Spring 기반에서 Kafka/RabbitMQ 통합을 쉽게 해주는 프레임워크 |
| AWS SNS/SQS | 클라우드 환경에서 빠르게 구축 가능한 브로커 서비스 |
⚠️ 6. 고려해야 할 사항
- 정확히 한 번 처리 (Exactly-once semantics) 보장 필요 시 추가 구현 필요
- 이벤트 순서 보장이 필요한 경우 Partition 설정 주의
- 이벤트 스키마 관리: 이벤트 구조 변경 시의 호환성 고려 (예: Schema Registry)
📌 요약
비동기 Event Driven Architecture는 시스템이 이벤트 중심으로 작동하며, 메시지 브로커를 통해 비동기적이고 느슨하게 연결된 구조로 대용량 요청도 유연하게 처리할 수 있도록 합니다. 이는 MSA, 실시간 처리 시스템, 대규모 서비스에 매우 적합한 구조입니다.