Page History
...
CQRS 영속성장치
CQRS에서 다루는 영속장치는 크게 다음과 같이 분류 될수 있으며 시계열 이벤트인 Jounal Type의 Kafka 토픽이벤트를 생성해 그것을 소비해 내부 상태프로그래밍을 통해Redis Dutable State로 스트림으로 즉각변환하는 코드작성을 시도해보겠습니다저장장치의 특성에 따라 Databese가 목적에 맞게 채택될수 있습니다.
Journal
- 이벤트 소싱(Event Sourcing) 방식을 사용합니다
- 액터의 상태 변경을 나타내는 이벤트들을 순차적으로 저장합니다
- 추가 전용(append-only) 로그 형태로 이벤트를 저장합니다
- 액터의 전체 상태 변경 이력을 보존합니다.
- 액터 복구 시 저장된 이벤트들을 재생하여 상태를 복원합니다
Snapshot
- 액터의 전체 상태를 특정 시점에 저장합니다
- 복구 시간을 최적화하기 위한 용도로 사용됩니다
- 전체 이벤트 이력을 재생하지 않고도 빠르게 상태를 복원할 수 있게 해줍니다
- Journal과 함께 사용되며, 가장 최근 스냅샷 이후의 이벤트만 재생하면 됩니다
Durable State
- 액터의 최신 상태만을 저장합니다4. 이벤트 이력을 저장하지 않고 현재 상태만 유지합니다.
- CRUD 기반 애플리케이션과 유사한 방식으로 동작합니다
- 상태 변경 시마다 전체 상태를 덮어씁니다.
draw.io Board Diagram | ||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
여기서는 카프카를 이용함으로 Jounal Type의 Kafka 토픽이벤트를 생성해 그것을 소비해 내부 상태프로그래밍을 통해
Redis - Dutable State로 스트림으로 즉각변환하는 코드작성을 시도해보겠습니다.
카프카는 연속성있는 이벤트를 발생시키고 메시지를 장시간 보유할때 유리하며 - DiskBase이기때문에 많은 이벤트 보유가능
Redis는 KeyBase로 마지막 상태를 저장하는것에 유리합니다. - Memory Base이기때문에 시계열데이터보다는 , Key/Value기반 마지막 상태를 다루는것이 유리하며, 영속성이 더 중요하면 RDB 채택가능