- CQRS (Command Query Responsibility Segregation): 명령과 조회 책임 분리
1. CQRS 패턴의 개념 및 특징
| 개념 | 특징 |
|---|---|
| 데이터 저장소의 성능, 확장성, 일관성 확보를 위해 데이터의 명령(Command)과 조회(Query) 작업을 분리하는 디자인 패턴 | – 공동 작업 환경에서 데이터 일관성 보장 – 읽기/쓰기 작업 불균형 시 DB 성능 확보 – 시스템 확장 등 환경 변화 영향 최소화 – DB 간 동기화 로직에 따른 복잡성 증가 |
- CQRS 패턴은 높은 복잡성을 감수하고 데이터 저장소의 성능, 확장성, 일관성 확보를 위해 사용
- CRUD를 분리하여 Create, Update, Delete 작업은 Write DB에서, Select 작업은 Read DB에서 수행
2. CQRS 패턴의 메커니즘 및 기술 요소
(1) CQRS 패턴의 메커니즘
| # | 메커니즘 | 세부 동작 방식 |
|---|---|---|
| ① | 데이터 변경 | User는 Write API를 통해 Write DB에 데이터를 삽입/수정/삭제 |
| ② | 데이터 동기화 | Wirte DB에서 Read DB로 데이터 동기화 |
| ③ | 데이터 읽기 | User는 Read API를 통해 Read DB에서 데이터를 조회 |
(2) CQRS 패턴의 기술 요소
| 구분 | 기술 요소 | 역할 |
|---|---|---|
| 기본 모델 | Command 모델 | – 데이터를 생성, 수정, 삭제하는 변경 작업 (Write Model) – 데이터베이스에서 데이터를 변경하는 Insert, Update, Delete |
| Query 모델 | – 데이터를 조회하는 읽기 작업 (Read Model) – 데이터베이스에서 데이터를 가져오는 Select | |
| 동기화 방식 | 이벤트 기반 동기화 | – 비동기 방식으로 메시지 브로커 기반 이벤트 발행/구독 – Write DB: 이벤트 발행(Publish), Read DB: 구독(Subscribe) |
| 배치 프로세스 | – 주기적으로 명령 모델에서 조회 모델로 데이터를 동기화 – 스케줄러 기반 일정 시간 간격 배치 프로세스 실행 | |
| 데이터베이스 복제 | – 명령 모델의 Write DB의 읽기 전용 복제본을 생성 – 복제본을 Read DB에 반영하고 조회 모델에서 사용 |
- Command 모델은 도메인 로직을 반영하여 데이터 일관성 보장에 중점, Query 모델은 빠른 조회에 중점
3. CQRS 패턴의 장단점
| 장점 | 단점 |
|---|---|
| – 읽기/쓰기 모델 독립적 확장 – 쿼리 최적화 스키마 사용 가능 – 읽기/쓰기 별도 권한 부여 가능 | – 이벤트 소싱 패턴 복잡성 증가 – 메시지 중복 등 잠재적 문제 – 변경사항 실시간 반영 어려움 |
- 데이터 읽기 및 쓰기 워크로드의 지연 시간 및 일관성 요구사항에 따라 CQRS 패턴 적용 여부 고려 필요
[참고]
- Microsoft, CQRS 패턴, 2025.4
- MSAP.ai, 이제 나도 MSA 전문가 개념부터 실무까지