-
CQRS 패턴이란?CS/데이터베이스 2023. 11. 9. 00:01728x90
개요
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)을 이벤트 형태로 별도의 이벤트 저장소에 저장합니다.
이 명령들은 자연스럽게 다시 사용할 수 있습니다.
강한 일관성 및 실시간 업데이트가 필요한 시스템에는 적합하지 않을 수 있습니다.
'CS > 데이터베이스' 카테고리의 다른 글
CQRS를 곁들인 Materialized View (0) 2023.12.26 Outer Join 주의사항 (0) 2023.12.06 Deferred Join이란? - 실습편 (0) 2023.11.01 Deferred Join이란? - 이론편 (0) 2023.10.28 PostgreSQL 데드락 발생시키기 (0) 2023.08.23