[Architecture] MSA : CQRS

NaSC·2022년 12월 29일
0

CQRS란?

  • Command 와 Query 를 분리하자!

Command

  • 시스템에 어떠한 변경을 가하는 행위를 하는 것을 말한다.
  • Command 성 함수는 시스템의 상태를 변경시키는 대신 값을 반환하지 않아야 한다. (void)

Query

  • 상태를 관찰할 수 있는 행위
  • Query 성 함수는 시스템의 상태를 단지 반환하기만 하고 상태를 변경시키지 않아야 한다.

장점

1. 도메인 로직에만 집중할 수 있게 된다

  • Command 와 Query 를 분리했기 때문에 OCP 를 준수하는 도메인 모델을 만들 수 있다.
  • 이를 통해 결국 도메인 로직에 비즈니스 로직을 집중시킬 수 있다

2. 데이터소스의 독립적인 크기 조정이 가능하다

  • 보통 read 와 write 의 비율은 1000 : 1 이다. 그러므로 write db 가 물리적으로 나뉘어져 있다면 해당 db 인스턴스는 작게 유지하고 read db 인스턴스에 더 높은 투자를 할 수 있다.

3. 단순한 쿼리

  • Query side 에서는 Materialized View 를 이용할 수 있는데, 이를 통해서 복잡한 조인 쿼리 없이 단순한 쿼리를 이용해서 원하는 정보를 얻어올 수 있다

단점

1. 복잡성이 올라간다

  • command side 와 query side 를 명시적으로 분리하기 때문에 복잡성이 올라간다.

2. 즉시적인 일관성이 보장되지 않는다

  • command 에 따른 data 의 무결성이 잠시동안 깨질 수 있다. 이 말은 데이터의 consistency 가 항상 동일하지 않다. 하지만 최종적으로는 데이터가 맞춰질 것이니 Eventual Consistency라고 할 수 있다.

참조
https://wonit.tistory.com/628

profile
데이터엔지니어 😘

0개의 댓글