CQRS란?
명령과 조회 모델을 분리하는 패턴이다.
트랜잭션 모델을 커맨드, 조회 모델을 쿼리 두 가지로 구현한다.
커맨드 모델은 자체 RDBMS에 매핑된다. 커맨드는 데이터가 바뀔때마다 이벤트를 발행한다.
쿼리 모델은 도메인 이벤트를 구독하고 이러한 이벤트를 처리한다.
CQRS의 장점
- 좋은 성능: MSA 아키텍쳐 환경에서 효율적인 쿼리가 가능하다. -> 여러 조인이 필요하지 않다
- CQRS는 이벤트 소싱 모델의 한계를 보완한다.(이벤트 저장소가 기본키 쿼리를 지원)
- 관심사 분리 -> 도메인 모델에 따라 분리하고 더 하여 명령 조회 모델까지 분리하게 되면 각 특성에 맞는 DB를 선택할 수 있고, 모델 특성에 맞는 기술을 선택할 수 있다.
CQRS 단점
- 아키텍쳐가 복잡해진다. -> 여러 종류의 DB를 사용하게 되고, 분리되는 만큼의 쿼리 서비스를 작성해야 한다.
- 결과적 일관성을 신경 써야 한다. -> 이벤트 처리 도중엔 데이터의 일관성이 지켜지지 않을 수 있다
CQRS에 조회 모델에 NoSQL이 적합한 이유
트랜잭션 기능이 제한적이고 다양한 쿼리 기능을 제공하지는 않는다. 그러나 유연한 데이터 모델, 우수한 성능 및 확장성 등을 비교해보면 RDBMS보다 낫다.
고려해야 할 두 가지
> 멱등한 이벤트 발행 - 중복 이벤트를 제거하고 멱등한 이벤트만을 발행해야 한다. 이벤트 ID를 기록해 중복된 이벤트가 발행되지 않도록 해야한다.
> 최종적 일관성 - 메시지 큐 처리 중 최신의 내용을 가지고 오지 못할 수 있다. 동기적 일관성이 보장되어야 하는 상황에 따라 다른 구현을 해야만 한다.
'도서 리뷰 > 마이크로서비스패턴' 카테고리의 다른 글
[마이크로서비스패턴] DDD에 대해 알아보자 (0) | 2022.09.26 |
---|---|
[마이크로서비스패턴] 번외. 패키지 설계 시 지켜야할 객체 지향 설계 원칙 11가지를 알아보자. (0) | 2022.09.14 |
[마이크로서비스패턴] 1. 모놀리식 지옥에서 벗어나라. (0) | 2022.09.14 |
댓글