『클린 아키텍처』에서는 컴포넌트를 '독립적인 배포 및 개발이 가능한 단위'로 정의하며, 초창기 프로그램의 컴파일 및 로드 과정을 통해 그 기원을 설명합니다. 함수 라이브러리를 메모리의 고정된 주소에 할당하던 초기 방식의 한계를 극복하기 위해 재배치 가능한 바이너리(Relocatable Binary)와 링킹 로더(Linking Loader)가 등장했고, 이후 시스템의 병목을 해결하기 위해 링커와 로더가 물리적으로 분리되는 일련의 진화 과정을 짚어줍니다.
하지만 스터디에서는 이러한 물리적 진화 과정을 넘어, 현대의 관점에서 컴포넌트를 단순히 배포의 단위(jar, war, dll 등)가 아닌 논리적인 분리의 단위로 재해석해야 한다는 심도 있는 논의와 의견들이 오갔습니다.
프론트엔드(React 등)나 백엔드(Spring Boot 등) 환경을 막론하고, 현대의 컴포넌트는 특정한 상태(State)와 도메인 지식을 캡슐화한 논리적 모듈을 의미합니다. 내부의 복잡한 알고리즘을 알지 못하더라도, 인터페이스 호출만으로 명확한 기능 수행이 가능해야 합니다.
단순히 기술적 계층(Layer)에 따라서만 패키지를 나누는 관행을 넘어, 주문(Order), 결제(Payment) 등 도메인 컨텍스트를 기준으로 관심사를 분리하는 것이 현대적인 (특히 도메인 주도 개발 패러다임에서의) 컴포넌트 설계의 방법입니다.
컴포넌트 응집도 원칙: 균형의 예술 (13장)
클린 아키텍처는 컴포넌트를 구성하는 클래스들을 어떻게 묶을 것인지에 대해 세 가지 원칙을 제시합니다. 이 원칙들은 서로 상충하는 가치를 지니며, 프로젝트의 수명 주기에 따라 무게 중심이 이동합니다.