명령-조회 분리(CQS) - 간단하고 강력한 디자인 패턴

소프트웨어 개발에서는 코드의 가독성과 유지 보수성을 높이는 다양한 디자인 패턴이 있다. 이 중에서 Command Query Separation (CQS)는 간단하지만 강력한 힘을 가진 패턴이다.

CQS는 논리적인 함수 설계 원칙으로, 함수는 Command와 Query 중 하나의 역할만 수행해야 한다는 원칙을 담고 있다.

Command와 Query

Command는 데이터를 변경하는 역할을 수행한다. 상태를 바꾸는 작업을 수행하지만, 반환값은 없다. Query는 데이터를 반환하는 역할을 수행한다. 데이터를 조회하거나 계산 결과를 반환하지만, 상태를 변경하지 않는다. 이 두 가지 역할을 분리함으로써, 함수의 목적이 명확해지고 코드의 가독성이 향상된다.

CQS를 코드에 적용하면 코드 길이는 조금 더 길어질 수 있지만, 결과적으로 깔끔하고 가독성 높은 코드가 만들어진다.

또한, 함수의 이름을 통해 해당 함수가 Command인지 Query인지 쉽게 확인할 수 있게 네이밍을 하는 것도 중요하다. 예를 들어, updateUserData는 Command의 역할을 수행하고, getUserData는 Query의 역할을 수행함을 이름에서 직접 알 수 있다.

CQS와 CQRS

CQS는 함수 레벨에서 적용되는 개념이며, 이를 전체적인 서비스 아키텍처에 적용한 것이 CQRS(Command Query Responsibility Segregation)다.

CQRS는 읽기(Query)와 쓰기(Command)를 완전히 분리하여 시스템을 설계하는 패턴으로, 대규모 분산 시스템에서 특히 유용하다.

마무리

CQS는 간단한 원칙에 기반한 강력한 소프트웨어 디자인 패턴이다. 이 원칙을 코드에 적용하면 코드의 명확성과 가독성이 향상되고, 코드의 유지 보수가 용이해진다. 따라서 CQS는 소프트웨어 개발의 효율성을 높이는 중요한 도구가 될 수 있다.


Written by@박대성

독서와 지식관리에 관심이 많은 개발자

GitHub