worldint
mathengi
worldint
전체 방문자
오늘
어제
  • 분류 전체보기 (152)
    • infra, cloud (4)
      • aws (4)
    • TIL,WIL(일간,주간 회고) (57)
    • 컴퓨터 공학 (5)
      • 정보통신 (3)
      • 컴퓨터 구조 (2)
    • Math (1)
      • linear algebra (0)
      • 명제와 집합 (1)
    • Operating System (8)
      • Linux Ubuntu (1)
    • programming (66)
      • c , c++ (9)
      • c# (0)
      • java (2)
      • javascript (14)
      • Python (4)
      • github (1)
      • programing terms (12)
      • html, css (2)
      • docker (3)
      • algorithm_datastructure (5)
      • database (11)
      • flutter(dart) (2)
    • 항해99 부트캠프 (7)
      • 사전교육 (7)
    • 보안관련 (1)

블로그 메뉴

    공지사항

    인기 글

    태그

    • NVM
    • CloudFront
    • ci/cd
    • Blue/Green
    • MongoDB
    • 디비데드락
    • flutter #provider #error
    • node
    • docker
    • Javascript
    • ec2 #코드디플로이 #리눅스
    • EC2
    • db데드락
    • nodejs
    • NoSQL
    • MONGOOSE
    • AWS

    최근 댓글

    최근 글

    티스토리

    hELLO · Designed By 정상우.
    worldint

    mathengi

    CQRS 패턴
    programming/programing terms

    CQRS 패턴

    2023. 5. 17. 08:54

    CQRS 패턴이란

    command and query responsibility segregation의 약자이고

    명령과 조회의 책임분리를 의미한다

     

    도메인 모델을 command 연산과 query연산으로 분리시키는것이다

    query는 단순 조회를 뜻하고

    command는 단순조회를 제외한 나머지 연산들( crud에서 cud에 해당됨 ) 

     

    1단계

    가장 일반적인 단계는

    단일 DB에 command와 qeury모델을 분리시키는 방식이다

    2단계

    이렇게 command와 query에 책임이 분리되어 있으니

    이제 각기 다른 데이터베이스를 적용시킬 수 도 있어

    read는 NoSql

    write는 Sql 등 

    서비스에 더 잘 최적화된 디비를 선택해서 적용할수있다

     

     

     

    그럼 위와 같이 Polygrat 한 구조가 가능하다

    위의 구조에서는 동기화 처리를 위한 Broker의 가용성과 신뢰도가 보장되어야 한다

     

     

    3단계

    그리고 3번째 형태는 이벤트 소싱을 적용한 구조이다

    이벤트 소싱이란

    command가 발생하게 되면 이벤트로 전환해서 이벤트 스트림(Event Stream)을 별도의 Database에 저장하고

    이벤트 스트림을 저장하는 Database에는 오직 데이터 추가만 가능하고 계속적으로 쌓인 데이터를 구체화(Materialized) 시키는 시점에서 그때까지 구축된 데이터를 바탕으로 조회대상 데이터를 작성하는 방법을 말한다

    대부분 CQRS패턴을 적용하고자 할떄 이벤트 소싱이 적용된 구조를 선택한다

    CQRS패턴에 이벤트 소싱은 필수가 아니지만 이벤트 소싱에 CQRS는 필수라고 한다

     

    장점
    데이터소스(db서버)의 독립적인 크기 조정이 가능하다
    보통 read : write = 1000 : 1 이라고 한다
    read만 키울 수 있다

     

    단점
    코드를 분리시키기 때문에 복잡성이 올라간다
    command를 할 때
     data무결성이 일시적으로 깨진다
    최종적으로는 맞춰진다

     

    CQRS를 사용해야되는 경우
    많은 사용자가 동시에 동일한 데이터에 병렬로 접근하는 경우나
    read
    연산이 write연산보다 많은 경우

     

     

    참고

    https://wonit.tistory.com/628

    https://bluayer.com/37

    https://github.com/dhslrl321/cqrs-journey-guide-korean

     

     

    CQRS 패턴, 코드에 순식간에 적용해보기

    서론 평화롭게 프로젝트를 개발하고 있던 어느 날, 우연한 기회로 CQRS 패턴에 대해 이야기를 들을 일이 생겼다. 기존 구조는 R.C.Martin의 Clean Architecture를 따라서 작업을 해둔 상태였는데, 어떤 프

    bluayer.com

     

    CQRS 패턴에 대한 오해 풀기

    목차 도입 Query 와 Command 란? CQRS 란 CQRS 의 장단점 도입 회사 시스템이 전통적인 CRUD 애플리케이션에서 Event 기반의 시스템으로 바뀌어 가는 과정에 팀에 합류를 하게 되어 나의 최근 가장 큰 관심

    wonit.tistory.com

     

     

     

     

    'programming > programing terms' 카테고리의 다른 글

    스테이징 이란  (0) 2023.07.10
    URL에서 쿼리문자열과 parameter  (0) 2023.06.12
    데이터베이스의 세션이란 무엇인가  (0) 2023.05.13
    type-safe란  (0) 2023.04.23
    port & adapter 패턴(헥사고널 아키텍처)  (0) 2023.04.20
      'programming/programing terms' 카테고리의 다른 글
      • 스테이징 이란
      • URL에서 쿼리문자열과 parameter
      • 데이터베이스의 세션이란 무엇인가
      • type-safe란
      worldint
      worldint
      공부한 내용들, 트러블 슈팅, 아티클 번역 등등 올리는 블로그입니다

      티스토리툴바