피티니트 함수라는 개념을 도입함으로써 유동적이며 역동적인 서비스 환경을 가진 아키텍처를 구축할 수 있는 방법에대하 새로운 지평을 재시 한 지침서
모든 서비스를 개발하기 이전에 가장 중요한 일은 바로 서비스의 성격에 맞게 설계, 즉 아키텍처링을 하는 것이다.
아키텍처링은 간단히 말해 서비스 목적에 맞게 시스템 전반에 걸친 각각의 컴포넌트를 적재적소 혹은 적당한 기술을적용하여 효율적인 서비스 환경을 구축하기 위한 청사진을 그리는 작업이라 할 수 있다.
특히 아키텍처링은 근미래에 있어서 가장 중요한 프로그래밍 덕목 중에서 하나가 될 가능성이 농후한데, 왜냐하면 코딩과 같은 AI가 학습을 통해 자동화가 가능한 분야를제외하고는 유일하게 인간의 손에 의해 끝까지 이뤄지는 작업이 될 가능성이 크기 때문이다.
그만큼 아키텍처링은 프로그래머에게 있어서 중요한 능력이며 꼭 갖춰야 할 덕목으로써 입지를 다지고 있는 상태이다.
이러한 관점에서 이번에 소개하게 될 '진화적 아키텍처'는 이러한 유동적으로 변화해가는 서비스 시장에서 보다 역동적이며 확장성을 갖춘 서비스 아키텍처링에 대한 효과적인접근법을 제안했다는 점에서 그 의의가 크다 할 수 있다.
【책의 구성】 "진화적 아키텍처"의 구성은?
이 책은 총 3개의 파트로 구성되어 있으며 각 파트별 해당 파트에필요한 챕터들로 구성이 짜여있는 형태이다.
파트 1의 주제는 역학이며, 해당파트에서는 이 책에서 주장하는 피트니스 함수란 무엇인지, 그리고 배포 파이프라인의 자동화 등에 대해서설명하고 있다.
파트 2의 주제는 구조이며, 해당파트에서는 아키텍처링 관점에서의 응집도란 무엇인지 그리고 커플링이란 무엇이며 이 과정에서 어떤 것들이 안티 패턴이고 회피해야 하는지 등에 대해서설명하고 있다.
마지막 파트인 3파트에서는 아키텍처링을 진행하며 겪을 수 있는 사례와경우들에 대한 적절한 예시 그리고 저자들이 생각하는 올바른 방향에 대해서 지침을 제안하고 가이드 해줌으로써 위에서 제시한 문제들을 효과적으로 극복하고개선할 수 있는 방법에 대해서 제안하였다.
이번 포스팅에서는 파트 1의 1챕터와 3챕터의 내용에 대해서 간략히 소개할 예정이다.
1 챕터(장) : 진화적 소프트웨어 아키텍처
이 챕터에서는 진화적 소프트웨어 아키텍처의 가장 기본 개념이 되는 진화란 무엇인지에 대해서 저자의 생각을 설명하고있다.
저자들이 말하는 진화적 아키텍처란
"여러 차원에 걸쳐 유도된 변화와 점진적 변화를 지원하는 .." 소프트웨어 아키텍처를 의미한다.
여기서 말하는 유도된 변화는 "아티켁처의 핵심 특성에 대한안정적 보장을 유지하는 방향으로의 아키텍처 변화"를 의미하며
점진적 변화란 소프트웨어의 점진적 빌드와 배포 방법을 의미한다.
즉, 유도는 원초의 해당 아키텍처가 적용되게 된 목적에 대해서 아키텍처가확장되거나 변형되어도 일관성을 유지해야 함을 의미하며
점진적 빌드와 배포 방법은 구축된 아키텍처의 지속적은 배포와 자동화된 빌드 방법 등이라 명할 수 있다.
특히 이 챕터를 읽으며 마음에 들었던 문구가 있는데 그 문구는 하기와 같다.
"분리된 시스템은 없다. 세상은연속체다. 시스템의 경계를 어떻게 그릴 것인지는 논의의 목적에 달려있다."
즉, 세상을 구성한 요소들 사이에 단절은 없다. 소프트웨어 역시 마찬가지다. 그러한 소프트웨어를 이루는 아키텍처도어찌 보면 당연히 단절이 있을 수 없다. 그렇기에 아키텍처링은 지속적으로 세상과 소통하며 연속적인 개체로써생성해야 한다.
3 챕터(장) : 점진적 변화 엔지니어링
이 책에서 가장 마음에 드는 점은 책의 챕터를 시작하는 부분에서 각 챕터의 주제에 해당하는 표현에 대해서 저자가직접 정의를 정리해 준다는 점이다.
"점진적"이라는단어를 읽게 되면 제일 먼저 생각나는 단어는 "서서히","조금씩 앞으로 나아가는" 따위의 생각이 드는데, 저자가 말하는 점진적이라는 표현은 서비스에 신규 기능 혹은 변화 등이 가미될 때 이에 대해서 사용자가 점진적으로적응되게 해야 한다는 것을 표현한 것이었다.
이러한 점진적인 환경을 구성하기 위해서는 자동화된 빌드와 테스트 환경, 그리고지속적인 테스트 라인 등에 대한 구축이 필요한데, 이에 대해서는 적절한 예시를 통해 저자의 주장을 뒷받침하고있다.
무엇보다 저자의 표현 중 "자동화된 검증 절차를 등에 업은개발의 자신감이야말로 온전한 소프트웨어 개발의 결정적 비결이다!"라는 표현이 있다.
아마 아직 실무에 오래 경험하지 못한 개발자의 경우, 위의 표현이크게 와닿지 않을 수 있지만, 정말로 중요한 요소 중 하나이다. 빌드, 테스트, 배포 자동화는 반드시 모든 프로젝트 초반에 적용하길 권장한다.
【 진화적 아키텍처를 읽고 나서 】
필자가 생각하기에 세상에 존재하는 모든 것들은 변화한다. 변화하는이유는 단순하다. 세상에 존재하는 것들은 동적이며 가만히 그 자리에만 머무는 생명은 없기 때문이다.
이러한 맥으로 보았을 때, 소프트웨어도 하나의 생명체라 할 수 있다. 최초의 출현은 누군가의 필요에 의해 탄생하였지만, 그 필요 역시언제든 변화할 수 있기 마련이다. 그렇기에 소프트웨어도 그에 맞게 변화할 준비를 해야만 한다. 아니 정확히 말하면 변화해야 한다.
따라서 이러한 변화에 대한 흐름과 필요를 정확히 이해하고 이를 소프트웨어에 효율적으로 반영할 수 있는 개발자. 그런 개발자가 앞으로의 IT 시장에서 주역이 될 날이 머지않았다란생각이 부쩍 드는 요즘이다.