CQRS 흐름

Command/Query Bus와 Read Model 일관성 경계

CQRS는 폴더를 나누는 패턴이 아니라 쓰기 모델과 읽기 모델의 책임, 이벤트 전파, 일관성 지연을 명시하는 구조입니다.

01

Command 수신

상태를 바꾸려는 의도를 Command 객체로 만들고 유효성 검사를 수행합니다.

intent
02

Handler 실행

CommandHandler가 aggregate나 domain service를 호출해 규칙을 적용합니다.

write
03

이벤트 발행

상태 변경 결과를 domain event로 남겨 후속 처리와 projection을 유도합니다.

event
04

Projection 갱신

이벤트를 읽기 모델에 반영해 화면과 조회 API에 적합한 형태를 만듭니다.

read model
05

Query 응답

QueryHandler는 복잡한 쓰기 규칙을 건드리지 않고 읽기 전용 모델을 반환합니다.

query
Command
상태 변경 의도 성공/실패가 도메인 규칙에 의해 결정되고 트랜잭션 경계가 필요합니다.
명령형 이름
Query
읽기 최적화 필터, 정렬, 조인, 캐시를 조회 목적에 맞게 자유롭게 설계합니다.
부작용 금지
Projection
조회 모델 동기화 이벤트 반영 지연과 재처리 전략을 갖고 있어야 운영에서 흔들리지 않습니다.
rebuild 가능성

CQRS 적용 판단

복잡도 비용 단순 CRUD에 CQRS를 적용하면 코드량과 일관성 문제가 더 커질 수 있습니다.
지연 허용 사용자가 쓰기 직후 읽기에서 잠시 이전 값을 보는 것이 허용되는지 정합니다.
재처리 경로 Projection이 깨졌을 때 이벤트 로그에서 다시 만들 수 있어야 합니다.