1. 개요
- 이벤트 기반 아키텍처(Event-Driven Architecture, EDA)는 시스템 구성 요소 간의 상호작용을 이벤트를 중심으로 설계하는 소프트웨어 아키텍처 패턴임
- 이벤트란 특정 상태의 변화 또는 동작이 발생했음을 알리는 신호로, 이를 다른 컴포넌트가 감지하여 처리하는 방식으로 시스템이 동작함
- 동기/비동기 방식 중 비동기적 처리에 초점을 맞추며, 모듈 간 결합도를 낮추고 유연성과 확장성을 확보하는 데 유리함
2. 아키텍처 구조
EDA는 보통 다음과 같은 3가지 주요 구성 요소로 구성됨
Event Producer (이벤트 생산자)
- 사용자의 행위, 센서 데이터, 타 시스템의 API 호출 등에서 발생한 이벤트를 생성
- 예: 온라인 쇼핑몰에서 결제 완료 시, ‘주문완료’ 이벤트를 생성함
Event Channel (이벤트 채널 또는 브로커)
- 이벤트를 생산자에서 소비자로 전달하는 매개 역할 수행
- 메시지 큐(Kafka, RabbitMQ, ActiveMQ 등) 또는 Pub/Sub 시스템이 활용됨
- 이벤트의 일시적인 저장, 정렬, 전달 보장을 위한 인프라 구성 가능
Event Consumer (이벤트 소비자)
- 이벤트를 수신하고, 해당 이벤트에 따른 로직을 수행하는 컴포넌트
- 이벤트 핸들러 또는 리스너 형태로 구현되며, 이벤트 타입에 따라 동작이 결정됨
3. 처리 방식에 따른 분류
단순 이벤트 처리(Simple Event Processing)
→ 단일 이벤트가 발생하면 즉시 처리, 예: 센서 온도가 일정값 초과 시 알람 전송복합 이벤트 처리(Complex Event Processing, CEP)
→ 여러 이벤트의 상관관계를 분석하여 고차원의 의미 있는 이벤트 도출
→ 예: 일정 시간 내에 다수의 로그인 실패 발생 → 보안 경고 발생
4. 주요 특징
비동기적 메시지 전달
→ 이벤트를 수신자와 분리하여 독립적으로 처리 가능
→ 느린 시스템이나 일시적 장애에도 전체 시스템이 중단되지 않음모듈 간 느슨한 결합(Loose Coupling)
→ 이벤트만 주고받으면 되므로, 생산자와 소비자가 서로를 알 필요 없음
→ 변경에 유연하고 유지보수 용이확장성과 유연성 확보
→ 새로운 소비자(리스너) 추가가 용이함
→ 기능 확장 시 전체 구조 수정 필요 없음
5. EDA와 다른 아키텍처의 비교
항목 | 이벤트 기반 아키텍처 (EDA) | 전통적인 요청-응답 구조 |
---|---|---|
통신 방식 | 비동기 메시지 기반 | 동기적 요청-응답 기반 |
결합도 | 낮음 (Loose Coupling) | 높음 (Tight Coupling) |
장애 전파 | 낮음 | 높음 |
확장성 | 우수함 | 상대적으로 제한됨 |
실시간성 | 적합함 | 응답 대기 시간 필요 |
6. 장점
- 느슨한 결합을 통한 모듈 독립성 확보
- 이벤트를 중심으로한 업무 흐름 정의 가능
- 확장성 확보 및 마이크로서비스 아키텍처와 궁합이 잘 맞음
- 고가용성 시스템 구현에 유리함
- 비동기 방식이므로 사용자 응답성과 성능 향상 가능
7. 단점
- 이벤트 흐름이 복잡해질 경우 시스템 전체 흐름 파악이 어려움
- 디버깅과 테스트가 복잡함 (순차적 흐름 부재로 인한 추적 어려움)
- 메시지 중복 처리나 순서 보장 필요 시 복잡도 증가
- 메시지 브로커 장애 시 전체 시스템 영향 가능성 존재
- 이벤트 스키마 관리 필요 (버전 관리, 포맷 정합성 확보 등)
8. 활용 사례
전자상거래 시스템
- 주문 발생 시 재고 감소, 배송 요청, 결제 처리 등 이벤트로 분리 처리
사물인터넷(IoT) 환경
- 센서 데이터 발생 → 데이터 수집 → 이벤트 기반으로 데이터 분석
실시간 모니터링 시스템
- 서버 상태 변화, 장애 발생 이벤트 수집 → 관리자 알림, 자동 조치 시스템 트리거
마이크로서비스 아키텍처(MSA)
- 각 서비스 간 이벤트를 기반으로 연결 → 서비스 간 독립성 유지
9. 기술 스택
- 메시지 브로커: Kafka, RabbitMQ, AWS SNS/SQS, Google Pub/Sub
- 이벤트 처리 엔진: Apache Flink, Apache Storm, Esper
- 이벤트 저장소: Event Store, Kafka Streams
- 연계 프레임워크: Spring Cloud Stream, NATS
10. 결론
이벤트 기반 아키텍처는 비동기적이고 유연한 시스템 구성이 가능하며, 모듈 간 결합도를 낮춰 유지보수성과 확장성을 극대화하는 장점을 가짐. 특히 실시간 데이터 처리, IoT, MSA 등의 현대적 시스템에 적합한 구조로, 이벤트 중심의 설계 사고를 요구함. 다만 설계 복잡도, 이벤트 흐름 파악의 어려움 등 단점을 보완하기 위한 체계적인 로깅, 모니터링, 트래킹 도구 도입이 병행되어야 함.
'IT Study > SW 개발 및 프로그래밍' 카테고리의 다른 글
💻 객체지향 프로그래밍(OOP)의 핵심 원칙 (추상화, 캡슐화 등) (2) | 2025.04.07 |
---|---|
💻 정적 타이핑 언어 vs 동적 타이핑 언어 (1) | 2025.04.05 |
💻 함수형 프로그래밍(Functional Programming) 재조명 (0) | 2025.04.03 |
💼 멀티플랫폼 앱 개발 프레임워크 (Flutter, Kotlin Multiplatform) (0) | 2025.04.02 |
🧰 LLM 기반 개발 도구 (Copilot, Tabnine, Devin 등) (1) | 2025.04.02 |