ONE QUESTION AT A TIME.

천천히 생각하고, 분명하게.

TODAY’S QUESTION328 / 1500
설계난이도 중하5분 답변 목표 · 보강본

읽기 성능을 위해 CQRS를 도입하려 합니다. 읽기·쓰기 모델을 나누면 데이터베이스와 서비스도 반드시 분리해야 하나요?

잠깐, 답변을 보기 전에
먼저 내 말로 설명해 볼까요?

답변과 점검 포인트 펼치기답변 접기
01

구두 답변

정의를 외우기보다, 원리와 조건을 연결해 설명해 보세요.

CQRS는 명령과 조회의 모델·책임을 분리하는 설계이며 반드시 별도 프로세스·DB·event sourcing을 요구하지 않습니다. 같은 DB에서 쓰기 규칙과 조회 DTO를 나누는 작은 형태로 시작할 수 있습니다.

동작 원리와 전제

쓰기는 불변식·인가·transaction을 중심으로 하고 읽기는 화면의 필터·집계·정렬에 맞는 모델을 제공합니다. 별도 읽기 저장소를 두면 성능·확장 이점 대신 비동기 반영 지연과 재구축 책임이 생깁니다.

선택과 실패 처리

사용자가 방금 쓴 값은 응답으로 보여 주거나 최소 버전 기반 읽기를 사용할 수 있습니다. projection의 중복·순서·삭제와 실패를 처리하고 원본과 대사합니다. 읽기 모델의 빠른 응답을 재고 확정의 권위로 쓰지 않습니다.

구체적인 사례와 검증

명령이 주문을 확정한 뒤 읽기 projection이 아직 이전 상태라면 사용자는 저장이 실패했다고 생각해 다시 요청할 수 있습니다. 명령 응답에 확정 결과·버전을 주고 읽기 모델의 지연 상태를 표시하는 방식이 필요합니다. 명령은 같은 논리 키로 중복을 막고 projection은 재전달·순서 역전을 처리합니다. 같은 DB 안의 조회 DTO 분리부터 시작하면 이런 분산 동기화 없이도 책임을 나눌 수 있습니다. 읽기·쓰기 부하가 실제로 다르게 확장될 때 별도 저장소를 도입하고, 원본 소유권과 재구축 절차를 문서화합니다. CQRS라는 이름이 서비스 수 증가나 event sourcing을 강제하지 않습니다.

단일 모델 기준선과 조회 지연·쓰기 복잡성·동기화 지연·운영 비용을 비교합니다. 모든 서비스에 도입하기보다 읽기·쓰기 요구가 실제로 다른 영역에 적용합니다. 명령·조회 분리와 분산 일관성 문제를 구분하겠습니다.

02

득점 포인트

이해가 드러나는 지점을 확인해 보세요.

  • 핵심 구분: CQRS는 명령과 조회의 모델·책임을 분리하는 설계이며 반드시 별도 프로세스·DB·event sourcing을 요구하지 않습니다.
  • 선택 조건: 사용자가 방금 쓴 값은 응답으로 보여 주거나 최소 버전 기반 읽기를 사용할 수 있습니다.
  • 검증 기준: 단일 모델 기준선과 조회 지연·쓰기 복잡성·동기화 지연·운영 비용을 비교합니다.
03

감점 포인트

놓치기 쉬운 조건과 오해를 짚어 보세요.

  • CQRS를 쓰려면 반드시 별도 DB·서비스·event sourcing이 필요하다고 한다.
04

더 파고들 거리

하나 더 질문하며 이해의 범위를 넓혀 보세요.

  • 읽기용 복사본을 둘 때 원본·현재 값·역사 snapshot과 재구축 책임을 어떻게 나누나요?
  • 본인 쓰기 뒤 조회에 필요한 최소 적용 위치를 어떻게 전달하고 기다리나요?
  • 원본 이벤트 재생에서 현재 외부 데이터와 부수 효과를 분리하려면 무엇을 저장하나요?

득점·감점 포인트는 학습용 자기 점검 기준이며, 특정 회사의 실제 채점표가 아닙니다.

원리부터 공부하고 싶다면

답변을 보충하는 개념·예제·슈도코드를 읽어 보세요.

← 전체 질문 보기