본문으로 건너뛰기

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를 독립적으로 스케일링 가능
완전한 이력 보존모든 상태 변경이 이벤트로 기록되어 추적 가능
시간 여행특정 시점의 상태를 이벤트 재생으로 복원 가능
느슨한 결합이벤트 기반 통신으로 도메인 간 독립성 유지
감사 추적누가, 언제, 무엇을 변경했는지 자동 기록

관련 문서: