CS/데이터베이스

CQRS 패턴이란?

Junuuu 2023. 11. 9. 00:01
728x90

개요

CQRS 패턴이란?

 

왜 CQRS를 사용하는가?

 

CQRS의 구현방법

 

CQRS와 Event Driven Architecture

 

CQRS 고려사항

 

CQRS패턴이란?

명령(Command)과 질의(Query)의 책임(Responsebilitiy)을 분리(Segregation)한다 라는 뜻의 약자입니다.

 

쓰기를 위한 데이터 모델(Write Model)과 읽기를 위한 데이터 모델(Read Model)을 분리하는 패턴입니다.

보통 쓰기 모델에는 높은 데이터 정합성이 요구되며 정규화된 테이블을 설계하게 되는 경우가 많습니다.

 

Command와 Query를 간단하게 설명할 수 있습니다.

Command = 시스템의 상태를 변경하는 작업

Query = 시스템의 상태를 조회하는 작업

 

왜 CQRS를 사용하는가?

데이터를 쓰는 빈도보다 데이터를 읽는 빈도가 훨씬 높은 경우 쓰기를 위한 데이터 모델을 데이터 조회에 그대로 사용하는 경우 정규화된 테이블에 대한 조인 연산이 필요하여 성능에 부정적인 영향을 미칠 수 있습니다.

 

이때 읽기를 위한 간소화된 데이터 모델을 별도로 구성하면 성능적인 이점을 얻을 수 있습니다.

 

Command과 Query에 대한 데이터 모델 및 아키텍처를 별도로 최적화할 수 있습니다. 

각자의 데이터 모델 및 서로 다른 Database 사용 가능

Read Model이 분리되었기 때문에 조회 성능 개선

 

CQRS의 구현방법 - 단일데이터베이스

단일데이터베이스

데이터베이스를 분리하지 않고 데이터 모델만 쓰기 모델과 읽기 모델로 분리할 수 있습니다.

 

단순하게 구현/적용이 가능한 장점이 있으며, 단일 데이터베이스 사용에 따른 확장성 제한을 개선하지 못합니다.

 

CQRS의 구현방법 - 데이터베이스 분리

데이터베이스 분리

쓰기 전용과 읽기 전용 데이터베이스를 분리하고 동기화시킬 수 있습니다.

 

단일 데이터베이스 사용에 따른 확장성 문제는 해결되지만 동기화 처리의 신뢰성이 보장되어야 합니다.

 

CQRS의 구현방법 - 이벤트 소싱

이벤트소싱

이벤트소싱이란 모든 명령(Command)을 이벤트 형태로 별도의 이벤트 저장소에 저장합니다.

 

이 명령들은 자연스럽게 다시 사용할 수 있습니다.

 

강한 일관성 및 실시간 업데이트가 필요한 시스템에는 적합하지 않을 수 있습니다.