이벤트 소싱 원리와 구현 요약 - boostcampwm-2021/WEB08-AgileStorming GitHub Wiki
작성자: 안주영
개요
- 장바구니 내역을 보고 싶다!
- RDBMS에는 이러한 기록을 남기지 않음
- 그래서 보통 log를 남김
- 그런데 두 작업이 원자적이지 않음
- 이벤트 소싱은 사용자의 행위 자체를 이벤트로 보고 기록을 함
- 기록된 데이터를 이벤트 핸들러로 처리를 해서 상태를 재현
- 상태와 이벤트가 불일치할 일이 없음.
- 이벤트 저장소
- 키: 개체 식별자와 버전
- 값: 이벤트 유형, 데이터를 직렬화한 형태
- 버전 쓰는 이유: 동시성 문제 해결
스냅샷
- 이벤트가 100만개일 때
- 성능부담이 될만한 도메인 개체에는 롤링 스냅샷을 이용
- 키: 개체 식별자
- 값: 버전, 직렬화된 데이터
CQRS (Command Query Responsibility Segregation)
- "재고가 10개 미만인 상품 목록이 필요합니다."
- 이벤트로 모두 계산을 해야 함?
- 이벤트 소싱은 반드시 cqrs가 필요하다!
- 이벤트를 어떻게 보낼것인가?
- message driven design
- 분산 시스템의 어려운 점
- 정확히 한 번 배달
- 메세지 순서 보장
- 멱등성
- 메세지를 멱등하게 만들면 여러번 전달에 대한 효과를 피할 수 있음
- 수량 증가 vs 수량 변화
- 메세지를 멱등하게 만들면 여러번 전달에 대한 효과를 피할 수 있음