본문으로 건너뛰기

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

관련 문서: