이벤트 소싱 원리와 구현 요약 - boostcampwm-2021/WEB08-AgileStorming GitHub Wiki

이벤트 소싱 원리와 구현

작성자: 안주영

개요

  • 장바구니 내역을 보고 싶다!
    • RDBMS에는 이러한 기록을 남기지 않음
    • 그래서 보통 log를 남김
    • 그런데 두 작업이 원자적이지 않음
  • 이벤트 소싱은 사용자의 행위 자체를 이벤트로 보고 기록을 함
  • 기록된 데이터를 이벤트 핸들러로 처리를 해서 상태를 재현
  • 상태와 이벤트가 불일치할 일이 없음.

Untitled

  • 이벤트 저장소
    • 키: 개체 식별자와 버전
    • 값: 이벤트 유형, 데이터를 직렬화한 형태
    • 버전 쓰는 이유: 동시성 문제 해결

스냅샷

  • 이벤트가 100만개일 때
  • 성능부담이 될만한 도메인 개체에는 롤링 스냅샷을 이용
    • 키: 개체 식별자
    • 값: 버전, 직렬화된 데이터

CQRS (Command Query Responsibility Segregation)

  • "재고가 10개 미만인 상품 목록이 필요합니다."
    • 이벤트로 모두 계산을 해야 함?

Untitled

  • 이벤트 소싱은 반드시 cqrs가 필요하다!
  • 이벤트를 어떻게 보낼것인가?
    • message driven design
  • 분산 시스템의 어려운 점
    • 정확히 한 번 배달
    • 메세지 순서 보장
  • 멱등성
    • 메세지를 멱등하게 만들면 여러번 전달에 대한 효과를 피할 수 있음
      • 수량 증가 vs 수량 변화

Untitled