EDA(Event Driven Architecture)
📌 EDA(Event-Driven Architecture)란?
이벤트 중심 아키텍처(EDA, Event-Driven Architecture)는 시스템이 이벤트(Event)를 기반으로 동작하는 소프트웨어 아키텍처 패턴입니다. 전통적인 Request-Response 방식과 달리, 이벤트가 발생하면 이를 감지하고 반응하는 방식으로 시스템이 동작합니다.
Request-Response 방식
- 클라이언트(Client)가 서버(Server)에 요청(Request)을 보내고, 서버가 이에 대한 응답(Response)을 반환하는 동기적(Blocking) 통신 방식입니다.
- 웹 애플리케이션에서 일반적으로 사용되는 HTTP 요청/응답 모델이 대표적인 예입니다.
- REST API, GraphQL, SOAP 등 대부분의 웹 API는 Request-Response 방식
✅ EDA의 핵심 개념
EDA는 이벤트(Event)를 중심으로 세 가지 주요 컴포넌트로 구성됩니다.
이벤트(Event) → 상태 변화 또는 특정 액션을 의미
- 사용자가 상품을 주문하면 "OrderPlaced" 이벤트 발생
- 결제가 완료되면 "PaymentCompleted" 이벤트 발생
1️⃣이벤트 프로듀서(Event Producer) → 이벤트를 생성하는 주체
- 사용자가 버튼을 클릭하면 프론트엔드에서 이벤트 생성
- 주문이 완료되면 백엔드에서 "OrderPlaced" 이벤트 발생
3️⃣ 이벤트 소비자(Event Consumer)→ 이벤트를 받아서 처리하는 시스템
- "OrderPlaced" 이벤트가 발생하면 재고 시스템이 상품 재고를 차감
- "PaymentCompleted" 이벤트가 발생하면 배송 시스템이 자동으로 출고 요청을 보냄
3️⃣ 이벤트 브로커(Event Broker) → 이벤트를 전달하고 관리하는 시스템
- 이벤트가 발생하면 적절한 이벤트 소비자에게 전달
- 이벤트가 생성되면 즉시 처리하는 것이 아니라, 브로커에 저장 후 소비자가 필요할 때 가져가도록 함
✅ EDA의 주요 특징
📍 1. 비동기 처리 (Asynchronous Processing)
- 이벤트가 발생하면 즉시 반응하는 것이 아니라, 비동기적으로 처리 가능
- 시스템 간의 강한 결합도를 줄이고, 성능과 확장성을 높임
📍 2. 느슨한 결합 (Loosely Coupled)
- 이벤트 프로듀서와 이벤트 소비자는 직접적으로 연결되지 않고, 이벤트를 통해 간접적으로 소통
- 특정 기능을 변경해도 다른 시스템에 미치는 영향이 적음
📍 3. 확장성 (Scalability)
- 새로운 이벤트 소비자를 추가하거나, 여러 개의 소비자가 하나의 이벤트를 동시에 구독할 수 있어 확장성이 뛰어남
- 대규모 시스템에서 동시 처리 성능을 향상시킴
✅ EDA 활용 사례
🛒 1. 전자상거래 시스템
- 사용자가 상품을 주문하면 "OrderPlaced" 이벤트 발생
- 결제 서비스가 "PaymentCompleted" 이벤트를 수신하여 결제 처리
- 배송 시스템이 "OrderShipped" 이벤트를 감지하고 출고 진행
🚗 2. 차량 호출 서비스 (예: Uber, 카카오택시)
- 승객이 택시를 호출하면 "RideRequested" 이벤트 발생
- 근처 운전자가 이벤트를 구독하고 즉시 수락
- 승객이 탑승하면 "RideStarted" 이벤트 발생, 요금 계산 및 지도 업데이트
📩 3. 실시간 알림 시스템
- 사용자가 친구 요청을 보내면 "FriendRequestSent" 이벤트 발생
- 수신자의 알림 시스템이 이를 감지하여 푸시 알림 전송
✅ EDA의 장단점
👍 장점
- ✅ 확장성 – 이벤트 소비자를 쉽게 추가할 수 있어 확장성이 뛰어남
- ✅ 유연성 – 서비스 간의 결합도가 낮아 변경이 쉬움
- ✅ 고성능 – 비동기 처리로 높은 처리량(Throughput)을 제공
- ✅ 실시간 반응성 – 이벤트 기반으로 즉시 반응 가능
👎 단점
- ❌ 디버깅 어려움 – 비동기 이벤트 흐름이 복잡하여 문제 해결이 어려움
- ❌ 순서 보장 문제 – 이벤트가 여러 개 발생할 때 순서를 보장하기 어려울 수 있음
- ❌ 데이터 일관성 유지 어려움 – 분산 환경에서 트랜잭션 처리가 어렵고, 보상 트랜잭션(Saga 패턴) 등의 추가 로직이 필요
EDA는 이벤트 기반 비동기 처리를 통해 확장성과 성능을 극대화할 수 있는 강력한 아키텍처 패턴입니다.
특히 대규모 분산 시스템에서 많이 활용되며, Kafka, RabbitMQ 같은 메시지 브로커를 활용하여 구현됩니다.
하지만 디버깅 및 데이터 일관성 유지의 어려움이 있기 때문에, 서비스 특성에 맞게 도입하는 것이 중요합니다.