본문 바로가기

소프트웨어-이야기/프로그래밍 언어와 프레임워크

[EDA] 이벤트 데이터 설계

이벤트 설계

  • 이벤트는 “뭔가" 일어났음을 전하는 메시지가 아니라, 이벤트가 발생한 동안의 모든 일들을 기록해야한다.
    • 이 출력 이벤트를 단일 진실 공급원으로 간주해서 다운스트림 컨슈머가 소비할 불변의 팩트로 기록해야한다. 때문에 컨슈머는 이벤트 데이터 만으로도 데이터를 처리할 수 있다.
      • 이론적으로는 출력 이벤트를 SSOT으로 간주하라고 한다. 그러나 실제 서비스에서는 ZERO-PAYLOAD 방식을 사용하는 경우가 많은 것 같다. 
  • 이벤트 스트림에는 하나의 논리적 이벤트를 나타내는 이벤트가 포함되어야 한다.
  • 이벤트 데이터 타입은 가장 좁은 범위를 사용한다.
  • 이벤트는 하나의 목적만 가진다.
    • 다용도 스미카는 비즈니스 요건이 조금만 달라져도 엄청나게 복잡해진다.
  • 이벤트 크기는 최소화한다.
    • 이벤트 메시지가 큰 경우, 다운 스트림에서  사용하지 않는 불필요한 데이터가 섞여있는 상황일 수 있다.
    • 이는 서비스가 하는 일이 많아서 경계 콘텍스트를 분리해야한다는 신호일 수 있다.

🙅🏻‍♀️ 하지마요

ProductEngagement {
	productId: Long
  productType: TypeEnum,
  actionType: ActionEnum
  .... 
	watchedPreview: Boolean
  .... 
  pageId: int
}

🙆🏻‍♀️ 해요

MovieClick {
	movieId: Long,
	watchedPreview: Boolean
}

BookClick{
	bookingId: Long,
	pageId: int
}

 

참고

이벤트 기반 마이크로 서비스 구축 3장. 통신 및 데이터 규약

[배달의민족] 회원시스템 이벤트 기반 아키텍처 구축 - https://techblog.woowahan.com/7835/