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: 구버전 이벤트를 읽을 때 신버전으로 변환하는 어댑터
연결 노트
- ZK-CQRS-Pattern — Event Sourcing과 쌍을 이루는 읽기/쓰기 분리 패턴
- ZK-Microservices-Decomposition — 서비스 간 상태 공유 대신 이벤트 교환
- ZK-ReAct-Pattern — 에이전트 루프의 Observation 이력이 Event Sourcing과 유사한 불변 로그 구조