공동 폐쇄 원칙
다음은 CCP(Common Closure Principle, 공동 폐쇄 원칙)입니다.
패키지의 클래스들은 동일한 유형의 변경에 대해 닫혀 있어야 한다. 패키지에 영향을 주는 변경은 그 패키지에 속한 모든 클래스에 영향을 끼친다.
로버트 C. 마틴
즉, 어떤 두 클래스가 동일한 사유로 맞물려 변경되면 동일한 패키지에 있어야 한다는 것입니다. 가령 동일한 비즈니스 규칙도 상이한 측면을 구현한 클래스가 여럿 있을 수 있죠. 이 비즈니스 규칙이 나중에 바뀌어도 개발자는 가급적 소수(1개가 이상적임)의 패키지에 있는 코드만 고치면 될 수 있게 만들자는 것입니다. CCP를 잘 지키면 애플리케이션의 유지보수성이 현저히 향상됩니다.
CCP를 적용해서 마이크로서비스 아키텍처를 구축하면 동일한 사유로 변경되는 컴포넌트를 모두 같은 서비스로 묶을 수 있습니다. 요건이 바뀌어도 수정/배포할 서비스 개수는 줄어들겠죠. 가능하면 변경 영향도를 정확히 한 팀, 한 서비스에 국한시키는 것이 좋습니다. CCP는 분산 모놀리스 안티패턴(antipattern)의 해독제인 셈입니다.
밥 마틴은 SRP, CCP를 비롯하여 클래스, 패키지 설계 시 적용 가능한 11개의 ‘객체 지향 설계 원칙(The Principles of Object Oriented Design)’을 개발했습니다. 마이크로서비스 아키텍처 구축 시 정말 유용한 참고 자료이니 그가 쓴 글15을 꼭 한 번 읽어 보세요.
SRP, CCP와 더불어 비즈니스 능력/하위 도메인에 따른 분해는 애플리케이션을 서비스로 분해하는 훌륭한 길잡이입니다. 그러나 이런 좋은 기법도 성공적으로 적용하려면 트랜잭션 관리, IPC 등 몇 가지 이슈를 해결해야 합니다.