-
Event-Driven Architecture 란Interview 2025. 3. 18. 07:16728x90
Event-Driven Architecture(EDA)는 이벤트 기반으로 비동기적으로 시스템을 운영하는 아키텍처로, 확장성과 유연성이 뛰어나며, Kafka, RabbitMQ와 같은 Event Broker를 활용하여 마이크로서비스 간의 결합도를 낮추고 실시간 처리를 가능하게 합니다.
Event-Driven Architecture(EDA)는 시스템이 이벤트(Event)를 기반으로 비동기적으로 동작하는 소프트웨어 아키텍처 패턴입니다.
즉, 하나의 서비스에서 이벤트를 발생시키면(Event Producer), 이를 수신하는 다른 서비스(Event Consumer)가 해당 이벤트를 처리하는 방식입니다.
이벤트가 발생할 때마다 즉시 반응하는 구조이므로, 확장성(Scalability), 유연성(Flexibility), 비동기 처리(Asynchronous Processing)에 강점이 있습니다.
📌 1️⃣ Event-Driven Architecture의 핵심 구성 요소
EDA는 크게 Event Producer, Event Broker, Event Consumer 세 가지 주요 요소로 구성됩니다.
(1) Event Producer (이벤트 발생자)
• 이벤트를 생성하는 서비스
• 예: 사용자가 주문하면 “Order Created” 이벤트가 생성됨
(2) Event Broker (이벤트 브로커)
• 이벤트를 관리하고 전달하는 메시지 큐 or 스트리밍 시스템
• 예: Kafka, RabbitMQ, AWS SQS, Google Pub/Sub 등이 사용됨
(3) Event Consumer (이벤트 소비자)
• 이벤트를 수신하고 적절한 비즈니스 로직을 실행하는 서비스
• 예: “Order Created” 이벤트를 수신한 결제 서비스가 자동으로 결제 프로세스를 시작함
✅ 예제 흐름 (이커머스 주문 처리 시스템)
User Order → Order Service (Event Producer) → Kafka (Event Broker) → Payment Service (Event Consumer)
📌 2️⃣ Event-Driven Architecture의 작동 방식
EDA는 크게 2가지 패턴으로 동작합니다.
(1) Publish-Subscribe Pattern (Pub/Sub)
• 하나의 이벤트가 여러 개의 소비자에게 전달될 수 있음
• Kafka, Google Pub/Sub 등에서 사용됨
• 예: “Order Created” 이벤트가 발생하면, 결제 서비스 + 배송 서비스가 동시에 반응
✅ 예제 흐름
Order Service → Kafka "Order Created" Topic → Payment Service & Shipping Service 동시 실행
(2) Event Sourcing Pattern
• 데이터베이스의 상태 변경을 이벤트 로그로 저장하고, 이를 기반으로 시스템을 동기화
• 예: 은행 시스템에서 모든 트랜잭션을 이벤트 로그로 기록하여 재구성 가능
✅ 예제 흐름
User Transfer Money → Event Store (DB) 기록 → Account Service & Notification Service 동기화
📌 3️⃣ Event-Driven Architecture의 장점
✅ 1. 확장성 (Scalability)
• 서비스 간 결합도를 낮추고 독립적으로 확장 가능 (Microservices Friendly)
• 예: 결제 서비스 & 배송 서비스가 독립적으로 확장 가능
✅ 2. 비동기 처리 (Asynchronous Processing)
• 실시간 반응형 시스템 구축 가능
• 예: 사용자가 주문을 하면 자동으로 결제 및 배송 처리가 비동기적으로 진행
✅ 3. 고가용성 (High Availability)
• 이벤트 브로커(Kafka, RabbitMQ)를 사용하여 메시지 유실 없이 안정적인 운영 가능
✅ 4. 장애 격리 (Fault Tolerance)
• 한 서비스에 장애가 발생해도 다른 서비스에는 영향을 주지 않음
• 예: 결제 서비스가 다운되어도 주문 서비스는 계속 실행 가능
📌 4️⃣ Event-Driven Architecture의 단점 & 해결 방법
❌ 1. 데이터 정합성 (Data Consistency) 문제
• 이벤트가 비동기적으로 처리되기 때문에 트랜잭션 관리가 어려울 수 있음
• 해결 방법: Saga Pattern을 활용하여 분산 트랜잭션 보장
❌ 2. 디버깅 & 모니터링 어려움
• 이벤트가 비동기적으로 처리되므로 디버깅 및 로그 추적이 어려움
• 해결 방법: 분산 트레이싱 (Jaeger, AWS X-Ray) 도입
❌ 3. 이벤트 중복 처리 가능성
• 같은 이벤트가 여러 번 처리될 가능성이 있음
• 해결 방법: 이벤트 아이디empotency 적용 → 동일한 이벤트는 한 번만 실행되도록 보장
📌 5️⃣ Event-Driven Architecture의 실제 활용 사례
1️⃣ 이커머스 시스템 (Amazon, Coupang)
• 사용자가 주문하면 → “Order Created” 이벤트 발생 → 결제, 배송 서비스가 각각 실행
2️⃣ 은행 시스템 (Banking & FinTech)
• 계좌 송금 시 “Transaction Created” 이벤트 저장 → 이벤트 소싱 기반으로 데이터 무결성 유지
3️⃣ 실시간 알림 시스템 (Notification System)
• 사용자가 메시지를 보내면 Kafka Event 발생 → 푸시 알림, 이메일, SMS 동시에 발송
728x90'Interview' 카테고리의 다른 글
가용성(Availability) vs. 안정성(Reliability) – 어느 것이 더 중요한가? (0) 2025.03.18 SRE 팀의 주요 역할과 책임 (0) 2025.03.18 Backtracking(백트래킹)과 DFS의 차이점 (0) 2025.03.17 시스템의 복원력을 높이기 위한 Chaos Engineering 전략 (0) 2025.03.17 성능 이슈 해결 방법은? (0) 2025.03.17