- George Fairbanks의 Just Enough Software Architecture는 언어 문법이나 UML 지식만으로는 좋은 객체지향 시스템과 아키텍처를 설계하기 어렵다는 문제의식에서 출발함
- 핵심은 위험 기반 아키텍팅으로, 위험이 작을 때는 과도한 설계를 피하고 성공을 위협하는 위험에는 더 엄밀한 기법을 적용함
- 아키텍처를 일부 전문가의 전유물이 아니라 모든 개발자가 이해해야 할 역량으로 다루며, 제약과 작은 변경이 시스템 속성에 미치는 영향을 설명함
- 개발 프로세스나 조직 운영보다 엔지니어링 기법에 집중해, 모델링과 아키텍처 분석으로 중대형 문제의 설계 트레이드오프를 다루게 함
- 구성은 위험 기반 소프트웨어 아키텍처와 아키텍처 모델링의 두 부분이며, 도메인 모델·설계 모델·코드 모델, 캡슐화, 컴포넌트와 커넥터 같은 추상화를 다룸
언어·UML 지식만으로는 부족한 설계 역량
- 저자는 소프트웨어 개발을 시작할 때 자신에게 필요했던 책을 만들겠다는 문제의식에서 출발함
- 당시에는 프로그래밍 언어나 객체지향 프로그래밍 책은 있었지만, 설계를 다루는 책은 적었음
- C++ 언어 기능을 아는 것만으로 좋은 객체지향 시스템을 설계할 수 없고, UML을 아는 것만으로 좋은 시스템 아키텍처를 설계할 수도 없음
위험에 맞춰 조절하는 아키텍팅
- 책의 핵심은 risk-driven architecting임
- 위험이 작을 때는 세밀한 설계가 필요 없고, 성공을 위협하는 위험이 있을 때는 엉성한 설계로 충분하지 않음
- 여러 Agile 지지자들은 일부 선행 설계가 도움이 될 수 있다고 보며, 이 책은 “충분한 만큼의 아키텍처”를 수행하는 방법을 다룸
- “one size fits all”식 프로세스를 피하고, 직면한 위험에 따라 아키텍처와 설계 노력을 조정하도록 안내함
- 대부분의 기법은 quick-and-dirty 수준부터 매우 엄밀한 수준까지 강도를 조절할 수 있음
아키텍처를 모든 개발자의 언어로 만들기
- 책은 아키텍처를 민주화하려는 목표를 가짐
- 조직에 소프트웨어 아키텍트가 있을 수 있고, 독자 자신이 아키텍트일 수도 있음
- 많은 아키텍트는 모든 개발자가 아키텍처를 이해하기를 원함
- 개발자가 제약의 이유와 작은 변경이 시스템 속성에 미치는 영향을 이해하지 못하면 설계 판단이 흔들릴 수 있음
- 아키텍처는 아키텍트만의 주제가 아니라 모든 소프트웨어 개발자에게 관련 있는 주제임
절차적 지식과 선언적 지식
- 책은 선언적 지식을 기르는 데 초점을 둠
- 테니스 공을 칠 수 있는 능력과 왜 칠 수 있는지 아는 것은 다르며, 이는 절차적 지식과 선언적 지식의 차이에 해당함
- 이미 시스템을 설계하고 구축하는 전문가라면 책의 여러 기법을 사용해 왔을 수 있음
- 책은 그동안 해온 일을 더 잘 인식하게 하고 개념에 이름을 붙여 줌
- 이런 선언적 지식은 초보 개발자를 멘토링하는 능력을 높이는 데 도움이 됨
프로세스보다 엔지니어링에 집중
- 소프트웨어 시스템을 설계하고 구축하는 사람은 일정, 자원 약속, 이해관계자 요구 등 여러 문제를 함께 다뤄야 함
- 많은 소프트웨어 아키텍처 책은 개발 프로세스와 조직 구조를 이미 다룸
- 이 책은 그와 달리 소프트웨어 개발의 기술적 부분과 시스템이 작동하도록 만드는 엔지니어링에 집중함
- 모델을 만들고 아키텍처를 분석해 원칙 있는 설계 트레이드오프를 할 수 있게 함
- 중대형 문제를 추론하는 데 쓰이는 기법을 설명하고, 전문 기법을 더 자세히 배울 수 있는 위치도 가리킴
여러 추상화 수준을 오가는 실용적 설계
- 책은 아키텍처를 실용적인 설계 활동으로 다룸
- 소프트웨어 아키텍처는 소프트웨어 설계의 한 종류이며, 설계 결정은 아키텍처에 영향을 주고 아키텍처도 설계에 영향을 줌
- 뛰어난 개발자는 장애물을 자세히 파고들어 이해한 뒤, 그 장애물의 성격을 전체 아키텍처와 연결함
- 이런 drill-down/pop-up 행동을 반영해 아키텍처부터 데이터 구조 설계까지 여러 추상화 수준의 모델을 다룸
구성과 제공 형식
- 책은 두 부분으로 구성됨
- Part I: Risk-Driven Software Architecture
- Part II: Architecture Modeling
- 일부 샘플 챕터를 하나의 PDF로 내려받을 수 있음
- 전자책은 Google Play에서 판매되며, DRM 없는 ePub, Mobi, PDF 세 가지 형식이 포함되고 가격은 $9.99임
- 하드백은 Amazon에서 제공됨
- Google Books와 Amazon Search Inside는 전체 텍스트 검색 가능한 버전을 제공함
다루는 범위와 제외하는 범위
- 책은 소프트웨어 구축과 관련된 소프트웨어 아키텍처에 집중함
- 소프트웨어가 엔지니어링 요구를 만족하도록 하는 기법을 설명함
- 엔지니어링 기법 자체가 대체로 프로세스에 독립적이기 때문에, 책도 대부분 프로세스에 구애받지 않음
- 다음과 같은 관리 활동 조언은 다루지 않음
- 아키텍트의 정치적 책임
- 특정 종류의 회의를 언제 열어야 하는지
- 이해관계자로부터 요구사항을 수집하는 방법
Part I: 위험 기반 소프트웨어 아키텍처
- 소프트웨어 아키텍처를 정확히 정의하기는 어렵지만, 몇 가지 성격은 분명함
- 소프트웨어 개발자는 다른 공학 분야의 엔지니어처럼 추상화와 모델을 사용해 크고 복잡한 문제를 해결함
- 소프트웨어 아키텍처는 시스템의 골격처럼 작동하고 품질 속성에 영향을 주며, 기능과는 직교하고 제약을 통해 시스템 속성에 영향을 줌
- 아키텍처는 다음 상황에서 특히 중요함
- 해법 공간이 작을 때
- 실패 위험이 높을 때
- 어려운 품질 속성 요구를 마주할 때
- 설계 방식은 architecture-indifferent design, architecture-focused design, architecture hoisting 중에서 선택할 수 있음
- 위험 기반 모델의 핵심 절차는 단순함
- 위험을 식별하고 우선순위를 매김
- 기법 집합을 선택해 적용함
- 위험 감소를 평가함
- 4장은 Home Media Player 시스템 예제로 위험 기반 모델 적용을 보여줌
- 팀 커뮤니케이션
- COTS 컴포넌트 통합
- 메타데이터 일관성 보장
- Part I은 모델과 소프트웨어 아키텍처 사용 조언으로 마무리됨
- 문제 해결에 모델을 사용함
- 제약을 신중하게 추가함
- 위험에 집중함
- 아키텍처 역량을 팀 전체에 분산함
Part II: 아키텍처 모델링
- Part II는 소프트웨어 아키텍처의 개념 모델을 형성하도록 돕는 데 초점을 둠
- 기본 모델 구조는 세 가지임
- 도메인 모델: 현실 세계의 사물에 대응함
- 설계 모델: 구축 중인 소프트웨어의 설계를 나타냄
- 코드 모델: 소스 코드에 대응함
- 선택된 세부사항을 보여주는 추가 모델인 뷰(view) 를 만들 수 있고, 이런 뷰는 viewtype으로 묶일 수 있음
- 캡슐화 경계를 만드는 것은 소프트웨어 아키텍처의 중요한 기술임
- 컴포넌트나 모듈 사용자는 내부 동작을 무시하고 다른 어려운 문제에 집중할 수 있음
- 캡슐화된 컴포넌트나 모듈의 작성자는 사용자를 흔들지 않고 구현을 변경할 자유를 얻음
- 이런 자유는 캡슐화가 효과적일 때만 가능하므로, 책은 이를 보장하는 기법을 다룸
- 여러 출처의 소프트웨어 아키텍처 기법을 통합함
- 품질 속성을 강조하는 기법
- 기능을 강조하는 기법
- 효과적인 모델을 만드는 실용적 방법
- 모델을 디버깅하는 방법
- Part II는 모델을 효과적으로 사용하는 조언과 함께, 해당 기술에서 마주칠 수 있는 함정도 다룸
- 마지막 목표는 추상화와 관계에 대한 풍부한 개념 모델을 갖추고, 코치가 경기를 보듯 소프트웨어 시스템을 볼 수 있게 하는 것임