Search
Duplicate
🩹

CQRS Pattern

Command Query Responsibility Segregation
명령 조회 책임 분리

CRUD에서 CUD와 R을 구분하자는 얘기

즉 Command와 Query를 구분하자
Database로부터 데이터를 읽어오고 처리를 하게될 경우, 그 사이에 데이터에 변경이 있을 확률이 높은데
이런 변경 가능성을 인정하고 Read와 CUD 사이에는 Delay가 존재할 수 있음을 인정하는 것
Domain 단위부터 분리하는 것?

Controller 단계에서 Command와 Query를 나눠서 개발

CQRS를 사용하면 얻는 이점

여러 사용자가 동일한 데이터에 동시에 액세스하는 공동 작업 도메인 수준에서 병합 충돌을 최소화하기 위해 충분한 세분성으로 명령을 정의할 수 있다

구현형태

같은 프로세스, 같은 DB
가장 단순, 명령/쿼리 동일 데이터 보장
같은 프로세스, 같은 DB, 다른 테이블
쿼리 전용 테이블 사용 ⇒ 조회를 뜻함
최근 조회수 많은 글 목록 등
명령이 쿼리 전용 데이터 변경 유발
같은 프로세스, 다른 DB
상품 목록을 Redis에 캐싱하고 이를 쿼리
명령에 따른 변경 내용을 Redis에 변경전파
다른 프로세스, 다른 DB
명령에 따른 데이터 변경 내역을 쿼리쪽 DB에 전달해야 함
마이크로 서비스 분류 체계에 따라 많이 만날 수 있음