이벤트 소싱 패턴

jihunnit·2023년 11월 18일
0

TIL

목록 보기
16/19

Event Sourcing Pattern

일반적인 어플리케이션에서
데이터베이스의 데이터는 비즈니스 상황을 반영함.
CRUD가 지속적으로 일어나고, 데이터의 변경이 일어날 것이며 이렇게 데이터가 변경될 경우 이전 데이터는 백업이 있고 하겠지만 비즈니스 상 크게 중요하지 않음(현재의 데이터가 중요하니까)

하지만, 특정 몇 몇 경우에는 이전의 상황이 분명히 필요함
(ex: 은행 잔고의 경우 x일 전에 y원만큼 변경되어 z원의 잔고 존재라는 정보가 중요할것임)

이 때, 필요한것이 Event Sourcing Pattern


이벤트소싱 패턴은
현재 상태는 저장하지 않고 이벤트만 저장함
각 이벤트는 시스템 내 특정 엔티티에 대한 변경 사항과 사실 정보로 구성됨

이벤트의 가장 큰 특징은 불변성(immutable)
데이터에 대한 VCS라고 생각하면 유사


이벤트 소싱 패턴의 장점

  • 시각화
  • 감사
  • 검증
  • 높은 쓰기 성능

이벤트 소싱 패턴에서 이벤트를 저장하고 표현하는 방식

  • 데이터베이스에서 각 이벤트를 개별 레코드로 저장
  • 메세지 브로커를 통한 이벤트 저장
    -> 대부분의 DB와 달리 다량의 이벤트를 처리하는데 최적화
    -> 이벤트 스트림에서 복잡한 쿼리를 처리하기는 힘듦

맨 위의 은행 잔고 예시에서, 이벤트 소싱 패턴을 적용했다면?
잔고를 저장하는게 아니라 거래 내역을 저장하여 이를 통해 계산하는 방식으로 데이터를 얻어냄

이벤트 소싱 패턴에서 모든 이벤트를 저장해놨다가, 특정 시점에서의 값을 구하기위해
처음부터 이벤트를 쭉 읽어내려오며 계산하는것은 사실 좀 비효율적임

이를 해결하기 위한 방법들이 존재

  • 특정 시점의 snapshot 만들기
    -> 스냅샷 이후부터 계산하면 됨
  • CQRS 패턴 적용
    -> 명령과 쿼리를 분리하여 쿼리 서비스에게 조회만 시키면서 조회 성능을 향상시킴.
    (업계에서 많이 쓰이는 방식, 물론 최종적 일관성만 보장된다는 단점이 있기 때문에 주의해야 함)
profile
인간은 노력하는 한 방황한다

0개의 댓글