CQRS : 명령(Command)과 조회(Query)의 책임을 분리하는 소프트웨어 디자인 패턴
- 읽기 작업과 쓰기 작업을 서로 다른 모델로 분리하여, 각 작업에 최적화된 구조를 사용할 수 있도록 함.
- 시스템의 성능, 확장성, 유지보수성을 향상시키는 데 도움이 됨.
✅ 주요 개념
✔️ 명령(Command)
- 데이터를 변경하는 작업
: 주문 생성, 결제 처리, 계정 업데이트 등
- 데이터베이스에 대한 쓰기 작업 수행
- 명령 모델을 데이터의 상태 변경을 담당
-> 복잡한 비지니스 로직을 포함할 수 있고, 데이터의 무결성을 보장하기 위해 트랜잭션 사용
✔️ 조회(Query)
- 데이터를 조회하는 작업
: 주문 내역 조회, 계정 정보 조회 등
- 데이터베이스에 대한 읽기 작업 수행
- 읽기 전용 데이터베이스 또는 캐시를 사용하여 빠른 응답 제공
-> 단순한 데이터 조회를 위한 최적화된 구조 가질 수 있음.
✅ CQRS 장단점
✔️ 장점
- 성능 향상
: 읽기와 쓰기를 분리하여 각 작업에 최적화된 데이터 저장소와 인프라 사용 가능
- 확장성
: 읽기와 쓰기를 독립적으로 확장 가능
- 유지보수성
: 비지니스 로직이 명령 모델로 집중 -> 복잡한 상태 변경 로직을 관리하기 용이함.
: 읽기 모델은 단순화 -> 유지보수에 용이
- 데이터 일관성
: CQRS는 이벤트 소싱과 잘 어울림
: 이벤트 소싱을 통해 데이터 상태 변경을 이벤트로 기록, 재생하여 현재 상태 유지 가능 -> 데이터 일관성 보장
✔️ 단점
- 복잡성 증가
: 시스템 설계와 구현의 복잡성 증가
: 명령 모델과 조회 모델을 각각 설계하고 관리하기 때문
- 데이터 동기화
: 명령 모델과 조회 모델 간의 데이터 동기화 필요 -> 추가적인 구현과 관리가 필요