클린 아키텍처 스터디 3주차 후기: 컴포넌트 원칙의 현대적 재해석

소프트웨어 아키텍처 스터디 3주차에서는 로버트 C. 마틴의 『클린 아키텍처』 12, 13, 14장을 다루며 '컴포넌트'의 원칙을 깊이 있게 논의했습니다.

출간된 지 다소 시간이 흐른 이 책을 현대의 개발 환경(MSA, 클라우드 네이티브, 프론트엔드 프레임워크 등)에서 어떻게 받아들이고 적용해야 하는지, 스터디에서 도출된 인사이트를 바탕으로 정리했습니다.

클린 아키텍처 스터디 3주차 후기: 컴포넌트 원칙의 현대적 재해석
초기 애플리케이션에서의 메모리 단편화 현상, 이로 인해 링킹 로더가 등장하였다.


컴포넌트의 역사와 본질 (12장)

『클린 아키텍처』에서는 컴포넌트를 '독립적인 배포 및 개발이 가능한 단위'로 정의하며, 초창기 프로그램의 컴파일 및 로드 과정을 통해 그 기원을 설명합니다. 함수 라이브러리를 메모리의 고정된 주소에 할당하던 초기 방식의 한계를 극복하기 위해 재배치 가능한 바이너리(Relocatable Binary)링킹 로더(Linking Loader)가 등장했고, 이후 시스템의 병목을 해결하기 위해 링커와 로더가 물리적으로 분리되는 일련의 진화 과정을 짚어줍니다.
하지만 스터디에서는 이러한 물리적 진화 과정을 넘어, 현대의 관점에서 컴포넌트를 단순히 배포의 단위(jar, war, dll 등)가 아닌 논리적인 분리의 단위로 재해석해야 한다는 심도 있는 논의와 의견들이 오갔습니다.


컴포넌트 응집도 원칙: 균형의 예술 (13장)


클린 아키텍처는 컴포넌트를 구성하는 클래스들을 어떻게 묶을 것인지에 대해 세 가지 원칙을 제시합니다. 이 원칙들은 서로 상충하는 가치를 지니며, 프로젝트의 수명 주기에 따라 무게 중심이 이동합니다.

클린 아키텍처 스터디 3주차 후기: 컴포넌트 원칙의 현대적 재해석 - 이미지 2


3대 응집도 원칙

클린 아키텍처 스터디 3주차 후기: 컴포넌트 원칙의 현대적 재해석 - 이미지 3
실무적 통찰

컴포넌트 결합도 원칙: 의존성 관리 (14장)


컴포넌트 간의 관계를 어떻게 형성해야 하는지에 대한 원칙입니다.

3대 결합도 원칙

'안정성(Stability)'의 오해와 진실


일반적으로 '안정적인 모듈'이라고 하면 버그가 없고 견고한 코드를 떠올리기 쉽습니다. 하지만 아키텍처에서의 안정성은 다릅니다.

클린 아키텍처 스터디 3주차 후기: 컴포넌트 원칙의 현대적 재해석 - 이미지 4
안정성 지표

2024년, 우리는 왜 아직도 이 '역사책'을 읽는가?


『클린 아키텍처』는 구시대의 기술(C, 초창기 Java 등)을 배경으로 작성되어 현대 프레임워크의 생산성을 완전히 반영하지 못한다는 비판도 존재합니다. 그럼에도 불구하고 이 책을 읽고 논의하는 이유는 명확합니다.

커뮤니케이션의 기준점

아키텍처는 결국 커뮤니케이션의 도구입니다. 팀원마다 경험과 코딩 스타일이 다를 때, 합의를 이루기 위한 공통의 철학과 원칙이 필요합니다. 솔리드(SOLID) 원칙이나 컴포넌트 원칙은 기술 스택과 무관하게 팀 내 의사결정의 명확한 기준점을 제공합니다.

AI 시대와 아키텍처의 재발견


최근 LLM(대형 언어 모델)을 활용한 코드 분석 및 작성이 활발해지고 있습니다. 스터디 중 LLM을 통해 실제 프로젝트의 아키텍처를 분석해 본 결과, 흥미로운 사실을 발견했습니다.

마무리


소프트웨어의 본질은 결국 '변경'에 있습니다. 완벽한 초기 설계란 존재하지 않으며, 요구사항의 변화에 따라 컴포넌트의 응집도와 결합도를 지속적으로 리팩토링하는 것이 아키텍트와 엔지니어의 역할입니다.

원칙을 맹신하는 것이 아니라, 원칙을 바탕으로 팀을 설득하고 프로젝트에 맞는 실용적인 최적해를 찾아가는 과정이 중요합니다.

클린 아키텍처 스터디 3주차 후기: 컴포넌트 원칙의 현대적 재해석 - 이미지 5