소프트웨어 아키텍처 문서화
- 원서명Documenting Software Architectures: Views and Beyond (ISBN 9780201703726)
- 지은이폴 클레멘츠, 데이비드 갈란, 로버트 노드, 리드 리틀, 펠릭스 바흐만, 렌 베스, 쥬디스 스태포드, 제임스 이버스
- 옮긴이송재하, 박미율, 이진희, 김정호
- ISBN : 9788960770737
- 40,000원
- 2009년 02월 10일 펴냄
- 페이퍼백 | 560쪽 | 188*255mm
- 시리즈 : 소프트웨어 아키텍처
판매처
개정판책 소개
소프트웨어 아키텍처를 다루는 실무자들이 꼭 읽어야 할 책. 소프트웨어 아키텍트로서 저자들의 폭넓은 경험을 바탕으로 어떤 정보를 문서에 기록해야 하는지 결정하고, 그런 다음에 필요한 지침들과 UML 등 다양한 표기법으로 작성한 예제들을 가지고 누구나 이해할 수 있는 형태로 아키텍처를 표현하는 방법을 보여준다.
[ 소개 ]
정말 간단한 것 외에 모든 소프트웨어 시스템을 수립할 때는 아키텍처에 큰 관심을 기울여야 한다. 프로젝트에 관련된 많은 이해관계자 입장에서 프로젝트의 모든 단계를 연결해 주는 개념적 접착제 역할을 하는 바로 그 소프트웨어 아키텍처 말이다. 문제를 제대로 해결할 수 있는 아키텍처가 없으면 프로젝트는 휘청거리다가 결국 실패하고 말 것이다. 물론 뛰어난 아키텍처가 있다고 해도 그것을 사람들에게 제대로 이해시키거나 전달하지 못한다면, 다시 말해 제대로 문서화하지 못한다면, 프로젝트가 제대로 성공한다고 보기 어렵다.
요즘 들어서 아키텍처가 매우 중요한 요소로 널리 받들어지기는 하지만, 언어나 표기법에 얽매임 없이 제대로 포착해내는 방법이나 지침이 아직은 뚜렷이 없었다. 이 책 『소프트웨어 아키텍처 문서화』에서는 저자들의 폭넓은 경험을 바탕으로 어떤 정보를 문서에 기록해야 하는지 결정하고, 그런 다음에 필요한 지침들과 UML 등 다양한 표기법으로 작성한 예제들을 가지고 누구나 이해할 수 있는 형태로 아키텍처를 표현하는 방법을 보여준다. 강력한 아키텍처를 만들어내려면 그 결과로 나올 아키텍처를 설명하는 일도 매우 상세하고도 깔끔하게 해낼 수 있어야 하고, 아키텍처의 구성도 잘해야 한다. 그래야 사람들이 필요한 정보를 빠르게 찾아낼 수 있다.
[ 이 책에서 다루는 내용 ]
■ 좋은 문서를 만드는 일곱 가지 규칙
■ 소프트웨어 아키텍처를 활용하는 용도, 목표, 전략
■ 아키텍처 뷰와 스타일에 대한 일반적인 소개와 구체적인 예제
■ 소프트웨어의 인터페이스와 행위에 대한 문서화하는 방법
■ 정보를 수집해서 일관성을 갖춘 패키지로 만드는 데 도움이 되는 문서 양식
[ 이 책의 구성 ]
서장에서는 이 책을 읽는데 꼭 필요한 개념과 용어에 대해 정리한다. 여기서는 소프트웨어 아키텍처 문서를 어떻게 사용할 것이고, 그것이 왜 중요한지를 살펴본다. 그리고 아키텍처 뷰타입과 스타일과 뷰라는, 이 책에서 채택한 문서화 접근법의 근간을 이루는 세 가지 개념을 정의한다. 또한 좋은 문서를 만드는 7가지 규칙에 대해서도 소개한다.
1부. 소프트웨어 아키텍처 뷰타입과 스타일에서는 소프트웨어 아키텍처 문서화에 쓰이는 기본적인 도구인 뷰타입을 소개한다. 뷰타입이란 뷰에서 제공되는 정보의 종류를 명세해 놓은 것이다. 뷰타입은 기본적으로 모듈, 컴포넌트와 커넥터, 할당이라는 세 가지가 있다. 개별 뷰타입 내에는 여러 가지 아키텍처 스타일이 있다. 아키텍처 스타일은 뷰타입을 특화 시켜 놓은 것으로 보면 된다. 1부 도입부에 1장부터 5장에 걸쳐 설명할 스타일들에 대한 간략한 목록을 넣어 놓았다.
2부. 실전 소프트웨어 아키텍처 문서화에서는 제대로 된 아키텍트라면 반드시 만들어 내야 하는 완전한 구성의 아키텍처 문서 패키지에 중점을 둔다. 다시 말해 2부에서는 1부에서 제시한 그림을 완성하는 과정을 설명한다.
[ 이 책의 대상 독자 ]
이 책은 소프트웨어 프로젝트에서 아키텍처 문서를 작성하는 책임을 진 아키텍트와 기술문서 작성자들을 주 대상으로 해서 썼다. 물론 아키텍처 문서를 받아서 활용하는 입장에 있는 사람들도 함께 염두에 뒀다. 소프트웨어 아키텍트들은 자신이 작성한 아키텍처 문서와 함께 이 책을 제공하고 문서화 구성 원칙, 표기법, 개념, 관례 등을 설명한 해당 절을 적어놓는 방식을 활용하면 좋을 것이다.
이 책은 기본적으로 독자들이 소프트웨어 아키텍처 개념과 친숙한 상태에 있다고 가정하고 썼다. 물론 관련 배경지식을 어디서 얻을 수 있는지 정보도 제공했다. 앞으로 여러 차례에 걸쳐, 독자들이 이미 친근할 만한 아키텍처 뷰, 아키텍처 스타일, 인터페이스 등과 같은 기본 개념들에 대해 좀 더 명확하게 다듬어서 설명할 것이다.
[ 추천의 글 ]
10년 전에 나는 새롭고 야심 찬 제어통제 시스템을 만드는 프로젝트의 아키텍처팀을 이끌게 됐었다. 시작은 별로 매끄럽지 않았지만, 아키텍처 설계 작업이 점점 제 속도를 내며 진행돼 갔다. 아키텍트들은 작업을 진행하면서 새로운 것을 고안해 내고 문제를 해결하며, 설계해서 실제로 돌려 보기도 하면서 흥미진진해했다. 우리는 브레인스토밍 회의를 여러 번 진행했고, 그때마다 화이트보드는 단편적인 설계안들로 메워졌고, 공책은 메모로 가득 차 갔다. 그 과정에서 다양한 프로토타입을 만들어 우리의 이론을 검증하거나 기각했다. 개발팀의 규모가 커짐에 따라, 아키텍트들은 점점 더 많은 사람에게 최신 아키텍처 원칙들을 설명해야만 했다. 설명을 들어야 할 사람 중에는 신임 개발자들뿐만 아니라 개발 그룹이 아닌 부서에서 온 사람들도 있었다. 그 중 일부는 이런 새로운 종류의 소프트웨어 아키텍처 개념에 끌렸고, 일부는 이 아키텍처가 자신들에게 어떤 영향을 미치는지 알고 싶어 했다. 다시 말해 계획수립, 팀 또는 하부조직 구성, 시스템 납품, 시스템 부품 구매 과정에 끼치게 될 영향 등을 알고자 했다. 이 아키텍처를 설계하는 데 영향을 끼치고 싶어하는 이들도 있었다. 게다가 개발과 거리가 있는 고객이나 잠재고객들도 한자리 끼고 싶어했다. 이에 따라 아키텍트들은 짧게는 몇 시간에서 길게는 며칠까지 상당한 시간을 들여서 다양한 형태와 수준으로, 각양각색의 청중에게 맞는 어투로 아키텍처를 설명해야만 했다. 결국 각 부서에서 온 청중들이 아키텍처를 더 잘 이해할 수 있었다.
이렇게 의사소통을 하는 데 중심이 잡히자 우리의 역량은 서서히 강화됐다. 한쪽에서는 아키텍처를 설계하고 검증하느라 바빠졌고, 다른 한쪽에서는 가끔 많은 청중을 모아놓고 작업해 놓은 아키텍처의 내용이 무엇인지, 왜 그렇게 돼 있는지, 다른 해결책은 왜 선택하지 않았는지를 발표했다. 그러나 그것이 과했던지 프로젝트가 몇 달 정도 진행된 후에는 우리 내부에서도 스스로 결정해 놓은 아키텍처의 모습에 대해 이견이 생기기 시작했다.
이로 인해 우리는 결국 ‘기록되지 않은 것은 존재하지 않는다’라는 합의점에 이르게 됐다. 이 원칙은 그 후 두 해 동안 아키텍처팀 내에서 중심사상이 됐다. 고대 중국의 철학자인 노자는 도덕경에서 이렇게 설파했다.
남들이 나의 일을 궁금해하도록 놓아두라.
나중에 가서 그냥 결과만을 알려 주라.
(36장)
우리가 논의했거나 주장했거나 상상했거나 심지어 칠판에 초안까지 적어 놓았거나 상관없이 무엇이든 아키텍처가 될 수 있었다. 그러나 이 시스템에서는 오직 하나의 주력 문서에 기록된 것만이 실제 아키텍처였다. 그 문서가 바로 소프트웨어 아키텍처 문서(SAD, Software Architecture Document)다. 아키텍처적인 요소와 아키텍처적인 결정 중에서 이 문서에 적혀 있지 않으면 실제로 존재하지 않는 것이다. “SAD에 들어 있지 않으면 실제로 존재하지 않는 것이다”라는 이 한 가지 규칙 덕택에 문서를 계속 개선하고 거의 주 단위로 갱신할 수 있게 됐다. 또한 실제로 시도해 보지 않은 의견들이 분분하게 떠돌아다니는 것이 프로젝트에서 가장 혼동을 일으키는 요소라고 봤을 때, 이런 의견들을 모두 배제할 수 있다는 점도 장점이었다.
소프트웨어 아키텍처 문서는 곧 프로젝트 활동의 중심 요소가 됐다. 아키텍처 문서는 우리의 생각을 남들이 들여다볼 수 있게 해 주는 최적의 문서일 뿐만 아니라, 우리가 자리를 비우게 되더라도 다른 사람들이 불편하지 않게 됐고, 우리의 설계가 공격받을 때는 방패막이 역할도 했다.
그 당시 우리가 직면했던 문제 중에서 가장 핵심적인 것들은 다음과 같다. 소프트웨어 아키텍처 중에서 어떤 것을 문서화해야 할까? 그것을 어떻게 문서화할까? 구성은 어떤 식으로 해야 할까? 표기법은 어떤 것을 사용할 것인가? 얼마나 자세히, 얼마나 추상적으로 표현해야 할까? 우리 시스템만큼 야심 찬 시스템을 기술해 놓은 아키텍처 기술서도 사실 드물었다. 우리는 필요한 것이 생길 때마다 새로 만들어냈다. 이 과정에서 아키텍처라는 것이 평면적인 것이 아니라 일종의 입체적인 실체라는 사실을 곧 깨닫게 됐다. 거기에는 여러 가지 측면이 얽혀 있었고, 그중에서 몇 가지 측면(뷰라고도 한다)은 소수의 참가자에게만 관심을 끌었다. 우리는 문서를 읽어야 할 많은 사람이 500그램 가까이 되는 무게의 문서를 만들어 놓으면 열어보지도 않으리라는 사실을 알았다. 게다가 이런 문서들은 갱신하기도 매우 어려워 보였다. 그리고 어떤 선택을 내렸을 때 그에 대한 근거를 제시하지 않으면 다시 재현해내기가 불가능하다는 사실도 깨달았다. 또한 예리한 시각을 지닌 이해관계자가 새로 등장할 때마다 이런 사실이 다시 문제가 됐다. 우리는 시각적인 표기법을 선택했다. 표기법을 고를 때는 지나치게 모호하거나 헷갈리지 않되 또한 너무 난해하거나 복잡하지도 않은 것으로 했다. 참가자들 대부분의 기를 초장에 꺾어버리지 않도록 말이다.
이제 소프트웨어 아키텍트들은 자신들이 만드는 소프트웨어 아키텍처를 어떤 식으로 문서화할지 결정하는 데 매우 좋은 시작점에 서 있다. 손쉽게 할 수 있기 때문이다. 이 책의 저자들은 내가 겪었던 것과 비슷한 경험을 수없이 겪어 오면서 그 과정에서 깨달은 중요한 내용들을 뽑아 냈다. 이 책의 저자들은 여러 소프트웨어 아키텍처 문서를 참고했다. 또한 연구 자료들을 검토하고 출간된 모든 책들을 연구한 다음, 표준적인 요소를 점검하고 그 과정에서 얻은 지혜를 모두 정리해서 이 안내서를 만들어냈다. 따라서 이 책은 독자들이 소프트웨어 아키텍처 문서를 작성할 때 알아야 할 핵심적인 내용으로 가득 차게 됐다. 이 책에는 소프트웨어 아키텍처의 범위나 구성, 사용하거나 사용하지 말아야 할 기법이나 도구, 표기법은 물론 비교법이나 조언, 경험법칙 등에 대한 안내도 담았다. 또한 이 책에는 처음 시작할 때 유용하게 활용할 수 있을 뿐만 아니라, 방향을 잃고 절망할 때도 계속해서 방향을 잡아주는 역할을 해줄 문서양식도 들어 있다.
이 책의 가치는 실로 엄청나다. 소프트웨어 아키텍처를 기술해서 여러 이해관계자에게 알리는 일은 매우 중요한 작업이다. 이 지침서는 그 과정에서 발생할 수 있는 수 개월 간의 실패와 반복의 시간을 줄이고, 쓸데없는 불편함을 많이 제거해줄 것이며, 궁극적으로 이런 모든 시도 자체를 무의미하게 만드는 뼈저린 실수들을 많이 줄여줄 것이다. 소프트웨어 아키텍트들이 책장에 꼭 갖춰 놓아야 할 중요한 참고서로 자리 잡으리라 믿는다.
[ 소개 ]
정말 간단한 것 외에 모든 소프트웨어 시스템을 수립할 때는 아키텍처에 큰 관심을 기울여야 한다. 프로젝트에 관련된 많은 이해관계자 입장에서 프로젝트의 모든 단계를 연결해 주는 개념적 접착제 역할을 하는 바로 그 소프트웨어 아키텍처 말이다. 문제를 제대로 해결할 수 있는 아키텍처가 없으면 프로젝트는 휘청거리다가 결국 실패하고 말 것이다. 물론 뛰어난 아키텍처가 있다고 해도 그것을 사람들에게 제대로 이해시키거나 전달하지 못한다면, 다시 말해 제대로 문서화하지 못한다면, 프로젝트가 제대로 성공한다고 보기 어렵다.
요즘 들어서 아키텍처가 매우 중요한 요소로 널리 받들어지기는 하지만, 언어나 표기법에 얽매임 없이 제대로 포착해내는 방법이나 지침이 아직은 뚜렷이 없었다. 이 책 『소프트웨어 아키텍처 문서화』에서는 저자들의 폭넓은 경험을 바탕으로 어떤 정보를 문서에 기록해야 하는지 결정하고, 그런 다음에 필요한 지침들과 UML 등 다양한 표기법으로 작성한 예제들을 가지고 누구나 이해할 수 있는 형태로 아키텍처를 표현하는 방법을 보여준다. 강력한 아키텍처를 만들어내려면 그 결과로 나올 아키텍처를 설명하는 일도 매우 상세하고도 깔끔하게 해낼 수 있어야 하고, 아키텍처의 구성도 잘해야 한다. 그래야 사람들이 필요한 정보를 빠르게 찾아낼 수 있다.
[ 이 책에서 다루는 내용 ]
■ 좋은 문서를 만드는 일곱 가지 규칙
■ 소프트웨어 아키텍처를 활용하는 용도, 목표, 전략
■ 아키텍처 뷰와 스타일에 대한 일반적인 소개와 구체적인 예제
■ 소프트웨어의 인터페이스와 행위에 대한 문서화하는 방법
■ 정보를 수집해서 일관성을 갖춘 패키지로 만드는 데 도움이 되는 문서 양식
[ 이 책의 구성 ]
서장에서는 이 책을 읽는데 꼭 필요한 개념과 용어에 대해 정리한다. 여기서는 소프트웨어 아키텍처 문서를 어떻게 사용할 것이고, 그것이 왜 중요한지를 살펴본다. 그리고 아키텍처 뷰타입과 스타일과 뷰라는, 이 책에서 채택한 문서화 접근법의 근간을 이루는 세 가지 개념을 정의한다. 또한 좋은 문서를 만드는 7가지 규칙에 대해서도 소개한다.
1부. 소프트웨어 아키텍처 뷰타입과 스타일에서는 소프트웨어 아키텍처 문서화에 쓰이는 기본적인 도구인 뷰타입을 소개한다. 뷰타입이란 뷰에서 제공되는 정보의 종류를 명세해 놓은 것이다. 뷰타입은 기본적으로 모듈, 컴포넌트와 커넥터, 할당이라는 세 가지가 있다. 개별 뷰타입 내에는 여러 가지 아키텍처 스타일이 있다. 아키텍처 스타일은 뷰타입을 특화 시켜 놓은 것으로 보면 된다. 1부 도입부에 1장부터 5장에 걸쳐 설명할 스타일들에 대한 간략한 목록을 넣어 놓았다.
2부. 실전 소프트웨어 아키텍처 문서화에서는 제대로 된 아키텍트라면 반드시 만들어 내야 하는 완전한 구성의 아키텍처 문서 패키지에 중점을 둔다. 다시 말해 2부에서는 1부에서 제시한 그림을 완성하는 과정을 설명한다.
[ 이 책의 대상 독자 ]
이 책은 소프트웨어 프로젝트에서 아키텍처 문서를 작성하는 책임을 진 아키텍트와 기술문서 작성자들을 주 대상으로 해서 썼다. 물론 아키텍처 문서를 받아서 활용하는 입장에 있는 사람들도 함께 염두에 뒀다. 소프트웨어 아키텍트들은 자신이 작성한 아키텍처 문서와 함께 이 책을 제공하고 문서화 구성 원칙, 표기법, 개념, 관례 등을 설명한 해당 절을 적어놓는 방식을 활용하면 좋을 것이다.
이 책은 기본적으로 독자들이 소프트웨어 아키텍처 개념과 친숙한 상태에 있다고 가정하고 썼다. 물론 관련 배경지식을 어디서 얻을 수 있는지 정보도 제공했다. 앞으로 여러 차례에 걸쳐, 독자들이 이미 친근할 만한 아키텍처 뷰, 아키텍처 스타일, 인터페이스 등과 같은 기본 개념들에 대해 좀 더 명확하게 다듬어서 설명할 것이다.
[ 추천의 글 ]
10년 전에 나는 새롭고 야심 찬 제어통제 시스템을 만드는 프로젝트의 아키텍처팀을 이끌게 됐었다. 시작은 별로 매끄럽지 않았지만, 아키텍처 설계 작업이 점점 제 속도를 내며 진행돼 갔다. 아키텍트들은 작업을 진행하면서 새로운 것을 고안해 내고 문제를 해결하며, 설계해서 실제로 돌려 보기도 하면서 흥미진진해했다. 우리는 브레인스토밍 회의를 여러 번 진행했고, 그때마다 화이트보드는 단편적인 설계안들로 메워졌고, 공책은 메모로 가득 차 갔다. 그 과정에서 다양한 프로토타입을 만들어 우리의 이론을 검증하거나 기각했다. 개발팀의 규모가 커짐에 따라, 아키텍트들은 점점 더 많은 사람에게 최신 아키텍처 원칙들을 설명해야만 했다. 설명을 들어야 할 사람 중에는 신임 개발자들뿐만 아니라 개발 그룹이 아닌 부서에서 온 사람들도 있었다. 그 중 일부는 이런 새로운 종류의 소프트웨어 아키텍처 개념에 끌렸고, 일부는 이 아키텍처가 자신들에게 어떤 영향을 미치는지 알고 싶어 했다. 다시 말해 계획수립, 팀 또는 하부조직 구성, 시스템 납품, 시스템 부품 구매 과정에 끼치게 될 영향 등을 알고자 했다. 이 아키텍처를 설계하는 데 영향을 끼치고 싶어하는 이들도 있었다. 게다가 개발과 거리가 있는 고객이나 잠재고객들도 한자리 끼고 싶어했다. 이에 따라 아키텍트들은 짧게는 몇 시간에서 길게는 며칠까지 상당한 시간을 들여서 다양한 형태와 수준으로, 각양각색의 청중에게 맞는 어투로 아키텍처를 설명해야만 했다. 결국 각 부서에서 온 청중들이 아키텍처를 더 잘 이해할 수 있었다.
이렇게 의사소통을 하는 데 중심이 잡히자 우리의 역량은 서서히 강화됐다. 한쪽에서는 아키텍처를 설계하고 검증하느라 바빠졌고, 다른 한쪽에서는 가끔 많은 청중을 모아놓고 작업해 놓은 아키텍처의 내용이 무엇인지, 왜 그렇게 돼 있는지, 다른 해결책은 왜 선택하지 않았는지를 발표했다. 그러나 그것이 과했던지 프로젝트가 몇 달 정도 진행된 후에는 우리 내부에서도 스스로 결정해 놓은 아키텍처의 모습에 대해 이견이 생기기 시작했다.
이로 인해 우리는 결국 ‘기록되지 않은 것은 존재하지 않는다’라는 합의점에 이르게 됐다. 이 원칙은 그 후 두 해 동안 아키텍처팀 내에서 중심사상이 됐다. 고대 중국의 철학자인 노자는 도덕경에서 이렇게 설파했다.
남들이 나의 일을 궁금해하도록 놓아두라.
나중에 가서 그냥 결과만을 알려 주라.
(36장)
우리가 논의했거나 주장했거나 상상했거나 심지어 칠판에 초안까지 적어 놓았거나 상관없이 무엇이든 아키텍처가 될 수 있었다. 그러나 이 시스템에서는 오직 하나의 주력 문서에 기록된 것만이 실제 아키텍처였다. 그 문서가 바로 소프트웨어 아키텍처 문서(SAD, Software Architecture Document)다. 아키텍처적인 요소와 아키텍처적인 결정 중에서 이 문서에 적혀 있지 않으면 실제로 존재하지 않는 것이다. “SAD에 들어 있지 않으면 실제로 존재하지 않는 것이다”라는 이 한 가지 규칙 덕택에 문서를 계속 개선하고 거의 주 단위로 갱신할 수 있게 됐다. 또한 실제로 시도해 보지 않은 의견들이 분분하게 떠돌아다니는 것이 프로젝트에서 가장 혼동을 일으키는 요소라고 봤을 때, 이런 의견들을 모두 배제할 수 있다는 점도 장점이었다.
소프트웨어 아키텍처 문서는 곧 프로젝트 활동의 중심 요소가 됐다. 아키텍처 문서는 우리의 생각을 남들이 들여다볼 수 있게 해 주는 최적의 문서일 뿐만 아니라, 우리가 자리를 비우게 되더라도 다른 사람들이 불편하지 않게 됐고, 우리의 설계가 공격받을 때는 방패막이 역할도 했다.
그 당시 우리가 직면했던 문제 중에서 가장 핵심적인 것들은 다음과 같다. 소프트웨어 아키텍처 중에서 어떤 것을 문서화해야 할까? 그것을 어떻게 문서화할까? 구성은 어떤 식으로 해야 할까? 표기법은 어떤 것을 사용할 것인가? 얼마나 자세히, 얼마나 추상적으로 표현해야 할까? 우리 시스템만큼 야심 찬 시스템을 기술해 놓은 아키텍처 기술서도 사실 드물었다. 우리는 필요한 것이 생길 때마다 새로 만들어냈다. 이 과정에서 아키텍처라는 것이 평면적인 것이 아니라 일종의 입체적인 실체라는 사실을 곧 깨닫게 됐다. 거기에는 여러 가지 측면이 얽혀 있었고, 그중에서 몇 가지 측면(뷰라고도 한다)은 소수의 참가자에게만 관심을 끌었다. 우리는 문서를 읽어야 할 많은 사람이 500그램 가까이 되는 무게의 문서를 만들어 놓으면 열어보지도 않으리라는 사실을 알았다. 게다가 이런 문서들은 갱신하기도 매우 어려워 보였다. 그리고 어떤 선택을 내렸을 때 그에 대한 근거를 제시하지 않으면 다시 재현해내기가 불가능하다는 사실도 깨달았다. 또한 예리한 시각을 지닌 이해관계자가 새로 등장할 때마다 이런 사실이 다시 문제가 됐다. 우리는 시각적인 표기법을 선택했다. 표기법을 고를 때는 지나치게 모호하거나 헷갈리지 않되 또한 너무 난해하거나 복잡하지도 않은 것으로 했다. 참가자들 대부분의 기를 초장에 꺾어버리지 않도록 말이다.
이제 소프트웨어 아키텍트들은 자신들이 만드는 소프트웨어 아키텍처를 어떤 식으로 문서화할지 결정하는 데 매우 좋은 시작점에 서 있다. 손쉽게 할 수 있기 때문이다. 이 책의 저자들은 내가 겪었던 것과 비슷한 경험을 수없이 겪어 오면서 그 과정에서 깨달은 중요한 내용들을 뽑아 냈다. 이 책의 저자들은 여러 소프트웨어 아키텍처 문서를 참고했다. 또한 연구 자료들을 검토하고 출간된 모든 책들을 연구한 다음, 표준적인 요소를 점검하고 그 과정에서 얻은 지혜를 모두 정리해서 이 안내서를 만들어냈다. 따라서 이 책은 독자들이 소프트웨어 아키텍처 문서를 작성할 때 알아야 할 핵심적인 내용으로 가득 차게 됐다. 이 책에는 소프트웨어 아키텍처의 범위나 구성, 사용하거나 사용하지 말아야 할 기법이나 도구, 표기법은 물론 비교법이나 조언, 경험법칙 등에 대한 안내도 담았다. 또한 이 책에는 처음 시작할 때 유용하게 활용할 수 있을 뿐만 아니라, 방향을 잃고 절망할 때도 계속해서 방향을 잡아주는 역할을 해줄 문서양식도 들어 있다.
이 책의 가치는 실로 엄청나다. 소프트웨어 아키텍처를 기술해서 여러 이해관계자에게 알리는 일은 매우 중요한 작업이다. 이 지침서는 그 과정에서 발생할 수 있는 수 개월 간의 실패와 반복의 시간을 줄이고, 쓸데없는 불편함을 많이 제거해줄 것이며, 궁극적으로 이런 모든 시도 자체를 무의미하게 만드는 뼈저린 실수들을 많이 줄여줄 것이다. 소프트웨어 아키텍트들이 책장에 꼭 갖춰 놓아야 할 중요한 참고서로 자리 잡으리라 믿는다.
- 필립 크루첸
밴쿠버 소재 래셔널 소프트웨어 캐나다의 프로세스 개발 책임자
밴쿠버 소재 래셔널 소프트웨어 캐나다의 프로세스 개발 책임자
목차
목차
- 서장: 소프트웨어 아키텍처와 문서화 ● 1
- P.1 아키텍처의 역할 ● 1
- [용어 설명] 소프트웨어 아키텍처 ● 2
- [견해 소개] 아키텍처는 설계와 어떻게 다른가? ● 4
- [용어 설명] 문서화, 설명, 표현, 명세 ● 8
- P.2 아키텍처 문서 활용방안 ● 10
- P.3 인터페이스 ● 12
- P.4 뷰 ● 13
- [용어 설명] 아키텍처 뷰 ● 15
- P.5 뷰타입과 스타일 ● 18
- P.5.1 뷰타입 ● 18
- P.5.2 스타일 ● 18
- P.5.3 뷰타입, 스타일, 뷰에 대한 요약 ● 21
- [용어 설명] 모듈과 컴포넌트 ● 22
- P.6 좋은 문서를 만드는 7가지 규칙 ● 24
- P.6.1 규칙 1: 읽는 사람의 관점에서 문서를 작성한다 ● 24
- P.6.2 규칙 2: 불필요한 반복을 피한다 ● 25
- P.6.3 규칙 3: 모호함을 피한다 ● 26
- P.6.4 규칙 4: 표준 체계를 따른다 ● 27
- P.6.5 규칙 5: 근거를 남겨둔다 ● 28
- P.6.6 규칙 6: 문서는 항상 최신 내용을 담되 너무 앞서나가지 않는다 ● 28
- P.6.7 규칙 7: 목적에 맞게 작성됐는지 사후 검토한다 ● 28
- [견해 소개] 화살표에 대한 고민 ● 29
- P.7 정리 ● 30
- P.8 생각해볼 문제 ● 31
- P.9 더 읽을거리 ● 33
- P.1 아키텍처의 역할 ● 1
- I부 소프트웨어 아키텍처 뷰타입과 스타일 ● 35
- I.1 뷰타입과 스타일 목록 ● 35
- I.1.1 모듈 뷰타입 ● 35
- I.1.2 컴포넌트와 커넥터 뷰타입 ● 36
- I.1.3 할당 뷰타입 ● 38
- I.2 스타일 지침: 스타일 문서화를 위한 표준 문서체계 ● 39
- I.1 뷰타입과 스타일 목록 ● 35
- 1장 모듈 뷰타입 ● 41
- 1.1 개요 ● 41
- 1.2 모듈 뷰타입의 요소, 관계, 속성 ● 42
- 1.2.1 요소 ● 43
- 1.2.2 관계 ● 43
- 1.2.3 속성 ● 44
- [용어 설명] 교체가능성 ● 46
- 1.3 모듈 뷰타입이 적합한 상황 ● 47
- 1.4 모듈 뷰타입 표기법 ● 48
- 1.4.1 비공식 표기법 ● 48
- 1.4.2 UML ● 48
- 1.5 다른 뷰타입과의 관계 ● 49
- 1.6 정리 ● 50
- 1.7 생각해볼 문제 ● 50
- 1.8 더 읽을거리 ● 51
- 2장 모듈 뷰타입 스타일 ● 53
- 2.1 분할 스타일 ● 53
- 2.1.1 개요 ● 53
- 2.1.2 요소, 관계, 속성 ● 54
- 2.1.3 용도 ● 55
- 2.1.4 표기법 ● 56
- 2.1.5 다른 스타일과의 관계 ● 57
- 2.1.6 사례 ● 57
- [용어 설명] 하위시스템 ● 62
- 2.2 사용 스타일 ● 64
- 2.2.1 개요 ● 64
- 2.2.2 요소, 관계, 속성 ● 64
- 2.2.3 용도 ● 65
- 2.2.4 표기법 ● 65
- 2.2.5 다른 스타일과의 관계 ● 67
- 2.2.6 사례 ● 67
- [용어 설명] 사용 ● 68
- 2.3 일반화 스타일 ● 71
- 2.3.1 개요 ● 71
- 2.3.2 요소, 관계, 속성 ● 72
- 2.3.3 용도 ● 73
- 2.3.4 표기법 ● 74
- 2.3.5 다른 스타일과의 관계 ● 74
- [용어 설명] 일반화 ● 76
- 2.3.6 사례 ● 77
- 2.4 계층 스타일 ● 77
- 2.4.1 개요 ● 77
- 2.4.2 요소, 관계, 속성 ● 80
- 2.4.3 용도 ● 82
- 2.4.4 표기법 ● 83
- 2.4.5 다른 스타일과의 관계 ● 89
- 2.4.6 사례 ● 92
- [용어 설명] 가상기계 ● 93
- [견해 소개] 거슬러 올라가는 소프트웨어 ● 94
- [견해 소개] ‘수준’ 때문에 생기는 혼란 ● 95
- [견해 소개] UML 클래스 다이어그램 남용금지! ● 97
- 2.5 정리 ● 99
- 2.6 생각해볼 문제 ● 100
- 2.7 더 읽을거리 ● 100
- 2.1 분할 스타일 ● 53
- 3장 컴포넌트와 커넥터 뷰타입 ● 103
- 3.1 개요 ● 103
- 3.2 C&C 뷰타입의 요소, 관계, 속성 ● 106
- 3.2.1 요소 ● 107
- 3.2.2 관계 ● 110
- 3.2.3 속성 ● 111
- [견해 소개] 커넥터는 정말 필요한가? ● 112
- [견해 소개] 커넥터 추상화 ● 114
- 3.3 C&C 뷰타입의 용도 ● 116
- [견해 소개] 데이터 흐름과 제어 흐름 투영 ● 117
- 3.4 C&C 뷰타입 표기법 ● 118
- 3.5 다른 뷰타입과의 관계 ● 118
- 3.6 정리 ● 120
- 3.7 생각해볼 문제 ● 122
- 3.8 더 읽을거리 ● 123
- 4장 컴포넌트와 커넥터 뷰타입 스타일 ● 125
- 4.1 파이프와 필터 스타일 ● 126
- 4.1.1 개요 ● 126
- 4.1.2 요소, 관계, 속성 ● 126
- 4.1.3 용도 ● 127
- 4.1.4 다른 스타일과의 관계 ● 128
- 4.1.5 사례 ● 128
- 4.2 공유 데이터 스타일 ● 129
- 4.2.1 개요 ● 129
- 4.2.2 요소, 관계, 속성 ● 129
- 4.2.3 용도 ● 131
- 4.2.4 다른 스타일과의 관계 ● 132
- 4.2.5 사례 ● 132
- 4.3 발행 구독 스타일 ● 133
- 4.3.1 개요 ● 133
- 4.3.2 요소, 관계, 속성 ● 133
- 4.3.3 용도 ● 134
- 4.3.4 다른 스타일과의 관계 ● 135
- 4.3.5 사례 ● 135
- 4.4 클라이언트/서버 스타일 ● 136
- 4.4.1 개요 ● 136
- 4.4.2 요소, 관계, 속성 ● 136
- 4.4.3 용도 ● 138
- 4.4.4 다른 스타일과의 관계 ● 138
- 4.4.5 사례 ● 139
- 4.5 피어 투 피어 스타일 ● 139
- 4.5.1 개요 ● 139
- 4.5.2 요소, 관계, 속성 ● 140
- 4.5.3 용도 ● 141
- 4.5.4 다른 스타일과의 관계 ● 141
- 4.5.5 사례 ● 141
- 4.6 프로세스 간 통신 스타일 ● 142
- 4.6.1 개요 ● 142
- 4.6.2 요소, 관계, 속성 ● 142
- 4.6.3 용도 ● 143
- 4.6.4 다른 스타일과의 관계 ● 143
- 4.6.5 사례 ● 144
- 4.7 C&C 스타일 표기법 ● 145
- 4.7.1 비공식적 표기법 ● 145
- 4.7.2 정형적 표기법 ● 145
- [견해 소개] 클래스로 컴포넌트 타입과 인스턴스 표현하기 ● 160
- [용어 설명] 컴포넌트와 UML 컴포넌트의 비교 ● 162
- 4.8 정리 ● 164
- 4.9 생각해볼 문제 ● 165
- 4.10 더 읽을거리 ● 166
- 4.1 파이프와 필터 스타일 ● 126
- 5장 할당 뷰타입과 스타일 ● 167
- 5.1 개요 ● 167
- 5.2 요소, 관계, 속성 ● 168
- 5.3 배치 스타일 ● 169
- 5.3.1 개요 ● 169
- 5.3.2 요소, 관계, 속성 ● 170
- 5.3.3 용도 ● 172
- 5.3.4 표기법 ● 173
- 5.3.5 다른 스타일과의 관계 ● 175
- 5.3.6 사례 ● 175
- 5.4 구현 스타일 ● 175
- 5.4.1 개요 ● 175
- 5.4.2 요소, 관계, 속성 ● 177
- 5.4.3 용도 ● 178
- 5.4.4 표기법 ● 178
- 5.4.5 다른 스타일과의 관계 ● 179
- 5.4.6 사례 ● 179
- 5.5 작업할당 스타일 ● 179
- 5.5.1 요소, 관계, 속성 ● 179
- 5.5.2 용도 ● 180
- 5.5.3 표기법 ● 181
- 5.5.4 다른 스타일과의 관계 ● 181
- 5.5.5 사례 ● 182
- 5.6 정리 ● 183
- 5.7 생각해볼 문제 ● 183
- 5.8 더 읽을거리 ● 184
- II부 실전 소프트웨어 아키텍처 문서화 ● 185
- 6장 고급 개념 ● 187
- 6.1 정보 분할과 뷰 패킷, 정제, 설명적 완결성 ● 188
- 6.1.1 뷰 패킷 ● 188
- 6.1.2 정제 ● 191
- 6.1.3 설명적 완결성 ● 192
- 6.2 컨텍스트 다이어그램 ● 195
- 6.2.1 최상위 수준 컨텍스트 다이어그램 ● 196
- 6.2.2 내용 ● 197
- 6.2.3 그 밖의 보조 문서 ● 197
- 6.2.4 표기법 ● 198
- 6.2.5 사례 ● 200
- 6.3 결합 뷰 ● 200
- 6.3.1 결합 뷰를 사용해야 하는 경우 ● 201
- 6.3.2 대응의 유형 ● 203
- 6.3.3 요소, 관계, 속성 ● 205
- 6.3.4 결합 뷰 문서화 ● 206
- 6.3.5 결합 뷰 예제 ● 207
- 6.3.6 그 밖의 예제 ● 208
- 6.4 가변성과 역동성 문서화 ● 209
- 6.4.1 가변성 ● 209
- 6.4.2 역동성 ● 210
- 6.4.3 정보 기록 ● 211
- 6.4.4 표기법 ● 212
- [견해 소개] 시점이란 무엇인가? ● 213
- 6.5 새로운 스타일 작성과 문서화 ● 215
- [용어 설명] 스타일과 패턴 ● 217
- 6.6 정리 ● 219
- 6.7 생각해볼 문제 ● 220
- 6.8 더 읽을거리 ● 221
- 6.1 정보 분할과 뷰 패킷, 정제, 설명적 완결성 ● 188
- 7장 소프트웨어 인터페이스 문서화 ● 223
- 7.1 개요 ● 223
- 7.2 인터페이스 명세 ● 226
- 7.3 인터페이스 문서 표준 체계 ● 228
- [용어 설명] 예외와 오류 처리 ● 233
- 7.4 인터페이스 문서와 관련된 이해관계자 ● 237
- 7.5 인터페이스 문서 표기법 ● 239
- 7.5.1 인터페이스의 존재 제시 ● 239
- 7.5.2 형태정보 전달 ● 241
- 7.5.3 의미정보 전달 ● 242
- 7.5.4 요약 ● 242
- [견해 소개] 다중 인터페이스 ● 242
- [용어 설명] 호출규약, 인터페이스, API ● 245
- 7.6 인터페이스 문서화 예제 ● 246
- 7.6.1 SCR 스타일의 인터페이스 ● 246
- 7.6.2 IDL ● 252
- 7.6.3 맞춤형 표기법 ● 252
- 7.6.4 XML ● 255
- 7.7 정리 ● 257
- 7.8 생각해볼 문제 ● 258
- 7.9 더 읽을거리 ● 258
- 8장 행위 문서화 ● 259
- 8.1 구조를 넘어서 ● 259
- 8.2 행위 문서화 위치 ● 260
- 8.3 행위 문서화 필요성 ● 260
- 8.3.1 시스템 분석 ● 261
- 8.3.2 개발 작업 추진 ● 262
- 8.4 문서화 내용 ● 263
- 8.4.1 통신 방식 ● 264
- 8.4.2 순서 제약사항 ● 264
- 8.4.3 시간에 따라 발생하는 자극 ● 265
- 8.5 행위 문서화에 쓰이는 언어와 표기법 ● 266
- 8.5.1 추적 ● 268
- 8.5.2 정적 모델 ● 276
- 8.6 정리 ● 284
- 8.7 생각해볼 문제 ● 285
- 8.8 더 읽을거리 ● 285
- 9장 뷰 선택 ● 289
- 9.1 이해관계자들에게 필요한 문서 ● 290
- [견해 소개] 아키텍처 트레이드오프 분석 방법 ● 302
- 9.2 선택하기 ● 305
- 9.3 두 가지 예제 ● 306
- 9.3.1 소규모 프로젝트 A-7E ● 306
- 9.3.2 대규모 프로젝트 ECS ● 308
- 9.4 정리 ● 312
- 9.5 생각해볼 문제 ● 312
- 9.6 더 읽을거리 ● 313
- 9.1 이해관계자들에게 필요한 문서 ● 290
- 10장 문서 패키지 작성 ● 315
- 10.1 문서를 하나로? 여러 개로? ● 315
- [견해 소개] ‘is’의 의미 ● 316
- 10.2 뷰 문서화 ● 317
- [견해 소개] 표현 방법도 중요하다! ● 321
- 10.3 뷰 개괄 문서 ● 323
- 10.3.1 어떻게 문서가 구성됐는가: 구성 정보 ● 324
- 10.3.2 무엇을 아키텍처로 봤는가: 구성 내용 ● 326
- 10.3.3 왜 아키텍처가 현재의 모습을 하고 있는가: 배경, 근거, 설계 제약사항 ● 328
- [견해 소개] 전역 분석 ● 332
- 10.1 문서를 하나로? 여러 개로? ● 315
- 10.4 소프트웨어 아키텍처 문서의 검증 ● 335
- [견해 소개] 용어집을 만들면 좋았을 텐데 ● 339
- 10.5 정리 ● 340
- 10.6 생각해볼 문제 ● 340
- 10.7 더 읽을거리 ● 341
- 11.1 개요 ● 343
- 11.2 래셔널 통합 프로세스(RUP)/크루첸 4+1 ● 344
- 11.3 UML ● 348
- 11.3.1 클래스 다이어그램과 객체 다이어그램 ● 348
- 11.3.2 컴포넌트 다이어그램 ● 350
- 11.3.3 배치 다이어그램 ● 350
- 11.3.4 행위 다이어그램 ● 351
- 11.4 지멘스 4뷰 ● 352
- 11.4.1 전역 분석 ● 352
- 11.4.2 개념적 아키텍처 뷰 ● 353
- 11.4.3 모듈 아키텍처 뷰 ● 353
- 11.4.4 실행 아키텍처 뷰 ● 354
- 11.4.5 코드 아키텍처 뷰 ● 355
- 11.4.6 요약 ● 355
- 11.5 C4ISR 아키텍처 프레임워크 ● 356
- 11.5.1 C4ISR 프레임워크의 공통 아키텍처 뷰 ● 357
- 11.5.2 공통 산출물 ● 358
- 11.6 ANSI/IEEE-1471-2000 ● 360
- 11.7 데이터 흐름과 제어 흐름 ● 363
- 11.7.1 데이터 흐름 뷰 ● 363
- 11.7.2 제어 흐름 뷰 ● 365
- [견해 소개] 그거 전부 다 추측이잖아요! ● 366
- 11.9.1 아키텍처 설명 언어 ● 374
- 11.9.2 상용 컴포넌트 ● 375
- 11.9.3 하이퍼텍스트 문서 ● 378
- 11.9.4 형상관리 ● 378
- 1권 ECS 소프트웨어 아키텍처 뷰 개괄 문서 ● 383
- 2권 ECS 소프트웨어 아키텍처 뷰 ● 410
관련 블로그 글
소프트웨어 아키텍처 문서화, 한 권으로 마스터하세요!
『소프트웨어 아키텍처 문서화』
폴 클레멘츠, 데이비드 갈란 외 지음 | 송재하 박미율 이진희 김정호 옮김
560쪽 | 40,000원| 2009년 2월 10일 출간예정 | 소프트웨어 아키텍처 시리즈 3
폴 클레멘츠, 데이비드 갈란 외 지음 | 송재하 박미율 이진희 김정호 옮김
560쪽 | 40,000원| 2009년 2월 10일 출간예정 | 소프트웨어 아키텍처 시리즈 3
아키텍처 문서의 목적은 아키텍처 문서를 읽는 사람들에게 시스템의 기본 개념을 명확하게 전달하는 데 있다.
2년 전인 2007년 5월, 소프트웨어 아키텍처 분야의 바이블로 통하는 『소프트웨어 아키텍처: 이론과 실제』의 출간은 소프트웨어 아키텍처에 관한 갈증을 해소하는 촉촉한 단비와도 같았습니다. 그러고 나서 1년 반이 훌쩍 넘는 시간이 흘러 드디어 이 책 『소프트웨어 아키텍처 문서화』을 펴낼 수 있게 됐군요.
[##_1R|1083395456.gif|width="98" height="110" alt="사용자 삽입 이미지"|_##]이 책은 말 그대로 소프트웨어 아키텍처 문서를 작성하는 책임을 진 아키텍트와 기술문서 작성자, 아키텍처 문서를 받아서 활용하는 개발자라면 꼭 읽어야 할 필독서라고 할 수 있습니다. 물론 기본적으로 소프트웨어 아키텍처 개념은 이해하고 읽어야 하죠. 이 책은 『소프트웨어 아키텍처: 이론과 실제』의 9장에서 1개 장으로 다뤘던 각론을 책 한 권으로 상세히 설명하고 집대성한 "울트라얼티밋확장판"이라고 할 수 있습니다.
그렇다면 소프트웨어 아키텍처 문서화는 왜 필요한 것일까요? 아키텍처 문서화 작업은 아키텍처를 수립하는 과정에서 화룡점정에 해당합니다. 완벽한 아키텍처라 하더라도 그 내용을 제대로 전달할 수 없다면 아무 쓸모가 없습니다. 강력한 아키텍처를 만들려면 모호함 없이 자세히 기술하고 다른 사람들이 필요한 정보를 손쉽게 찾을 수 있는 형태로 내용을 구성해야 합니다. 그렇게 해두지 않으면 그 아키텍처는 활용할 수 없는 무용지물이 되고 맙니다.
나의 목표는 규범이 될 수 있는, 적절한 형식을 갖춘 아키텍처 설명서를 작성해서 이것으로 부서 간의 우선순위를 정하고, 개발을 병렬로 진행하며, 기존 시스템을 이전하는 작업을 관리하는 등의 일을 처리하는 데 기준으로 쓰일 수 있게 하는 것입니다.문서화. 뭔가를 기록에 남기고 정리한다는 건 결코 쉬운 일이 아닙니다. 게다가 단순히 그저 기록에만 의미를 두는 것이 아니라 "사람들", 혹은 "지금 일을 까마득히 잊어버린 미래의 내"가 들춰봐도 이해할 수 있는 수준으로 만들어야 하기 때문에 더욱 중요합니다.
- 어느 대형 금융서비스사의 소프트웨어 아키텍트
결국 문서화는 아키텍처를 구축해서 제대로 활용하기 위한 커뮤니케이션, 의사소통의 수단이 되는 것이죠. 따라서 그저 겉만 번드르르한 문서를 만드는 게 목적이 되어서는 절대로 안 될 일이죠.
아키텍처를 어떤 식으로 문서화해야 다른 사람들이 아키텍처를 제대로 활용하고, 유지하고, 이를 통해 시스템을 제대로 구축할 수 있을까?제대로 된 문서로서 의사소통을 하는 것이 최대의 목적이라면, 사실 이 책의 저자들이 주장하는 바대로, 문서화에서 기본적인 수칙은 우리가 흔히 알고 있는 것과 크게 다르지 않습니다.
1. 읽는 사람의 관점에서 문서를 작성한다
2. 불필요한 반복을 피한다
3. 모호함을 피한다
4. 표준 체계를 따른다
5. 근거를 남겨둔다
6. 문서는 항상 최신 내용을 담되 너무 앞서나가지 않는다
7. 목적에 맞게 작성됐는지 사후 검토한다
저자들은 예상 밖으로(?) 평이하고도 이해하기 쉬운 설명으로 (물론 역자분들의 훌륭한 번역에 힘입어 쉽게 이해할 수 있었지만) 소프트웨어 아키텍처 문서 활용과 문서화 전략의 큰 얼개부터 시작해서 실현 가능한 목표를 알려줍니다. 그러고 나서 아키텍처 뷰를 뷰타입으로 분류하고 예제를 제시하면서 실질적인 지침을 소개합니다. 관련 뷰를 문서로 만들고 뷰 개괄 문서에 적용되는 관련 정보 보강작업 등 아키텍처 문서화의 핵심 내용을 설명하는 부분이죠. 마지막으로 관련 뷰에 해당하는 그밖의 정보를 찾아낸 다음 정보 패키지를 만드는 과정에 대해 설명합니다.
[##_1L|1795022396.jpg|width="189" height="250" alt="사용자 삽입 이미지"|_##]여태까지 사람들은 소프트웨어 아키텍처를 건축물의 아키텍처에 비교를 하곤 했습니다. 허나 이 책의 저자들은 아키텍처와 문서화를 새의 날개에 비유합니다.
예를 들어 날개는 수없이 많은 깃털로 이뤄져있습니다. 언뜻 보면 이 깃털은 모두 같은 모양과 패턴으로 수많은 깃털이 그저 반복 조합되어 날개를 구성한 것이라 생각할 수 있지만, 자세히 살펴보면 깃털 하나 하나 안에는 하위구조가 있으며 각 깃털도 체계적으로 변형되어 있습니다. 따라서 모두 비슷해보이지만, 절대 같은 깃털은 하나도 없다는 사실을 알게 됩니다.
날개는 무게의 경량성, 공기역학적 우수성, 뛰어난 보온성 등과 같은 엄격한 품질 속성을 지닙니다. 또한 수백만 번 날갯짓을 해도 끄덕없을 만큼의 안전성을 자랑하죠. 또한 날개를 펼치고 퍼덕이며 접는 등의 미세한 움직임으로 동작을 제어하는 동적 행위도 가능합니다. 이 부분이 바로, 저자들이 소프트웨어를 건축보다는 날개에 비유하고자 한 최대의 유사점이 아닐까 싶습니다.
새는 어떻게 날까?를 고민하고 그 자연의 섭리에 대해 경외감을 가져본 사람이라면, 구조, 하위구조, 변형을 동반한 복제, 행위, 품질속성, 시스템 전반의 속성 등을 분석해서 기록하는 일은 새의 날갯짓을 이해하고 분석하는 일보다는 조금은(!) 쉽다고 하지 않을까요? 소프트웨어 아키텍처의 문서화는 바로 이 지점에서 시작하는 일입니다.
마지막으로 정말 이 어려운 책을 긴 시간동안 훌륭히 번역해주신 역자분들께 정말 깊은 감사 말씀 전합니다. 에이콘 소프트웨어 아키텍처 시리즈 에디터도 겸하시면서 훌륭한 윤문 실력을 뽐내며 독자들이 읽기 편한 책을 완성하고자 끝까지 애써주신 송재하님, 일도 당연히 잘 하시고 자타가 공인하는 정말 뛰어난 역자 박미율님, 미국 오라클 본사에서 엔지니어로 일하시다 실리콘밸리에서 벤처 창업해서 일하고 계시는 이진희님(이 책을 번역하는 사이에 한국에서 결혼식도 올리셨죠), 현업에서 아키텍트로 바쁘게 활동하시면서도 책을 끝까지 잘 마무리해주신 김정호님 역자분들 정말 고생 많으셨습니다. 제가 개인적으로 지난 해 6월부터 일찌감치 번역 마치신 이 책의 역자분들의 쪼임을 받았던지라(편집출간 빨리 안 해주냐고!) 정말 시원섭섭하네요. ^^ 모든 역자분들 참 좋아하지만, 이렇게 최선 다해주시고 애써주시는 분들 만나면 정말 눈시울이 시큰할 만큼 감사하거든요. 모두 고생 많으셨습니다. ^^/
이 책은 지금 YES24, 교보문고, 강컴, 알라딘, 인터파크에서 독자분들의 뜨거운 호응에 힘입어 절찬 예약판매중입니다. :)
크리에이티브 커먼즈 라이센스 이 저작물은 크리에이티브 커먼즈 코리아 저작자표시 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
도서 오류 신고
정오표
1쇄 오류/오탈자
[ p182 그림 5.6 1-2행 ]
ECS 구성요소 (모듈) | 하위시스템
조직 단위 | 영역
↓
ECS 구성요소 (모듈) | 조직 단위
영역 | 하위시스템
[ p182 그림 5.6 1-2행 ]
ECS 구성요소 (모듈) | 하위시스템
조직 단위 | 영역
↓
ECS 구성요소 (모듈) | 조직 단위
영역 | 하위시스템