[매일매일] 백엔드 기술 일기: CQRS 패턴이란? — 명령과 조회를 분리해보자!
오늘은 백엔드 설계 패턴 중 하나인 CQRS(Command Query Responsibility Segregation) 패턴에 대해 공부해봤습니다.이 패턴은 복잡한 시스템을 보다 명확하게 분리하고 유지보수를 용이하게 만드는 데 큰 도움을 줍니다.
🧠 CQRS 패턴이란?CQRS는 명령(Command) 과 조회(Query) 를 책임(Responsibility) 별로 분리(Segregation) 하는 설계 패턴입니다.명령(Command) = 시스템의 상태를 변경하는 작업예: 주문 생성, 결제 처리, 정보 수정조회(Query) = 시스템의 상태를 읽는 작업예: 주문 내역 조회, 사용자 정보 보기📌 즉, 한 개의 모델이 모든 책임을 지는 대신,변경은 Order 같은 명령 모델조회는 OrderData 같은 조회 모델로 역할을 나눠서 구현합니다.
🛠️ 예시로 보는 CQRS
💡 Order 리소스를 관리하는 경우
기존 방식 (단일 모델)
Order order = orderRepository.findById(id); order.cancel(); order.getCreatedAt();
CQRS 방식Command 모델 → Order: 주문 생성, 수정, 취소 등 변경 처리Query 모델 → OrderData: 주문일자, 상태 등 조회 처리
✅ 장점 정리1. 책임이 분리되어 코드가 명확해짐→ 각 모델이 하나의 역할에만 집중하므로 유지보수성 향상2. 성능 최적화에 유리→ 명령에는 트랜잭션이 강한 RDB,→ 조회에는 빠른 응답의 NoSQL 또는 캐시 사용 가능3. 다양한 기술 혼용 가능→ 명령에는 JPA, 조회에는 MyBatis 등 각각에 최적화된 도구 선택 가능
⚠️ 단점 정리구현이 복잡해질 수 있음인프라 구성 및 데이터 동기화(예: Kafka, Event Store 등) 필요작은 프로젝트에는 오히려 과도한 설계일 수 있음
📚 추천 자료 모음https://www.youtube.com/watch?v=xf0kXMTFJm8
https://www.youtube.com/watch?v=H1IF3BUeFb8
https://www.youtube.com/watch?v=fg5xbs59Lro
https://www.youtube.com/watch?v=704qQs6KoUk
https://medium.com/coupang-engineering/%EB%8C%80%EC%9A%A9%EB%9F%89-%ED%8A%B8%EB%9E%98%ED%94%BD-%EC%B2%98%EB%A6%AC%EB%A5%BC-%EC%9C%84%ED%95%9C-%EC%BF%A0%ED%8C%A1%EC%9D%98-%EB%B0%B1%EC%97%94%EB%93%9C-%EC%A0%84%EB%9E%B5-184f7fdb1367
대용량 트래픽 처리를 위한 쿠팡의 백엔드 전략 마이크로서비스로 고객에게 데이터 서빙하기: 고가용성, 고처리량, 그리고 지연시간 최소화 — Part 1 medium.com
https://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/modernization-data-persistence/cqrs-pattern.html
CQRS 패턴 - AWS 권장 가이드 CQRS(명령 쿼리 책임 분리) 패턴은 데이터 변형 또는 시스템의 명령 부분을 쿼리 부분과 분리합니다. 처리량, 지연 시간 또는 일관성에 대한 요구 사항이 서로 다른 경우 CQRS 패턴을 사용하여 업데이트와 쿼리를 분리할 수 있습니다. CQRS 패턴은 다음 다이어그램과 같이 애플리케이션을 명령 측과 쿼리 측의 두 부분으로 분할합니다. 명령측은 create , update , delete 요청을 처리합니다. 쿼리 측에서는 읽기 전용 복제본을 사용하여 docs.aws.amazon.com
✍️ 마무리 메모처음에는 헷갈릴 수 있지만, “조회는 읽기만! 변경은 명확하게!” 라는 철학을 이해하면 CQRS는 훌륭한 아키텍처 전략이 됩니다.