CQS 패턴, CQRS 패턴
작성일
CQS 패턴, CQRS 패턴에 대해 알아보기 전에 주요 용어인 커맨드
와 쿼리
에 대해 알아보자.
커맨드(Command)
명령(command)
는 시스템의 상태를 변경하는 작업을 의미한다. 예를 들어, 데이터를 삽입, 수정, 삭제하는 작업이 명령에 해당된다. 명령은 주로 void 형태의 메서드로 구현하며 메서드 호출 후 시스템 상태가 변경된다.
쿼리(Query)
조회(Query)
는 시스템의 상태를 조회하는 작업을 의미한다. 예를 들어, 데이터를 조회하는 작업이 조회에 해당된다. 조회는 일반적으로 시스템 상태를 변경하지 않으며 데이터를 반환하는 형태의 메서드로 구현된다.
CQS 패턴
커맨드와 쿼리에 대해 알아보았는데 그렇다면 커맨드와 쿼리의 분리가 무엇일까?
커맨드와 쿼리의 분리(Command Query Separation)를 줄임말로 CQS
라 한다.
CQS
는 디자인 패턴 중 하나로 명령과 조회를 분리하는 것을 추구한다. 또한, 명령과 조회는 각각 다른 요구사항과 비즈니스 로직을 가지고 있기 때문에 분리함으로써 각각의 기능을 독립적으로 변경할 수 있다. 이러한 CQS의 특징은 코드의 가독성, 유지보수성, 테스트 용이성을 개선할 수 있게 도와준다.
CQS는 객체지향 프로그래밍에서 매우 유용한 개념이고 SOLID 원칙 중 하나인 SRP(단일 책임 원칙)과 관련이 있다. SRP도 하나의 클래스는 하나의 책임만 가져야 한다는 원칙인데 CQS는 이를 더욱 구체화한 개념으로 명령과 조회를 분리함으로써 하나의 클래스가 여러가지 책임을 수행하는 것을 방지한다.
실무에서 개발을 할 때 권장하는 방법은 INSERT는 ID만 반환하고 UPDATE, DELETE는 void 형태의 메서드로 구현하는 것이다. 또한, SELECT는 내부의 변경이 없는 메서드로 설계하는 것이 좋다. 이 개념은 개발 전반에 기본 개념으로 생각하는 것이 좋다.
CQRS 패턴
CQRS 패턴
은 명령과 조회를 담당하는 모델을 분리하는 패턴이다. 도메인 모델에서 명령(Command)과 조회(Query)를 다른 모델로 분리하여, 명령 처리 모델과 조회 모델을 최적화할 수 있도록 한다. 즉, CQRS는 명령 처리와 조회 처리를 최적화하기 위한 패턴이다.
- 읽기 모델: 클라이언트에게 제공되는 데이터 모델. 일반적으로 조회 기능에 사용한다.
- 쓰기 모델: 클라이언트에서 받은 데이터를 저장하고 갱신하는 데이터 모델. 일반적으로 입력, 갱신, 삭제 등의 기능에 사용된다.
CQRS 패턴은 명령 처리 모델과 조회 모델이 서로 다른 저장소를 사용할 수 있으며, 각각의 모델이 서로 다른 스케일링 요구사항을 가질 때 유용하다. 또한, CQRS 패턴은 명령 처리 모델과 조회 모델을 각각 별도로 구현하므로, 시스템의 성능을 높일 수 있다.
CQS 패턴과 CQRS 패턴의 차이점
CQS 패턴과 CQRS 패턴은 비슷한 개념이지만, CQRS 패턴은 명령(Command)과 조회(Query)를 담당하는 모델을 분리하여 성능을 최적화하는 패턴이며, CQS 패턴은 명령과 조회를 분리하여 코드의 가독성과 유지보수성을 개선하는 패턴이다.