흔히 이야기 되는 디자인 패턴, 그 중에서도 CQRS 패턴에 대해 정리하고자 한다.
그전에 디자인 패턴이 무엇인지에 대해 먼저 정리가 필요하다.
0. 디자인 패턴
- 소프트웨어 개발 과정에서 반복적으로 나타나는 문제를 해결하기 위한 모범 사례를 체계화 한 것
- 코드의 재사용성과 유지보수성을 높이고, 개발자 간의 의사소통을 원활하게 하기 위한 공통 언어를 제공한다.
- 예시
> 생성 패턴: 객체 생성과 관련된 문제를 해결 (ex. singleton, factory method)
> 구조 패턴: 객체 간의 관계를 정의하고 구조를 설계 (ex. adapter, decorator)
> 행위 패턴: 객체 간의 책임 분담과 협력 방식을 정의 (ex. observer, strategy)
1. CQRS(Command Query Responsibility Separation) 패턴의 정의
- Command 와 Query 의 책임을 분리하는 설계 패턴
2. 핵심 개념
- Command (명령)
> 시스템의 상태를 변경하는 작업
- Query (조회)
> 데이터를 읽는 작업으로, 시스템의 상태를 변경하지 않음
3. 특징
- 명령과 조회를 각각의 모델로 분리 (명령은 쓰기(write)에 최적화된 모델, 조회는 읽기(read)에 최적화된 모델 사용)
- 데이터 저장소 분리 가능 (예를 들어, 명령은 관계형 데이터베이스를, 조회는 NoSQL 데이터베이스를 사용)
- 이벤트 소싱과의 조합
4. 장점
- 확장성
> 읽기와 쓰기를 개별적으로 확장 가능
- 성능 최적화
> 각 작업화에 특화된 모델을 사용하므로 성능 개선
- 복잡성 관리
> 읽기와 쓰기 작업이 독립적이므로 복잡한 도메인 로직 관리 용이
5. 단점
- 복잡성 증가
- 일관성 문제
'IT > DesignPattern' 카테고리의 다른 글
[DesignPattern] SAGA 패턴 (0) | 2024.12.10 |
---|