CQS (Command-Query Separation)

hi·2023년 1월 5일
0
  • CQS는 Bertrand Meyer의 "Object Oriented Software Construction" 에서 나온 개념
  • 커맨드와 쿼리를 분리하는 것

Command : 시스템 상태를 변경, 결과를 반환하지 않음
Query : 시스템 상태를 변경하지 않고(사이드 이펙트가 없음), 결과를 반환


그래서 왜 분리하는가?!

👉 메서드 호출시 내부에서 변경(사이드 이펙트)가 일어나는 메서드인지, 아니면 내부에서 변경이 전혀 일어나지 않는 메서드인지 명확히 분리하려는 의도

👉 따라서 데이터 변경 관련 이슈가 발생했을 때, 변경이 일어나는 메서드만 찾아보면 된다
(심각한 이슈들은 대부분 데이터를 변경하는 곳에서 발생)

👉 변경 메서드도 변경에만 집중하면 되기 때문에 유지보수가 더 좋아진다


권장하는 방법은

  • insert는 id만 반환하고 (조회를 위해)
  • update는 아무것도 반환하지 않고
  • 조회는 내부의 변경이 없는 메서드로 설계

참고
https://martinfowler.com/bliki/CommandQuerySeparation.html
https://hardlearner.tistory.com/383
https://www.inflearn.com/questions/27795/cqrs

0개의 댓글