쓰기 모델은 규칙을 지키고, 읽기 모델은 조회에 맞게 따로 만든다

CQRS는 Command와 Query를 물리적으로 나누는 문법이 아니라 변경 규칙, 이벤트, Projection의 책임 경계를 설계하는 방식이다.

Command

변경 의도와 불변식

권한, 유효성, 트랜잭션을 한 트랜잭션 안에서 다룬다.

Event

성공한 변경 사실

outbox나 domain event로 projection과 외부 작업을 깨운다.

Query

조회 전용 모델

목록, 검색, 통계, 캐시처럼 화면/API 요구에 맞춘다.

구분책임삶이 변하는 쪽NestJS 위치
Command
변경 요청
도메인 규칙과 트랜잭션조회 최적화 코드가 쓰기 규칙을 오염CommandBus, Handler
Event
변경 결과
Projection 갱신과 외부 작업복구 기준 없는 느린 반영 위험EventBus, outbox worker
Query
조회 모델
조회 모델과 캐시 최적화읽기 요구 때문에 쓰기 모델이 복잡QueryBus, Handler

도입 기준 쓰기와 조회의 자연스러운 변경 이유가 달라질 때 CQRS 분리 비용이 의미를 가진다.