- 소프트웨어 아키텍처는 기술적 성취의 정점
- 소프트웨어 아키텍트는 프로그래며, 앞으로도 계속 프로그래머로 남는다
- 소프트웨어 아키텍트는 최고의 프로그래머이며, 프로그래밍 작업뿐만 아니라 동시에 나머지 팀원들이 생산성을 극대화할 수 있는 설계를 하도록 방향을 이끈다
- 프로그래밍 작업 지속 이유는 발생하는 문제를 경험해보지 않는다면 다른 프로그래머를 지원하는 작업을 제대로 수행 X
- 소프트웨어 시스템의 아키텍처란 시스템을 구축했던 사람들이 만들어낸 시스템의 형태
- 그 모양은 컴포넌트로 분할하는 방법, 분할된 컴포넌트를 배치하는 방법, 컴포넌트가 서로 의사소통하는 방식에 따라 정해짐
- 그 형태는 아키텍처 안에 담긴 시스템이 쉽게 개발, 배포, 운영, 유지보수 되도록 만들어진다
이러한 일을 용이하게 만들기 위해서는 가능한 한 많은 선택지를, 가능한 한 오래 남겨두는 전략을 따라야 한다
- 시스템 아키텍처는 시스템의 동작 여부와는 거의 관련이 없다
- 운영보다는 배포, 유지보수, 계속되는 개발 과정에 초점을 맞춘다
- 운영에 초점을 맞추는 것은 수동적이며 피상적인 것이지, 능동적이거나 본질적인 것은 아니다
- 아키텍처의 주된 목적은 시스템의 생명주기 지원
- 궁극적인 목표는 시스템의 수명과 관련된 비용은 최소화하고, 프로그래머의 생산성은 최대화
개발
- 시스템 아키텍처는 개발팀들이 시스템을 쉽게 개발할 수 있도록 만들어야 한다
- 소규모의 팀원으로 구성된 팀은 아키텍처 관련 제약들이 오히려 방해가 된다고 여길 가능성이 높다
- 대규모의 시스템 아키텍처는 시스템을 신뢰할 수 있고, 안정된 인터페이스를 갖춘, 잘 설계된 컴포넌트 단위로 분리하지 않으면 개발 진척 X
- '팀별 단일 컴포넌트' 아키텍처가 시스템을 배포, 운영 유지보수하는 데 최적일 가능성은 거의 없다
배포
- 소프트웨어 시스템이 사용될 수 있으려면 반드시 배포할 수 있어야 한다