서평 - 진화적 아키텍처

 

이 포스팅은 도서 진화적 아키텍처에 대한 리뷰를 담고 있습니다.

진화적 아키텍처 표지

  • 출처: YES24

요약

소프트웨어 개발자에게 레거시 코드는 피할 수 없는 숙명입니다. 어떤 코드이든 배포가 되어 사용하는 순간 배포된 내용을 수정하는데는 큰 비용이 들기 때문입니다. 이런 조건 속에서 비교적 빠르게 변화하는 요구 사항을 대응하기 위한 애자일 방법이 2000년 전후로 등장합니다. 그렇다면 소프트웨어 개발은 어떻게 하는 것이 합리적일까요? 이 책에서는 진화적 아키텍처라는 관점을 소개하고 이를 통해 어떻게 소프트웨어를 점진적으로 개선해 나갈 수 있는지 제시하고 있습니다.

진화적 소프트웨어

코드를 개발하고 릴리즈하면 그 순간부터 그 코드는 과거의 코드가 됩니다. 이러한 코드를 흐름에 맞게 변경하지 않는다면 그 코드는 결국 시스템 개선 자체를 막는 레거시가 될 수도 있습니다. 이 책에서는 이러한 현상을 나타내는 용어 - 비트 부배, 소프트웨어 부패, 소프트웨어 엔트로피 등 - 으로 설명을 시작합니다. 그리고 이 책의 핵심을 소개하는데요, 바로 다음과 같습니다.

  • 진화적 소프트웨어 아키텍처는 여러 차원에 걸쳐 유도된 변화와 점진적 변화를 지원한다.

서비스를 운영하다보면 간단히 수정하여 가능한 일이 있고 근간을 고쳐야 하는 일도 생깁니다. 만약 서비스를 지탱하는 코드를 한번에 몽땅 교체하려면 이에 드는 테스트 비용과 적용 후 유지 비용은 첫 오픈 때보다도 훨씬 클 것입니다. 이러한 관점에서 우리는 목표를 갖고 유도된 변화와 점진적 변화를 해야 한다고 말하고 있습니다.

피트니스 함수

유도된 변화와 점진적 변화를 위해서 fitness function (피트니스 함수)에 대해 이야기 하고 있습니다. 이는 머신러닝의 유틸리티 함수와 같은 개념이라고 생각이 되는데요 외판원 문제 (TSP) 를 언급하며 이를 뒷받침하고 있습니다. 피트니스 함수는 유닛 테스트, 통합 테스트 혹은 QA 등이 될 수 있는 것으로 이해했습니다. 즉, 서비스를 개선해 나갈 때 안전 장치를 두고 진행한다는 말이지요.

마이크로서비스 아키텍처

여러 사람이 각자의 도메인에 맞게 그리고 전체의 목표에 맞게 업무를 진행하기 위해 마이크로서비스 아키텍처를 사용한다고 이해하고 있습니다. 실제로 이 환경에서 일하다보면 타 부서의 컨텍스트 중 필요한 부분을 파악하고 그에 맞게 업무를 하기 위해 상당한 시간을 들여야 합니다. 여기서 응집도와 커플링 관련 이야기를 하고 있는데요, 저는 이를 바라보는 핵심은 결국 다 함께 업무를 진행하고 전진하기 위한 구조를 잡기 위해 마이크로서비스 아키텍처를 선택할 수 밖에 없었다고 이해하고 있습니다. 이 책에서는 이러한 환경에서 아키텍처를 어떻게 설계해야 할지 그리고 불필요한 부분은 없는지에 대해 고찰하고 있습니다.

마무리

“소프트웨어는 변화해야 하는가?” 저는 이 질문이 진화적 아키텍처를 잘 이해하기 위한 좋은 질문이라고 생각합니다. 컴퓨터 공학에서는 폭포수 개발모델에서 시작하여 비교적 최근의 애자일 방법론으로까지 변화하고 있고 애자일 또한 세부적인 사항이 변화하고 있습니다. 이 책의 후반부에 언급하는 테스트 주도 개발 (TDD) 등도 이러한 변화 과정을 나타내는 방법론이라고 할 수 있습니다.

여러 사람이 함께하는 소프트웨어 프로젝트는 분명 달성하기 위한 목적과 목표가 있을 것 입니다. 예를 들면 자사의 제품을 온라인에서도 팔기 위한 쇼핑몰 사이트가 될 수도 있겠습니다. 이 때, 쇼핑몰이라는 큰 틀은 변하지 않는다 하더라도 세부적인 사항들은 언제나 변할 수 있습니다. 만약 소규모 개발이 아닌 대규모 프로젝트를 진행한다면 서로 역할을 나눠 마이크로서비스로 각자의 역할은 분리하되 규약을 세워 API 등을 통해 공동의 문제를 해결해 나갈 것 입니다. 이러한 규모라면 우리는 언제나 레거시를 고려하며 앞으로 전진해야 합니다. “소프트웨어는 변화해야 하는가?” 이 질문을 다시 생각해보자면 변화할 수 밖에 없다고 생각합니다. 이 책의 진화적 아키텍처는 그러한 과정을 저자들이 어떤 관점을 갖고 있고 어떻게 해결해 나가는지에 대해 PenultimateWidgets의 사례를 기반으로 설명하고 있습니다 (이는 물론 가상의 사례일 것이라 생각합니다).

이 책을 처음 읽었을 땐 어휘가 익숙하지 않아 눈에 익는데 조금 시간이 걸렸습니다. 제가 알고 있던 용어와 연결하는데 시간이 좀 걸린 것이고 이것이 익숙해지니 변화하는 소프트웨어 개발을 이렇게 볼 수도 있다는 관점을 엿볼 수 있었습니다. 레거시화 된 코드를 보며 어떻게 하면 좀 더 안전하게 그리고 적절한 비용으로 개선할 수 있는지 고민이 있으셨던 분들이 읽어보시면 생각을 정리하는데 도움이 될 수 있을 것이라 생각합니다.

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