일반적인 어플리케이션에서
데이터베이스의 데이터는 비즈니스 상황을 반영함.
CRUD가 지속적으로 일어나고, 데이터의 변경이 일어날 것이며 이렇게 데이터가 변경될 경우 이전 데이터는 백업이 있고 하겠지만 비즈니스 상 크게 중요하지 않음(현재의 데이터가 중요하니까)
하지만, 특정 몇 몇 경우에는 이전의 상황이 분명히 필요함
(ex: 은행 잔고의 경우 x일 전에 y원만큼 변경되어 z원의 잔고 존재라는 정보가 중요할것임)
이 때, 필요한것이 Event Sourcing Pattern
이벤트소싱 패턴은
현재 상태는 저장하지 않고 이벤트만 저장함
각 이벤트는 시스템 내 특정 엔티티에 대한 변경 사항과 사실 정보로 구성됨
이벤트의 가장 큰 특징은 불변성(immutable)
데이터에 대한 VCS라고 생각하면 유사
이벤트 소싱 패턴의 장점
이벤트 소싱 패턴에서 이벤트를 저장하고 표현하는 방식
맨 위의 은행 잔고 예시에서, 이벤트 소싱 패턴을 적용했다면?
잔고를 저장하는게 아니라 거래 내역을 저장하여 이를 통해 계산하는 방식으로 데이터를 얻어냄
이벤트 소싱 패턴에서 모든 이벤트를 저장해놨다가, 특정 시점에서의 값을 구하기위해
처음부터 이벤트를 쭉 읽어내려오며 계산하는것은 사실 좀 비효율적임
이를 해결하기 위한 방법들이 존재