CQRS 패턴은 무엇이며 어떤 상황에서 도입을 고려할 수 있나요?
답변 포인트
읽기 모델과 쓰기 모델을 분리하면 얻는 이점과 복잡도를 함께 생각해보세요.
정답 및 해설
빠른 요약
CQRS(Command Query Responsibility Segregation)는 데이터를 변경하는 명령(Command)과 데이터를 조회하는 쿼리(Query)의 책임을 분리하는 패턴입니다. 단순히 read/write 함수를 나누는 정도가 아니라, 필요하다면 모델·저장소·스케일링 방식까지 다르게 가져갈 수 있습니다.
CQRS(Command Query Responsibility Segregation)는 데이터를 변경하는 명령(Command)과 데이터를 조회하는 쿼리(Query)의 책임을 분리하는 패턴입니다. 단순히 read/write 함수를 나누는 정도가 아니라, 필요하다면 모델·저장소·스케일링 방식까지 다르게 가져갈 수 있습니다.
예를 들어 주문 생성은 재고, 결제, 쿠폰 정책을 엄격히 검증해야 합니다. 반면 주문 목록 조회는 사용자가 빠르게 볼 수 있도록 검색과 정렬에 최적화된 read model이 유리합니다. 이때 쓰기 모델은 정합성을, 읽기 모델은 조회 성능과 화면 요구사항을 중심으로 설계할 수 있습니다.
장점은 복잡한 도메인에서 모델이 깔끔해지고, 읽기 트래픽과 쓰기 트래픽을 독립적으로 최적화할 수 있다는 점입니다. 단점은 데이터 동기화, eventual consistency, 이벤트 처리 실패, 운영 복잡도입니다.
따라서 CRUD가 단순한 서비스에는 과한 설계일 수 있습니다. 읽기 요구사항이 쓰기 모델과 크게 다르거나, 조회 트래픽이 압도적으로 많거나, 도메인 규칙이 복잡해 모델 분리가 실질적 이득을 줄 때 고려하는 것이 좋습니다.