Page History
...
- 비교적 심플한 코드작성으로 CRUD 테스트 수행이 완료되었습니다.
...
CQRS로의 여정
CRUD만 이용하려고 RavenDB를 선택한것은 아니고~ Akka.net의 Persist기능과 연동되어
이벤트 소싱을 액터모델의 Persitent 기능과 함께 심플하게 이용할수 있기때문입니다.
ActorModel에 Persist는 CRUD만 파악되면 커스텀하게 디벨롭할수도 있겠지만, akka.net진영과 콜라보로 공식 지원을 합니다.
- https://ravendb.net/docs/article-page/7.0/csharp/integrations/akka.net-persistence/integrating-with-akka-persistence - RavenDB with Akka.net
RavenDB가 Akka.net의 Persitence 기능을 지원하며 이 코드를 이해하기전 이벤트 소싱패턴을 액터모델을 함께 이용했을때 특징을 먼저 살펴보고 작동가능한 구현된 샘플코드도 유닛테스트를 통해 살펴보겠습니다.
Akka.NET의 액터모델은 CQRS (Command Query Responsibility Segregation) 및 이벤트 소싱 (Event Sourcing) 패턴을 구현하기에 매우 적합한 구조를 제공합니다. 특히 Akka.Persistence 모듈과의 연계를 통해 상태 저장과 복구, 그리고 이벤트 기반 모델링이 가능해집니다. 아래에 그 기능과 장점을 정리해드립니다.
...
✅ Akka.NET 액터모델 + Akka.Persistence 를 활용한 CQRS + 이벤트 소싱
1. 핵심 구성요소
| 구성요소 | 설명 |
|---|---|
PersistentActor | 이벤트를 저장하고 재생할 수 있는 상태 유지 액터 |
Snapshotting | 빠른 복구를 위해 특정 시점의 상태를 저장 |
Event Journal | 모든 상태 변화(event)를 append-only 로그로 저장 |
Read Model Actor | 쿼리에 최적화된 projection을 담당 |
Command Handler Actor | 명령(Command)을 받아 이벤트로 전환 및 persistence 수행 |
2. CQRS(이벤트 소싱) 다이어그램
- 이벤트가 발생할때 즉각 CRUD하여 이용하는 패턴이 아닌 액터모델의 메일박스를 이용해 상태있는 프로그래밍을 통해 이벤트소싱을 설계할수 있으며~ 이러한 느낌
3. 장점 요약
✅ 액터모델 기반의 장점
상태 격리: 각 액터는 고유 상태를 가지며 병렬 처리에 유리함.
비동기 메시지 기반 처리: 병목 없이 고성능 분산 처리 가능.
자연스러운 도메인 분리: 액터 자체가 DDD의 Aggregate Root 역할을 하기에 적합.
✅ CQRS & Event Sourcing의 장점
이벤트 이력 관리: 모든 상태 변화가 이벤트로 저장되므로 과거 상태 추적 가능 (감사, 재처리).
읽기/쓰기 분리: 쿼리와 명령이 분리되어 성능 최적화 가능.
스냅샷 사용 가능: 복구 속도 향상.
스케일 아웃 용이: 각 액터가 독립적으로 배포/스케일링 가능.
✅ Akka.NET 전용의 추가 장점
Akka.Cluster와 연계 시 분산 시스템 구성도 가능
Akka.Remote로 마이크로서비스 간 통신에도 활용 가능
Pluggable Journal Backend: SQL, NoSQL, 이벤트 스토어 등 다양한 저장소와 연동 가능
...
✨ 실사용 시나리오 예
고객 주문 시스템:
OrderActor가PlaceOrderCommand를 받고OrderPlacedEvent를 생성 및 저장챗봇 세션 관리:
SessionActor가 메시지를 이벤트로 저장하여 상태 기반 대화 흐름 관리금융 거래 기록:
AccountActor가Withdrawn,Deposited이벤트를 기록하여 완전한 거래 이력 확보
NetCoreLabs 샘플코드
여기서 실험된 작동기능은 다음 저장소에서 실행및 수행가능하며 Akka.net 기반의 액터모델을 중심으로한 다양한 기능들을 확인할수 있습니다.
- https://github.com/psmon/NetCoreLabs - 이 아티컬에서 실험코드를 확인및 수행할수 있으며, RavenDB를 통해 CQRS변종실험을 이어갈예정입니다.

