CQRS + Event Sourcing 아키텍처
CQRS 패턴 개요
ONESHIM은 CQRS(Command Query Responsibility Segregation) 패턴을 적용하여 데이터의 쓰기(Command)와 읽기(Query)를 완전히 분리합니다.
Command 처리 흐름
상태를 변경하는 모든 요청은 Command Side를 통해 처리됩니다.
Query 처리 흐름
데이터 조회는 Read Model에서 직접 처리하여 빠른 응답을 보장합니다.
Event Sourcing
Event Sourcing은 시스템의 상태를 이벤트의 시퀀스로 저장하는 패턴입니다. 현재 상태는 이벤트를 재생(replay)하여 복원할 수 있습니다.
핵심 개념
| 개념 | 설명 |
|---|---|
| 이벤트 저장소 | 모든 상태 변경을 이벤트로 순차 저장 |
| Aggregate | 비즈니스 규칙의 일관성 경계, 이벤트를 통한 상태 관리 |
| 프로젝션 | 이벤트를 기반으로 생성된 읽기 전용 뷰 |
| 이벤트 버스 | 생성된 이벤트를 구독자에게 비동기 전달 |
Event Store와 프로젝션
Event Flow
Aggregate 패턴
각 도메인은 Aggregate 패턴을 사용하여 비즈니스 규칙의 일관성을 보장합니다.
- Aggregate Root: 트랜잭션의 일관성 경계를 정의하며, 외부에서의 접근점 역할
- 도메인 이벤트: 상태 변화를 이벤트로 표현하여 추적 및 전파
- 이벤트 재생: 저장된 이벤트를 순서대로 재생하여 Aggregate의 현재 상태를 복원
주요 도메인에는 전용 Aggregate가 구현되어 있으며, 각 Aggregate는 Event Store를 통해 이벤트를 영속화합니다.
이 패턴의 장점
| 장점 | 설명 |
|---|---|
| 읽기/쓰기 독립 확장 | Command와 Query를 독립적으로 스케일링 가능 |
| 완전한 이력 보존 | 모든 상태 변경이 이벤트로 기록되어 추적 가능 |
| 시간 여행 | 특정 시점의 상태를 이벤트 재생으로 복원 가능 |
| 느슨한 결합 | 이벤트 기반 통신으로 도메인 간 독립성 유지 |
| 감사 추적 | 누가, 언제, 무엇을 변경했는지 자동 기록 |
관련 문서: