본문으로 건너뛰기

이벤트 소싱 (Event Sourcing)

✔️ 이벤트 소싱 (Event Sourcing)

데이터의 최종 상태를 저장하는 대신, 상태를 변경시킨 이벤트들의 이력을 저장하는 방식을 의미합니다. 예를 들어, 체스 프로그램을 개발할 때 체스판의 상태를 데이터베이스에 저장하는 방법은 크게 두 가지가 있습니다.

  • 첫 번째 방법은 체스판의 상태를 그대로 옮겨서 저장하는 방식입니다. 1a 컬럼에 검은색 폰을 나타내는 bp라는 값을 설정할 수 있습니다.
  • 두 번째 방법은 체스의 기보를 저장하는 방식입니다. '검은색 폰이 1a로 이동했다.'라는 이벤트를 기록합니다. 순서대로 쌓여있는 이벤트를 매 순간 재생(replay)하여 체스판의 최종 상태를 나타낼 수 있습니다.

이때, 후자의 방식처럼 모든 상태 변경을 이벤트로 저장하는 방식을 이벤트 소싱이라고 합니다.

✔️ 이벤트 소싱의 장단점

이벤트 소싱은 모든 이벤트를 저장하기 때문에 언제든지 특정 상태를 재현할 수 있습니다. 최종 상태를 저장하는 방법에서는 과거 기록을 재현하기 어렵지만, 이벤트 소싱을 사용하면 과거의 상태를 재현하는 데 용이합니다. 또한, 특정 문제 상황에 대한 재현과 테스트가 용이하며, 시간에 따라서 비즈니스 로직이 달라지는 경우에 새로운 규칙에 따라서 이벤트를 재생할 수 있기 때문에 비즈니스 로직 변경에 유연하다는 장점이 있습니다.

하지만, 모든 이벤트를 재생해야하기 때문에 읽기 성능이 약화될 수 있습니다. 이는 중간 계산 결과를 따로 저장하는 스냅샷이라는 개념을 사용할 수 있지만, 전통적인 최종 상태를 저장하는 방식에 비해서는 읽기 성능이 떨어질 수 있습니다. 또한, 이벤트가 계속 추가되기 때문에 상대적으로 대용량의 데이터를 처리해야한다는 단점이 있습니다.

Loading comments...