모든 소프트웨어 시스템은 이해관계자에게 서로 다른 두 가지 가치를 제공한다.
바로 행위(behaivor)와 구조(structure)가 그것이다.
[행위]
소프트웨어의 첫 번째 가치는 바로 행위다.
프로그래머를 고용하는 이유는 이해관계자를 위해 기계가 수익을 창출하거나 비용을 절약하도록 만들기 위해서다.
예를 들어
- 프로그래머는 이해관계자가 기능 명세서나 요구사항 문서를 구체화할 수 있도록 돕는다.
- 이해관계자의 기계가 이러한 요구사항을 만족하도록 코드를 작성한다.
- 만약 기계가 이러한 요구사항을 위반하면 프로그래머는 디버거를 열고 문제를 고친다.
많은 프로그래머가 이러한 활동이 자신이 해야 할 일의 전부라고 생각한다.
슬픈 일이지만 그들은 틀렸다.
[아키텍처]
소프트웨어의 두 번째 가치는 ‘소프트웨어(software)’라는 단어와 관련이 있다.
소프트웨어라는 단어는 ‘부드러운(soft)’ + 제품(’ware’)라는 단어의 합성어다.
제품이라는 단어는 상품(product)를 뜻하며, 우리는 부드러운 단어에서 두 번째 가치를 찾을 수 있다.
소프트웨어는 ‘부드러움을 지니도록’ 만들어졌다.
소프트웨어를 만든 이유는 기계의 행위를 쉽게 변경할 수 있도록 하기 위해서다.
소프트웨어가 가진 본연의 목적을 추구하려면 소프트웨어는 반드시 ‘부드러워’야 한다.
즉, 이해관계자가 원하는 기능으로 바꾸려면 변경사항을 간단하고 쉽게 적용가능해야 한다.
변경사항을 적용하는데 어려움은 변경되는 범위에 비례하지, 형태와는 관계없어야 한다.
소프트웨어 개발 비용의 증가를 결정 짓는 가장 큰 비용은 이 변경사항의 범위와 형태의 차이에 있다.
바로 이 때문에 개발 비용은 요청된 변경사항의 크기에 비례한다.
아키텍처는 형태에 독립적이어야 하고, 그럴수록 더욱 실용적이다.
[더 높은 가치]
기능의 가치가 높은가 아키텍처의 가치가 높은가?
다음의 양 극단의 사례를 검토해보자.
- 완벽하게 동작하지만, 수정이 아예 불가능한 프로그램을 내게 준다면 오구사항이 변경될 때 동작하지 않게 되고, 결국 프로그램은 쓸모가 없어진다.
- 동작은 하지 않지만 변경이 쉬운 프로그램을 준다면, 나는 프로그램을 돌아가게 만들고, 이 프로그램은 앞으로도 계속 유용한 채로 남는다.
[아이젠하워 매트릭스]
드와이트 D. 아이젠하워 미국 대통령이 고안한 중요성과 긴급성에 관한 매트릭스를 살펴보자.
내겐 두 가지 유형의 문제가 있습니다. 하나는 긴급하며, 다른 하나는 중요합니다. 긴급한 만주넨 중요하지 않으며, 중요한 문제는 절대 긴급하지 않습니다.

이 격언에는 엄청나게 중요한 진실이 담겨 있다.
소프트웨어의 첫 번째 가치인 행위는 긴급하지만 매번 높은 중요도를 가지는 것은 아니다.
소프트웨어의 두 번째 가치인 아키텍처는 중요하지만 즉각적인 긴급성을 필요로 하는 경우는 절대 없다.
따라서 다음과 같이 네 가지 경우에 대해 우선순위를 매길 수 있다.
- 긴급하고 중요한
- 긴급하지는 않지만 중요한
- 긴급하지만 중요하지 않은
- 긴급하지도 중요하지도 않은
아키텍처는, 즉 중요한 일은 이 항목의 가장 높은 두 순위를 차지하는 반면, 행위는 첫 번째와 세 번째에 위치한다는 점을 주목하자.
따라서 기능의 긴급성이 아닌 아키텍처의 중요성을 설득하는 일은 소프트웨어 개발팀이 마땅히 책임져야 한다.
[아키텍처를 위해 투쟁하라]
개발팀은 회사에서 가장 중요하다고 스스로 믿는 가치를 위해 투쟁하고, 다른팀들도 각자의 신념을 믿고 투쟁한다.
효율적인 소프트웨어 개발팀은 이러한 투쟁에서 정면으로 맞서 싸운다.
이러한 도전은 당신이 소프트웨어 아키텍트라면 두 배로 중요해진다.
하나만 기억하자. 아키텍처가 후순위가 되면 시스템을 개발하는 비용이 더 많이 들고, 일부 또는 전체 시스템에 변경을 가하는 일이 현실적으로 불가능해진다.
우리는 소프트웨어 개발자로서 끝까지 우리가 믿는 가치를 위해 투쟁하여야 한다!
'Book Notes' 카테고리의 다른 글
| [개발서적] Clean Architecture 4. 구조적 프로그래밍 (2) | 2025.11.04 |
|---|---|
| [개발서적] Clean Architecture 3. 패러다임 개요 (0) | 2025.11.04 |
| [개발서적] Clean Architecture 1. 설계와 아키텍처 (0) | 2025.11.01 |
| [개발서적] Clean Code 17. 냄새와 휴리스틱 (1) | 2025.10.28 |
| [개발서적] Clean Code 15. Junit 들여다보기 (0) | 2025.10.28 |