CQRS 패턴이란
command and query responsibility segregation의 약자이고
명령과 조회의 책임분리를 의미한다
도메인 모델을 command 연산과 query연산으로 분리시키는것이다
query는 단순 조회를 뜻하고
command는 단순조회를 제외한 나머지 연산들( crud에서 cud에 해당됨 )
1단계
가장 일반적인 단계는
단일 DB에 command와 qeury모델을 분리시키는 방식이다
2단계
이렇게 command와 query에 책임이 분리되어 있으니
이제 각기 다른 데이터베이스를 적용시킬 수 도 있어
read는 NoSql
write는 Sql 등
서비스에 더 잘 최적화된 디비를 선택해서 적용할수있다
그럼 위와 같이 Polygrat 한 구조가 가능하다
위의 구조에서는 동기화 처리를 위한 Broker의 가용성과 신뢰도가 보장되어야 한다
3단계
그리고 3번째 형태는 이벤트 소싱을 적용한 구조이다
이벤트 소싱이란
command가 발생하게 되면 이벤트로 전환해서 이벤트 스트림(Event Stream)을 별도의 Database에 저장하고
이벤트 스트림을 저장하는 Database에는 오직 데이터 추가만 가능하고 계속적으로 쌓인 데이터를 구체화(Materialized) 시키는 시점에서 그때까지 구축된 데이터를 바탕으로 조회대상 데이터를 작성하는 방법을 말한다
대부분 CQRS패턴을 적용하고자 할떄 이벤트 소싱이 적용된 구조를 선택한다
CQRS패턴에 이벤트 소싱은 필수가 아니지만 이벤트 소싱에 CQRS는 필수라고 한다
장점
데이터소스(db서버)의 독립적인 크기 조정이 가능하다
보통 read : write = 1000 : 1 이라고 한다
read만 키울 수 있다
단점
코드를 분리시키기 때문에 복잡성이 올라간다
command를 할 때 data무결성이 일시적으로 깨진다
최종적으로는 맞춰진다
CQRS를 사용해야되는 경우
많은 사용자가 동시에 동일한 데이터에 병렬로 접근하는 경우나
read연산이 write연산보다 많은 경우
참고
https://github.com/dhslrl321/cqrs-journey-guide-korean
CQRS 패턴, 코드에 순식간에 적용해보기
서론 평화롭게 프로젝트를 개발하고 있던 어느 날, 우연한 기회로 CQRS 패턴에 대해 이야기를 들을 일이 생겼다. 기존 구조는 R.C.Martin의 Clean Architecture를 따라서 작업을 해둔 상태였는데, 어떤 프
bluayer.com
CQRS 패턴에 대한 오해 풀기
목차 도입 Query 와 Command 란? CQRS 란 CQRS 의 장단점 도입 회사 시스템이 전통적인 CRUD 애플리케이션에서 Event 기반의 시스템으로 바뀌어 가는 과정에 팀에 합류를 하게 되어 나의 최근 가장 큰 관심
wonit.tistory.com
'programming > programing terms' 카테고리의 다른 글
스테이징 이란 (0) | 2023.07.10 |
---|---|
URL에서 쿼리문자열과 parameter (0) | 2023.06.12 |
데이터베이스의 세션이란 무엇인가 (0) | 2023.05.13 |
type-safe란 (0) | 2023.04.23 |
port & adapter 패턴(헥사고널 아키텍처) (0) | 2023.04.20 |