콘텐츠로 바로가기

Event Sourcing

현재 상태(State)가 아니라 발생한 사건(Event)의 이력 자체를 불변 로그로 저장하는 데이터 관리 패턴. 전통 DB: `UPDATE accounts SET balance = 500` → 이전 값 유실 Event Sourcing: `[Deposited(300...

sys.entry
M

Me

hyunyoun's Blog

system-architecture-distributed-systems1 min read

Event Sourcing

현재 상태(State)가 아니라 발생한 사건(Event)의 이력 자체를 불변 로그로 저장하는 데이터 관리 패턴.

핵심 원리

전통 DB: UPDATE accounts SET balance = 500 → 이전 값 유실 Event Sourcing: [Deposited(300), Withdrawn(100), Deposited(300)] → 언제든 재생(Replay) 가능

불변성(Immutability): 이벤트는 삽입만 가능. 수정·삭제 없음. 과거는 변경 불가.

핵심 연산

Replay: 이벤트 로그를 처음부터 순서대로 적용하여 임의 시점의 상태 복원.

Snapshot: Replay 시간 단축을 위해 N번째 이벤트까지의 상태를 주기적으로 저장. 다음 Replay는 최근 Snapshot에서 시작.

Time-travel Query: at(2026-01-01) 같이 특정 시점의 상태를 재현 → 감사(Audit), 디버깅에 강력.

이벤트 스키마 진화

이벤트 버전이 바뀔 때 과거 이벤트와의 호환성 유지 필요:

  • Upcasting: 구버전 이벤트를 읽을 때 신버전으로 변환하는 어댑터

연결 노트