CQRS 패턴과 이벤트 소싱(Event Sourcing)

Song_Song·2021년 10월 7일
0
post-thumbnail
post-custom-banner

데이터 읽기(R) / 쓰기(CUD) 역할의 분리

CQRS(Command and Query Responsibility Segregation)

기존 아키텍쳐에서는 쿼리와 업데이트 모두 동일한 모델을 사용하였다. 하지만 이는 기본적인 CRUD 작업에 적합하나, 복잡한 애플리케이션에서는 적절한 방법이 아니다. 요즘의 복잡한 애플리케이션을 사용할 때 CUD와 R 작업을 사용시 동일한 Domain Model로 처리한다면 필요치 않은 Domain 속성들로 인해 복잡도는 더 증가할 것이다.

이를 해결하기 위해 생겨난 패턴이 CQRS패턴이다. CQRS 패턴에서는 업데이트인(CUD) command, 읽기(R) query 로 나눔

CQRS 패턴을 구현하는 방식은 크게 3가지로 나뉜다.

1. 단일 DB & Command와 Query 모델만 분리

2. 분리된 DB & Command와 Query 모델 분리

업데이트용 DB , 읽기용 DB(보통 업데이트용 DB를 복제)

3. 이벤트 소싱(EventSourcing)을 적용한 구조

이벤트 소싱이란 애플리케이션 내의 모든 Activity를 이벤트로 전환해서 이벤트 스트림(Event Stream)을 별도의 DB에 저장하는 방식을 말한다.
애플리케이션의 모든 상태를 이벤트의 시퀀스로 저장하여 사용하는 방식이다.

CUD 명령이 들어오면 이벤트 스트림을 담당하는 DB(이벤트 저장소)에 저장이 되고(추가만 가능한 DB) 쌓인 데이터를 R로 조회하는 DB(읽기 저장소)에 저장하게 된다.

이벤트 소싱을 사용하려면 CQRS는 필수적으로 사용된다.

profile
성장을 위한 정리 블로그
post-custom-banner

0개의 댓글