★ 이 책의 대상 독자 ★
이 책에는 3가지 독자 유형이 있다.
1. 소프트웨어 프로젝트의 아키텍처 문서를 생성하는 책임을 맡은 소프트웨어 아키텍트: 이들에 대해서는 “나의 아키텍처에 수집할 정보는 무엇이며, 시기적절한 형식으로 명확하고 유용하게 의사소통하는데 사용할 수 있는 표기법과 기법은 무엇인가?”에 대한 질문에
대답할 것이다.
2. 아키텍트 또는 아키텍처 팀에게 받은 문서를 소화하고 사용해야 하는 아키텍처 이해당사자: 소프트웨어 아키텍트는 자신의 문서의 안내서로, 이 책을 제공해 특정한 절을 통해 문서 구조의 원칙, 표기법, 개념 또는 관례를 설명할 수 있다.
3. 소프트웨어 아키텍처에 관한 개요적인 개념을 배우고자 하는 사람: 소프트웨어 아키텍처(따라서 문서화)의 목적과 사용을 수립함으로써, 그리고 아키텍처의 생성과 의사소통에 중요한 기본적인 개념 집합을 수립함으로써, 이 책은 이 주제의 개요로서의 역할을 한다.
우리는 소프트웨어 엔지니어링의 개념에 대한 기본적인 사항을 알고 있다고 가정한다. 대부분의 경우에서 아키텍처 뷰와 아키텍처 스타일, 인터페이스와 같이 여러분이 알고 있는 기본 개념을 더 선명하고 명확하게 할 것이다.
★ 2판에 새로 추가된 것★
■ 몇 가지 새로운 아키텍처 스타일이 주류로 들어왔으며, 이 판은 이들을 문서화하는 것에 대해 이야기한다. 여기에는 서비스지향 아키텍처와 다중 티어 아키텍처, 관점지향 시스템을 위한 아키텍처가 포함된다. 또한 설치와 제품 환경뿐만 아니라 소프트웨어 시스템 데이터 모델의 아키텍처 수준 문서화를 중요한 스타일로 다룬다.
■ 이 판은 포괄적인 문서화보다는 작동하는 소프트웨어에 더 큰 가치를 두는 애자일 선언문과 일관적인 충고를 지향하는 애자일에 근거를 두고 작업했다.
■ 최고의 산업 관행을 반영해 더 근거 있고 체계적인 문서화를 다뤘다. 또한, 이해당사자가 의도한 대로 되어 있는지 아키텍처 문서를 검토하는 새로운 장을 추가했다.
■ 제시된 아키텍처 문서화의 템플릿은 그동안의 사용과 피드백을 반영해 향상되었다. 또한, 좀 더 유연하며, 다른 옵션으로 문서를 배열할 수 있게 했다.
■ 문서화된 소프트웨어 아키텍처의 포괄적인 예를 새로운 것으로 대체했다. 오늘날 산업의 주류 아키텍처는 웹 기반의 서비스지향 시스템이다. 이 책을 더 얇게 하고, 시간이 지나감에 따라 예제를 유지할 수 있게 하기 위해 예제를 온라인에 두었다. 그리고 많은 온라인 예제도 대체되거나 변경되었다.
■ 초판이 출간된 이래 UML은 2.0 이상의 버전으로 업그레이드되었다. 이것은 다양한 아키텍처 구조, 특히 컴포넌트와 커넥터를 좀 더 직접적으로 문서화할 수 있는 새로운 가능성을 열어주었다. 필요한 곳에 새로운 구조를 반영해 그림을 변경했다.
■ 이 판은 아키텍처를 문서화하는 데 유용한 UML과 AADL, SysML 등 3가지 중요한 언어와 표기법을 요약한 간결한 부록을 포함하고 있다. 각 부록은 해당 언어의 간단한 참조 가이드를 제공한다.
■ 마지막으로 이 판에는 초판이 출간된 이래 그동안 우리가 뷰와 그 너머와 함께 얻은 경험이 반영되었다. 이 경험은 문서화된 아키텍처를 생성하고, 다른 사람이 그렇게 하도록 도와주는 데서 온 것이다. 또한 다른 조직의 소프트웨어 아키텍처를 평가할 때와 같이 실제로 아키텍처 문서를 사용하는 데서 왔다. 마지막으로 이 책을 기반으로 하는 이틀간의 실무 과정에 참여한 수천명 이상의 참가자와 상호작용한 결과를 반영하였다. 소프트웨어 아키텍처를 실습하는 이들의 상호작용은 우리의 충고를 좀 더 규범적이고 선명하게 하며, 아키텍트가 매일 만나게 되는 문제와 상황을 반영하게 만들었다.
★ 지은이의 말 ★
이 책의 목적은 다음 질문에 대답하는 것이다.
“다른 사람이 성공적으로 사용할 수 있고, 유지보수하며, 시스템을 구축하는 데 사용할 수 있는 아키텍처를 어떻게 문서화하는가?”
이 책의 독자는 아키텍처 문서의 생산과 소비에 관련된 모든 사람들이다. 이 책의 목표는 아키텍처에 관한 어떤 정보가 수집해야 할 중요한 것인지를 결정하고, 그것을 수집하는 데 필요한 지침과 표기법, 예제를 제공하는 것이다. 우리는 이 책이 아키텍처를 구성하는 다양한 종류의 정보에 대한 실무 중심의 가이드가 되도록 했다. 또한, 어떤 정보가 문서화되어야 하는지를 결정하며, (UML을 비롯한 다양한 표기법의 예제와 함께) 다른 사람들이 아키텍처에 기반한 작업, 즉 구현과 분석, 복구를 수행하는 데 사용할 수 있도록 작성할 때 그 정보를 서술하는 방법을 보여주는 실제적인 가이드를 제공한다. 또한 다른 사람들이 사용할 수 있는 포괄적인 아키텍처 문서를 생성하는 방법을 보여준다.
대부분의 책에서 특정한 표기법(보통 UML)을 사용하는 방법을 설명하지만, 우리는 아키텍트가 정말로 필요한 것은 아키텍처와 이해당사자가 가장 우선하는 가이드며, 언어는 그것을 지원하는 부수적인 것이라고 믿는다. 그것이 이 책에서 제공하고자 하는 것이다.
★ 옮긴이의 말 ★
30년간의 소프트웨어 개발 경험 속에서 갖고 있는 하나의 신념은 ‘아키텍처가 튼튼한 시스템이 결국엔 성공한다.’는 것이다. 아키텍처가 튼튼한 시스템은 결합성이 적고 응집력이 강한 시스템이다. 이처럼 튼튼하게 아키텍처가 설계된 시스템을 구현하는 것은 결코 실패하지 않으며, 적어도 문제를 최소화할 수 있다. 업무 로직이 변경되는 경우라도 쉽게 대응할 수 있어 생명력이 긴 소프트웨어 시스템을 만들어낼 수 있다. 이러한 신념을 바탕으로 집필한 『CBD, What & How』(와우북스, 2008)와 『SOA, What & How』(와우북스, 2008)에서 각각 제시한 CBD와 SOA 방법론은 모두 튼튼한 아키텍처 설계를 강조하고 있다. 소프트웨어 아키텍처를 문서화하는 것은 아키텍트나 개발자들에게 어려운 작업일 수 있다. 그러나 소프트웨어 아키텍처를 올바르게 문서화하는 일은 다양한 관점을 갖고 있는 모든 이해당사자가 시스템의 소프트웨어에 대해 같은 이해를 공유하게 한다는 점에서 아주 중요하다.
이 책은 초판의 연장선상에 있으면서도 문서화 체계를 변화시켰다. 뷰 타입과 스타일, 뷰로 구분하던 것을 스타일과 뷰로 간결하게 바꾼 것이다. 이것은 『(개정3판)소프트웨어 아키텍처 이론과 실제』(에이콘, 2015)를 반영한 결과다. 이 책에서 설명한 소프트웨어 아키텍처 문서화 방법론의 이름은 뷰와 그 너머(View and Beyond)다. 특별히 이번 판은 근래에 많이 적용하고 있는 애자일 개발 프로젝트에서의 아키텍처 문서화 방법도 함께 설명하고 있다. 이 책에서 뷰와 그 너머 방법론과 애자일 철학은 중심점에서 완전히 일치한다고 단정한다. 즉, 정보가 필요 없다면 문서화하지 않는다는 것이다. 많은 애자일 프로젝트에서 소프트웨어 아키텍처 문서화를 무시하는 경향이 있지만, 이 책을 읽고 여러분은 애자일 프로젝트에서도 소프트웨어 아키텍처 문서화가 필요하다는 것을 깨닫게 될 것이다. 특별히 이번 판에서는 UML을 사용해 소프트웨어 아키텍처의 다양한 뷰를 표현하는 방법도 포함하고 있으며, 웹 기반의 서비스지향 시스템을 문서화하는 예제도 제공한다.