Print
카테고리: [ Cloud Computing & MSA ]
조회수: 21410

1. 개요

이벤트 소싱은 상태에 대한 변경 사항을 모두 저장하는 개발 패턴이다.

우리는 과거에는 그 결과값을 저장해왔다. 하지만 이벤트 소싱은 순차적으로 발생하는 이벤트를 모두 저장한다.

마틴 파울러 said "애플리케이션의 모든 상태를 순서에 따라 이벤트로 보관"

2. 목적

모든 갱신 이력 로그를 저장하여 해당 로그를 통해 과거 상태로 재구성할 수 있다는 장점이 있다.

로그와 유사한 점이 있지만 분명히 다른 점이 있다. 그것은 로그는 예외나 향후 문제 추적을 위한 각종 정보를 함께 남긴다. 하지만 이벤트 소싱은 철저히 비즈니스 이벤트만 다룬다.

3. 개념

핵심을 다시 정리하자면 Immutable, Append Only다.

4. 구성

5. 저장소

모든 이벤트는 순서대로 "영구"적인 저장소에 보관된다.

이벤트 스토어는 파일, NoSQL, RDBMS 뭐든 무관하다.

6. 장점

7. 단점

8. 스냅샷

이벤트 식별자(에그리것 ID), 이벤트 버전, 리플레이된 도메인 객체 로 구성된다.

스냅샷은 이벤트 스토어와 분리된 저장소에 저장하고, 가급적 성능이 좋은 저장소(인메모리 등)를 사용한다.

9. 흐름

  1. 요청 (커맨트 객체 생성 + Validation)
  2. 커맨드 핸들러
  3. Query인 경우 : 애그리것 생성 ▶ 이벤트 조회 (이벤트 스토어) ▶ 스냅샷 조회 & 병합 ▶ 이벤트 리플레이
    Command인 경우 : 이벤트 저장 (이벤트 스토어) ▶ 스냅샷 저장 (스냅샷 저장소)