어떤 이벤트가 있으면 어떤 동작이 실행된다
분산된 시스템에서 이벤트를 생성(발행)하고 발행된 이벤트를 수신자에게 전송하는 구조로 수신자는 그 이벤트를 처리하는 방식의 아키텍처
입니다.
분산 아키텍처 환경에서 상호 간 결합도를 낮추기 위해 비동기 방식으로 메시지를 전달하는 패턴으로 주로 Message Broker(Kafka
, RabbitMQ
)와 결합하여 구성됩니다.
Event Channel
로 전송합니다.Event Generator
에서 Event Processing Engine
으로 수집된 데이터를 전파하는 메커니즘입니다.Consumer
는 이벤트의 송신자에 대한 정보를 알 필요가 없습니다. Subscriber(수신자)
에게 전달합니다.Event Processor
에게 이벤트를 전달하는 역할을 합니다.Event Source
는 1개 이상일 수 있으며, 1개 이상의 Event Processor
에게 전달합니다.Action
을 수행하는 역할입니다.Loosely Coupling
분산 시스템간 느슨한 결합도를 제공합니다.
분산된 시스템간 의존성 배제
약속된 Message를 통해 통신하기 때문에 다른 시스템의 정보를 알 필요가 없으므로 시스템 간 의존성이 배제됩니다.
확장성, 탄력성 향상
Broker Dependency
시스템 간 의존도는 낮아지지만 메시지브로커에 대한 의존성이 발생합니다.
만약 메시지 브로커의 장애가 발생하면 큰 장애로 무조건 이어집니다
Transaction 단위 분리
장애나 이슈발생시 Retry/Rollback에 대한 고려가 필요합니다.
시스템 Flow파악이 어려움 → 회사에 Kafka eng 있으면 파악 쉬워요
디버깅이 어려움
Multicast 통신
한 개의 이벤트 Publisher
는 다양한 Consumer
에게 이벤트를 전달할 수 있습니다.
실시간 전송
실시간으로 발생하는 이벤트에 대한 처리가 가능합니다.
비동기 통신
비동기로 통신이 이루어지므로 Publisher
는 처리 결과를 기다릴 필요가 없습니다.
→ 비동기로 만든 거에요 EDA
→ 의존성이 더 낮아져요 → 비동기는 내가 지금 실행한다해서 지금 바로 실행 X
세밀한 통신
한 덩어리의 큰 이벤트(데이터)보다 작고 자세한 이벤트로 통신이 이루어집니다.
이벤트 온톨로지
이벤트들은 확실하게 구분된 특징을 지니며 그에 상응하는 Consumer
에게 전달됩니다.
자유로운 배포
느슨할 결합도를 제공하므로 새로운 서비스의 배포가 자유롭습니다.
프로그래밍 관점뿐만아니라 다방면에서 적용가능한 아키텍처 패턴입니다.
복잡성/역동성에 가장 효율적으로 대응가능한 아키텍처입니다.
이벤트를 통해 데이터간 연결이 생성된다는 점이 가장 중요하므로 EDA에는 고정된 구조가 없습니다.
많은 도움이 되었습니다, 감사합니다.