
249
12
장
명령-질의 책임 분리(CQRS)
유일한 방법은 해리에게 연락해 환불해주거나 더 많은 재고를 주문하여 상품의 배송을 늦추는
것이다.
무엇을 하든, 현실은 소프트웨어 시스템과 일관성이 없다. 따라서 비즈니스 프로세스는 이런 이
상한 경우를 모두 처리할 수 있어야 한다. 일관성이 없는 데이터를 근본적으로 피할 수 없으므로
읽기 측면에서 성능과 일관성을 바꿔도 좋다.
이런 요구 사항은 [표
12
-
1
]처럼 ‘읽기’와 ‘쓰기’ 두 시스템으로 분할할 수 있다.
쓰기 쪽에서 채택한 멋진 도메인 아키텍처 패턴은 시스템을 시간에 따라 진화하는 데 도움이
된다. 하지만 지금까지 쌓아온 복잡도는 데이터를 읽는 데 아무 역할도 하지 않는다. 서비스 계
층, 작업 단위, 영리한 도메인 모델은 모두 다 너무 과하다.
표
12-1
읽기와 쓰기 비교
읽기 쓰기
동작 간단한 읽기 복잡한 비즈니스 로직
캐시 가능성 높음 캐시 불가능
일관성 오래된 값 제공 가능 트랜잭션 일관성이 있어야 함
12.3
Post
/리디렉션/
Get
과
CQS
웹 개발을 하는 사람에게는
Post
/리디렉션/
Get
패턴이 익숙할 것이다. 이 기법에서 웹 엔드포
인트는
HTTP
POST
요청을 받고, 처리한 결과를 보여주기 위해 리디렉션으로 응답한다. 예를
들어
/
batches
에
POST
를 해서 새로운 배치를 만들면 사용자를 ...