효과적인 소프트웨어 아키텍처 관행은 제품 개발 조직이 더 나은 소프트웨어를 더 빠르게 생산할 수 있게 합니다. 하지만 이러한 효과적인 관행을 논의하기에 앞서, 먼저 소프트웨어 아키텍처라는 용어를 이해해야 합니다. 소프트웨어 아키텍처는 업계에서 자주 사용하는 용어지만 때로는 모호하게 사용하기도 합니다. 다만 이 책에서 다루는 내용은 엄격한 아키텍처 정의와 밀접하게 연관되어 있으므로 먼저 아키텍처부터 명확하게 정의해야 합니다.
소프트웨어 아키텍처는 자주 소프트웨어 설계와 혼용해서 사용합니다. 하지만 실제로 두 개념은 다릅니다. 소프트웨어 설계는 시스템 요소를 특정 시점에 맞게 구체적으로 나타내는 과정입니다. 예를 들어 시스템의 각 릴리스(release)1에 포함될 변경 사항을 어떻게 개발하고, 해당 변경 사항이 어떻게 동작하도록 할지 결정하는 과정은 소프트웨어 설계에 해당합니다.
시스템의 다음 버전을 만들 때는 이전 버전을 수정하여 새로 설계하고 그 변경 사항을 시스템에 적용합니다. 즉, 이전 설계를 완전히 버리고 처음부터 다시 시작하는 것이 아니라, 기존 설계를 기반으로 하여 설계합니다. 이에 따라 모든 설계는 항상 바로 이전 설계와 관련이 있습니다.