이벤트 설계
- 이벤트는 “뭔가" 일어났음을 전하는 메시지가 아니라, 이벤트가 발생한 동안의 모든 일들을 기록해야한다.
- 이 출력 이벤트를 단일 진실 공급원으로 간주해서 다운스트림 컨슈머가 소비할 불변의 팩트로 기록해야한다. 때문에 컨슈머는 이벤트 데이터 만으로도 데이터를 처리할 수 있다.
- 이론적으로는 출력 이벤트를 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/
'소프트웨어-이야기 > 프로그래밍 언어와 프레임워크' 카테고리의 다른 글
Lombok 기본 생성자와 Getter/Builder 어노테이션 (1) | 2022.11.12 |
---|---|
JPA Entity와 Lombok Annotation (1) | 2022.10.29 |
[예외처리] notification pattern (0) | 2022.06.13 |
[Rule Engine] 비즈니스 규칙 엔진 (0) | 2022.06.11 |
Null Object Pattern (0) | 2022.06.04 |