한 도메인에 많은 API를 구현하다 보니 Service 클래스의 코드가 지나치게 길어졌다.
기능별로 코드를 찾기 어렵고, 가독성이 크게 떨어졌다.
CQRS (Command Query Responsibility Segregation) 란, 명령(Command) 과 조회(Query) 의 책임을 분리하는 패턴이다.
ProductService 를 아래 두 클래스로 분리하였다.
| 클래스 | 역할 | 주요 작업 |
|---|---|---|
ProductCommandService | 명령 (Command) | 생성, 수정, 삭제 등 데이터 변경 |
ProductQueryService | 조회 (Query) | 단건/목록 조회 등 데이터 읽기 |
서비스 레이어 분리에서 나아가, DB 모델까지 분리하는 풀(Full) CQRS로 확장할 수도 있다.
⚠️ 단, 이 단계는 MSA나 대규모 트래픽 환경에서 주로 적용되며, 현재는 서비스 레이어 분리만 적용하였다. CQRS의 장단점
현재 적용한 방식은 DB 분리 없이 서비스 레이어만 분리하는 경량(Lightweight) CQRS 이다.
따라서 위 단점들이 대부분 상쇄된다.