Pink Spider/비동기 Event Driven Architecture

Created Thu, 24 Apr 2025 11:22:53 +0900 Modified Mon, 08 Dec 2025 08:41:47 +0900
1081 Words 5 min

대용량 처리를 위한 **비동기 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, 실시간 처리 시스템, 대규모 서비스에 매우 적합한 구조입니다.