대빵's Blog

Event-Driven Architecture(EDA) 란? 본문

개발관련

Event-Driven Architecture(EDA) 란?

bigzero 2022. 6. 6. 20:24

아래는 Learning Domain-Driven Design 도서의 chapter 15. Event-Drive Architecture 내용 요약정리이다.

EDA 란, 간단하게 말하면 시스템 컴포넌트들간 통신할 때 비동기적인 이벤트 메세지를 사용하는 아키텍처 스타일이다.

 

메세지의 두가지 타입

메세지에는 아래와 같은 두가지 타입이 존재한다.

* 이벤트(Event) : 이미 발생된 변경을 나타내는 메세지 이다.

* 커맨드(Command) : 수행되어야 하는 행위(operation)을 나타내는 메세지 이다.

 

이벤트의 세가지 타입

이벤트는 아래와 같은 세가지 타입이 존재한다.

* Event notification(이벤트알림) : 특정 이벤트 알림으로서 상세정보는 포함되어 있지 않다.

* Event-carried state transfer(ECST, 상태변경이벤트) : 특정 상태 변경에 대한 이벤트 이다.

* Domain event(도메인이벤트) : 특정 이벤트에 대한 모든 정보를 나타낸다. 보통 도메인객체로 처리된다.

 

이벤트 타입별 예제

  •  Event notification 예제 : 단순한 알림이고 상세정보를 알기 위해서는 details 를 확인해야 한다.
{
  'type': 'marriage-recorded',
  'person-id': '01b9a761',
  'payload': {
        'person-id': '126a7b61',
        'details': '/01b9a761/marriage-data'
  }
}
  • ECST 예제 : 상태변경 값만 나타낸다.
{
  'type': 'personal-details-changed',
  'person-id': '01b9a761',
  'payload': {
        'new-last-name': 'Williams'
  }
}
  • 도메인 이벤트 예제 : married 라는 VO 정보를 모두 가지고 있다.
{
  'type': 'married',
  'person-id': '01b9a761',
  'payload': {
        'person-id': '126a7b61',
        'assumed-partner-last-name': true
  }
}

 

EDA 아키텍처 설계시 주의사항

개선전

* Temporal Coupling : Reporting 은 AdOptimization 이 Domain event 를 처리할 때까지 10초간 기다린 후 처리된다.

* Logical Coupling : Marketing 과 AdOptimization 은 동일한 Domain event 를 수신한다. Marketing 에서만 Business Logic 이 변경되는 경우, CRM 과 AdOptimization 의 이벤트 수신/발신은 Big ball of mud 가 된다.

개선후

* Temporal Coupling Refactoring : Reporting 은 AdOptimization 과 통신만 한다.

* Logical Coupling Refactoring : Marketing 과 AdOptimization 은 ECST 로 이벤트를 수신한다. 각각 종속성 없이 필요한 정보에 대해서 별도 처리를 수행할 수 있다.

 

결론

EDA 에서 적절치 않은 이벤트타입을 사용하면 big ball of mud 가 된다.