티스토리 뷰

기초지식

CQRS 패턴 간단 정리

집사킴 2022. 10. 29. 00:13
728x90

CQRS 패턴이란?

Command Query Responsibility Segregation

: 명령(Command)과 질의(Query)의 책임을 분리하는 패턴

 

Command 명령

  • 시스템 데이터 변경 (ex. 주문 취소, 배송 완료)
  • create, update, delete

Query 질의

  • 시스템 데이터 조회 (ex. 주문 목록, 상품 상세)
  • read

Responsibility 책임

  • 구성요소의 역할
  • 구성 요소 (모델)
    • 클래스, 함수
    • 모듈/패키지
    • 웹서버/DB

분리 Segregation

  • 역할에 따라 구성요소 나누기

 

CQRS 구현 예시 (출처 : https://www.youtube.com/watch?v=xf0kXMTFJm8)

 

명령과 질의에 단일 모델을 사용할 경우

 
단일 모델 구현 예시. 요구사항이 증가함에 따라 Member객체에 다른 테이블들과 마구 엮임 (출처 : https://www.youtube.com/watch?v=xf0kXMTFJm8)
  • 코드 역할/책임 모호
  • 요구사항이 늘어가면서 Member객체에 주문테이블, 로그인 히스토리 테이블 등과의 결합도가 증가
  • 의미/가독성 등 나빠짐
  • 유지보수성 떨어짐
 
 

명령과 질의를 구분하는 이유

  • 명령과 질의는 다루는 데이터가 다름
    • 명령 : 한 영역의 데이터
    • (ex. 주문처리 - 주문테이블, 배송완료처리 - 배송테이블)
    • 질의 : 여러 영역의 데이터
    • (ex. 주문 목록 조회 - 주문, 유저, 상품 테이블이 엮임)
  • 명령과 쿼리는 코드 변경 빈도/사용자가 다름
  • 기능마다 성능 요구가 다름
    • 사용자의 상품목록조회는 빨라야 하지만, 백오피스의 판매수치 조회는 좀 느려도 괜찮다
  • 기능마다 서로 다른 성능 향상 방법 필요
    • 단일 모델로는 다양한 성능 향상 기법 적용이 어려울 수 있음
 

CQRS 패턴의 장점

  • 모델의 모호함이 없어진다
    • 명령 영역의 모델과 쿼리 영역의 모델이 무엇을 표현하는 지가 명확해진다
  • 코드 가독성과 유지보수성이 좋아질 가능성이 높아진다
  • 질의쪽엔 캐시를 적용하고 명령은 비동기로 처리하는 등 기능에 따른 성능 향상 기법 적용이 용이해진다

 

CQRS패턴을 사용하는 경우

  • 많은 사용자가 동일한 데이터에 병렬 액세스하는 경우
  • Read 수가 Write 수보다 훨씬 큰 경우
  • 시스템 확장성을 고려하는 경우

 

참고자료

CQRS 아는 척하기 1

CQRS 아는 척하기 2

728x90
댓글
300x250
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/07   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
글 보관함