✅ CQRS (Command Query Responsibility Segregation)

CQRS란?

명령(Command)과 조회(Query)의 책임을 분리하는 아키텍처 패턴입니다.

전통적인 CRUD 시스템은 읽기와 쓰기를 동일한 모델에서 처리하는데, CQRS는 이를 분리하여 각자 최적화할 수 있도록 합니다.


핵심 개념

Command: 데이터 변경 요청 (예: Create, Update, Delete)

Query: 데이터 조회 요청 (예: Read)

읽기 모델과 쓰기 모델을 별도로 설계하여 복잡성을 줄이고, 성능을 향상시킬 수 있습니다.


장점

읽기/쓰기 성능 최적화

비즈니스 로직의 명확한 분리

확장성 향상 (쓰기/읽기를 개별적으로 스케일링 가능)

복잡한 도메인 로직 처리에 유리 (DDD와 궁합이 좋음)


단점

시스템 구조가 복잡해짐

트랜잭션 관리 어려움 (동기화 이슈)

구현 난이도 상승



---

✅ 이벤트 소싱 (Event Sourcing)

이벤트 소싱이란?

데이터를 현재 상태로 저장하는 대신, 상태 변화의 이벤트(Event) 들을 순차적으로 저장하는 방식입니다.

현재 상태는 이벤트들을 재생(replay) 해서 복원합니다.


예시

은행 계좌: 계좌 생성됨, 1000원 입금, 500원 출금 같은 이벤트를 저장 → 이 이벤트들을 기반으로 현재 잔고 계산


장점

모든 변경 이력 보존 (감사 및 디버깅에 유리)

이벤트 스트리밍 시스템과 궁합 좋음

CQRS와 함께 사용할 때 강력한 시너지


단점

이벤트 저장소가 커질수록 리플레이 비용 증가

이벤트 스키마 변경 시 이슈

디버깅이 복잡할 수 있음



---

✅ CQRS + 이벤트 소싱 조합

둘은 자주 같이 사용됩니다:

역할 구현 방식

쓰기 (Command) 도메인 이벤트를 생성하고 저장
읽기 (Query) 이벤트로부터 생성된 뷰 모델(Read Model)을 조회


이점: 변경 이력은 이벤트로 추적하고, 읽기 모델은 그에 맞게 동기화 → 고성능 조회, 완전한 추적 가능


---

💡요약

항목 설명

CQRS 명령과 조회를 분리하여 최적화
이벤트 소싱 상태 변경을 이벤트로 저장하고 재구성
조합 복잡한 비즈니스 로직을 효율적으로 다루는 아키텍처




LIST

+ Recent posts