본문 바로가기
Design Patterns

[CQRS] CQRS는 어떻게 적용할까?

by kellis 2020. 10. 12.

어떻게 적용할까?

전통적인 CRUD 시스템은 아래와 같이 계층 구조로 구성되어 있습니다. 이러한 시스템 구조에 CQRS를 적용하기 위한 방법은 크게 3가지가 있습니다.

 

(1) Simple CQRS Architecture

데이터베이스는 분리하지 않고 모델 계층만 커맨드와 쿼리로 분리합니다. 분리된 모델은 각자의 도메인 계층에 대해서만 모델링하기 때문에 단순하게 구현할 수 있습니다. 그러나 여전히 DB 사용에 대한 성능상의 문제는 개선이 되지 않습니다.

 

(2) CQRS with separated persistence mechanisms

Simple 구조와 비교하여, 커맨드용 디비와 쿼리용 디비를 분리하여 별도의 브로커를 두어 두 디비 간의 데이터를 동기화합니다. 이렇게 구성하면 데이터를 조회하고자 하는 서비스들이 각자 자신의 시스템에 맞는 저장소(RDBMS, NoSql, Cache..)를 선택할 수 있어 폴리글랏 저장소(다수의 디비를 혼용하여 사용하는 것)로 구성할 수 있고, 각각의 모델에 맞게 저장소를 튜닝하여 사용할 수 있습니다. 또한 디비가 분리되기 때문에 Simple 구조에서 언급한 성능 문제를 해결할 수 있습니다. 그러나 이 경우 동기화 처리를 위한 브로커의 가용성과 신뢰성이 보장되어야 하는 리스크가 생기게 됩니다.

 

(3) CQRS & 이벤트 소싱(Event Sourcing)

이벤트 소싱(Event Sourcing)은 CQRS와 같이 하나의 패턴이며, 일련의 이벤트를 통해 데이터를 조작하는 방식입니다. 이벤트 소싱 패턴에서는 이벤트 스트림을 별도의 데이터베이스에 저장하는 방식을 사용합니다. 이벤트 스트림을 저장하는 디비에는 오직 데이터 추가만이 가능하며, 계속적으로 쌓인 데이터를 구체화시키는 시점까지 구축된 데이터를 바탕으로 조회대상 데이터를 작성합니다. 간단히 말해서, 데이터가 변경되었을 때 데이터의 현재 상태만 도메인에 저장하던 방식을, 추가로 전용 저장소를 두어 해당 데이터에 수행된 전체 작업을 기록하는 방식으로 바꾼 것이라 생각하면 쉽습니다. 애플리케이션 내의 상태 변경에 대한 데이터를 이력으로 남겨 관리하는 패턴이 발전된 형태라고 보면 됩니다. 

 

참고. CQRS 패턴은 이벤트 소싱 패턴과 함께 사용되는 경우가 많지만 필수 사항은 아닙니다. 반대로 이벤트 소싱 패턴의 경우 CQRS를 함께 적용하는 것이 필수라고 말합니다.

 

 

[references]

 

DDD, CQRS & Event Sourcing!

 

DDD, CQRS & Event Sourcing! Evolutionary Microservices with the Axon Framework.

jue., 3 may. 2018 18:30: Hi all!It’s one of those coincidences! :-) Our last Microservices Meetup focused on First Bird building a „Monolith First“ and then transition to Microservices later. Daniel e

www.meetup.com

CQRS and Event Sourcing with Lagom

 

CQRS and Event Sourcing with Lagom - codecentric AG Blog

Lagom is the new microservices framework from Lightbend (formerly Typesafe, the company behind Scala and Akka). The framework and the concepts behind it are heavily based on CQRS (Command Query Responsibility Segregation) and ES (Event Sourcing). This dict

blog.codecentric.de

CQRS - Command Query Responsibility Segregation

 

CQRS - Command Query Responsibility Segregation

Jörg Aulich's blog about it technology, it-trends and development.

auconsil.blogspot.com

CQRS – Simple architecture

 

CQRS – Simple architecture | Kariera Future Processing

Some say: "CQRS is hard!" Is it? Well, I used to think the same! But when I started writing my first piece of software using CQRS, it quickly turned out that it is rather uncomplicated. What is more, I think that in long term it is much easier to maintain

kariera.future-processing.pl

Cutting Edge - Event Sourcing for the Common Application

이벤트소싱 패턴

 

이벤트 소싱 패턴 - Cloud Design Patterns

추가 전용 저장소를 사용하여 도메인의 데이터에 대해 수행된 작업을 설명하는 일련의 이벤트 전체를 기록합니다.

docs.microsoft.com

 

댓글