적정 소프트웨어 아키텍처 표지
적정 소프트웨어 아키텍처

적정, 소프트웨어, 아키텍처 그 어느 것 하나 흥미롭지 않을 수가 없다. 프로젝트의 설계를 고민하면서 끊임없이 머릿 속에 드는 생각은, ‘너무 적게/많이 조합/분리 했나?’ 였다. 소프트웨어 설계는 절대적 정답이 없다. 어제의 정답이 오늘의 오답이 될 수 있다. 더 나은 방향을 찾기 위해 고찰하고 있는 와중에 적정 소프트웨어 아키텍처를 읽게 되었다.

프레더릭 브룩스가 말했듯이 소프트웨어 개발의 어려움을 제거할 은제 탄환을 기대해서는 안 된다. 대신 시스템을 더 잘 분할하고, 지식을 제공하고, 추상화로 문제의 본질을 드러내는 무기를 찾아야 한다.

이 문장이 이 책의, 소프트웨어 설계를 관통하는 핵심이라고 생각했다.

책에서는 세 가지 접근 방식으로 설계 방식을 나눈다.

아키텍처 무관 설계
아키텍처 집중 설계
아키텍처 상향 설계

요약하면, 무관 설계는 목표까지 아키텍처를 고려하지 않는다. 집중 설계는 의도적으로 소프트웨어 아키텍처를 설계한다. 상향 설계는 시스템의 목표나 속성을 보장할 목적으로 설계하는 일종의 집중 설계다.

나는 대부분 집중 설계 방식으로 접근하고 있다. 지금까지 품질(목표)을 위한 설계는 고려해보지 않았는데, 이번 기회에 어떤 목표를 설계로 달성할 수 있을지 고민해봐야겠다는 생각이 들었다.

아키텍처 이해의 핵심은 '왜'로 시작하는 질문에서 얻을 수 있다. 이해한다고 해서 특정 프로세스를 따르거나 특정 언어로 프로그램하거나 종이에 다이어그램을 작성해야 하는 것은 아니다. 소프트웨어 아키텍처를 이해한다는 말은 (불완전하고 불완벽하지만) 지식과 추상화를 머리에 자리 잡게 해서 새로운 시스템을 구축하거나 기존 시스템을 분석할 때 이해한 내용을 활용할 수 있다는 의미다.

(저자의 의도가 어떻든 간에) 위안이 되었던 것은, 이해하지 못한다고 해서 두려울 필요가 없다는 말이었다. 아는 만큼 보인다던데, 보이는 게 많이 없어서 아직도 갈 길이 멀구나 싶었다.

아는 게 없어서 이론적인 부분은 솔직히 지루했다. 와중에 홈 미디어 플레이어라는 예제를 넣었는데 그 부분은 흥미롭게 읽었다. 있을 법한 프로젝트로 내용을 녹여낸 것이 좋았다. 더불어 전반적으로 이해를 돕기 위한 다이어그램이 삽입되어 있어서 글과 함께 읽기에 좋았다. 또, 모호할 수 있는 표현은 영어와 같이 병기한 것도 좋았다.

책에서는 독자로 미숙한 개발자, 숙련된 개발자, 소프트웨어 아키텍트, 학계 관련 인사를 꼽는다. 소프트웨어 공학 공부를 막 끝마치고 따끈따끈한 두뇌일 때 이 책을 읽으면 좋지 않을까? 어디까지나 개인적인 견해다.


한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다.