건축가는 건축가가 되는 과정에서 수천의 건축물을 들여다보게 됩니다. 한데, 대부분의 프로그래머가 평생 접하는 대규모 애플리케이션은 아주 몇 개에 지나지 않습니다. 게다가 접하는 애플리케이션조차 대개 자신이 직접 작성한 프로그램이죠. 역사적으로 뚜렷한 족적을 남긴 프로그램을 접하거나, 노련한 업계 종사자들이 해당 프로그램에 대해 작성한 평가를 읽을 기회가 거의 없습니다. 그 결과로 서로의 장점과 성공을 계승하지 못하고 동일한  실수를 반복하게 되는 거죠.

이 책 『25개 애플리케이션으로 배우는 오픈 소스 소프트웨어 아키텍처』는 이런 현상을 고쳐보고자 하는 노력의 일환으로 나왔습니다. 각 애플리케이션의 아키텍처를 소개하면서, 전제 구성은 어떻고 각 하부구조는 어떻게 상호동작하며 왜 그런 방식으로 구축하게 되었는지, 다른 대규모 설계 문제에 적용할 수 있는 교훈은 어떤 것들이 있는지 잘 설명하고 있죠.

이 책은 해당 소프트웨어를 잘 아는, 복잡한 애플리케이션을 직접 설계하거나, 재설계하는 작업을 길게는 수십 년에 걸처 수행해 온 전문가들이 직접 작성했습니다. 각 애플리케이션은 간단한 드로잉 프로그램에서부터, 웹 기반 스프레드시트, 컴파일러 툴킷, 그리고 수백만 라인에 이르는 시각화 패키지 등 매우 다양한 분야를 아우르고 있습니다. 일부는 몇 년밖에 되지 않은 반면, 어떤 것은 30주년을 바라보는 애플리케이션입니다.

 소프트웨어 아키텍처란 용어가 널리 사용되고는 있지만, 사실 일반적인 프로그래밍 관련 서적이나 정규 교육 과정에서 실제로 접하기는 어려웠습니다. 상대적으로 상세 설계에 관해서는 디자인 패턴이나 UML 같은 체계적인 도구들이 많이 소개되었습니다만, 소프트웨어의 구조를 설명할 때에는 이 같은 정형화된 포맷이 사용되지는 않고 있습니다. 물론 소프트웨어 공학 분야에서 구조 설계에 대한 설명과 다양한 방법들을 제시해 주고 있습니다만, 실제 사례들에서는 이 같은 방법론이나 표기법들에 딱히 구애받지 않고 상대적으로 자유로운 형태로 설명되는 경우가 많았습니다. 게다가 추상화된 소프트웨어의 구조만으로는 실제로 이 내용들이 어떤 형태로 구현되는지를 알기 어렵기 때문에, 소프트웨어 구조만을 따로 떼어내어 전문적으로 설명하기보다는 실제 사례들을 중심으로 다양하게 접해 보는 것이 도움이 된다고 생각합니다.

이 책에서는 다양한 오픈 소스 소프트웨어들의 얼개를 해당 소프트웨어 개발에 직접 참여했던 사람들이 설명하고 있습니다. 하둡과 같은 분산시스템에서부터 bash와 같은 셸에 이르기까지 다양한 대상들을 다루고 있는 만큼, 각 장마다 설명하는 방식도 개성이 뚜렷합니다. 하지만, 작업한 대상의 얼개를 설명할 때 어떤 내용을 중심으로 설명하고 어떤 내용을 생략했는지, 그리고 설계할 때 어떤 부분을 고민했으며 그에 따르는 장단점이 어떤 것이었는지 등을 살펴보면 흥미로울 듯합니다. 특히 센드메일(Sendmail)이나 bash와 같이 오랜 역사를 가지고 있는 소프트웨어들의 경우 시간이 흐름에 따라 어떤 부분이 유지되었고 어떤 부분이 변경되었는지, 새로 만든다면 다르게 접근하고 싶은 부분은 어떤 것인지 등에 대한 설명을 듣는 것도 쉽게 접하기 어려운 부분입니다.

이 책에서 소개되고 있는 내용이 소프트웨어 아키텍처에 관심 있는 분들께 작은 도움이 되었으면 하는 바람입니다.

류성호 – ‘옮긴이의 글’에서 

이 책의 원서는 『The Architecture of Open Source Applications』입니다.  공식 웹 사이트를 통해서 내용을 접한 분들도 꽤 많으실 겁니다. 이 책은 독자들이 흔히 접할 수 있는 일반적인 소프트웨어 개발 책이 아닙니다. 오픈 소스 프로젝트 분야에서 소위 내로라하는 베테랑들이 직접 자기가 만들거나 관여한 소프트웨어의 아키텍처를 설명한 글 모음입니다. 무려 43명의 저자들과 25개의 소프트웨어가 보여주는 다양한 스펙트럼을 감상해보세요. 각 장은 연관성이 거의 없어서 독자는 흥미 있는 부분만 골라 읽고 나중에 다른 분야로 시야를 넓혀가는 것도 좋습니다.

원서와 번역서의 표지를 한번 비교해보았습니다. 흔히 소프트웨어가 어떻게 만들어지는지(설계)를 설명할 때, 건축의 메타포를 가져오곤 합니다. 아래의 원서 표지는 설계도가 어떻게 건축물로 구현되는지를 보여주는 방식입니다.

하지만 요즘은 건축의 메타포로는 소프트웨어가 만들어지는 과정을 온전히 설명하기 힘들다고 얘기합니다. 대신 가드닝(정원 가꾸기)이 더 적절한 설명으로 받아들여지고 있습니다.  잡초도 잘 뽑아줘야 하고(디버깅) 이리저리 나무도 옮겨 심을 수 있겠고요(설계 변경). 죽는 가지(기능)가  있으면 또 새롭게 피어오르는 가지(기능)도 있겠습니다. 이렇게 꾸준히 관리하고 개선해야 좋은 정원(소프트웨어)이 만들어질 수 있다는 얘기인 듯합니다. 어떠세요? 번역서의 표지 디자인 의미가 잘 읽히시나요?

* 이 책에서 다루는 내용입니다.

1장 CMake

2장 LLVM

3장 NoSQL 생태계(The NoSQL Ecosystem)

4장 VTK

5장 그래파이트(Graphite)

6장 리악(Riak)과 얼랭/OTP(Erlang/OTP)

7장 머큐리얼(Mercurial)

8장 바이올렛(Violet)

9장 배시(Bourne-Again Shell, Bash)

10장 버클리 DB(Berkeley DB)

11장 비스트레일(VisTrails)

12장 센드메일(Sendmail)

13장 셀레늄 웹드라이버(Selenium WebDriver)

14장 소셜캘크(SocialCalc)

15장 스노우플록(SnowFlock)

16장 애스터리스크(Asterisk)

17장 오더시티(Audacity)

18장 웨스노스 전투(Battle for Wesnoth)

19장 이클립스(Eclipse)

20장 지속적 통합 시스템(Continuous Integration)

21장 지트시(Jitsi)

22장 천 파섹(Thousand Parsec)

23장 텔레파시(Telepathy)

24장 파이썬 패키징(Python Packaging)

25장 하둡 분산 파일시스템(Hadoop Distributed File System)

* 다음 서점에서 구입하실 수 있습니다.

Yes24 | 교보문고 | 알라딘 | 인터파크 | 강컴