아키텍처 사고
Architecture Thinking
아키텍트는 개발자와는 다른 관점을 가지고 프로젝트를 바라봐야 합니다. 이때 가져야하는 관점, 사고를 아키텍처 사고라고 합니다. 아키텍트를 목표로 하는 개발자들이 아키텍처를 바라보는 시야, 관점은 모두다 다르지만, 너무 단순하게 생각하는 분들도 간혹 봐왔습니다.
Fundamentals of Software Architecture 의 저자가 아키텍처 사고에 대해 잘 정리한 것 같아 참고하여 정리해보려 합니다. 해당 책의 저자는 아키텍처 사고를 크게 4가지로 나누고 있습니다.
첫째, 아키텍처와 설계의 차이를 이해하고 아키텍처 작업을 진행하려면 개발팀과 어떻게 협력해야 할지 아는 것
둘째, 어느 정도 기술 깊이를 유지하면서 폭넓은 기술 지식을 확보하는 것
셋째, 다양한 솔루션과 기술 간의 트레이드 오프를 이해, 분석, 조율하는 것
넷째, 비지니스 동일의 중요성을 이해하고 그것을 아키텍처 관심사로 해석할 줄 아는 것
첫째, 아키텍처와 설계의 차이를 이해하고 아키텍처 작업을 진행하려면 개발팀과 어떻게 협력해야 할지 아는 것
아키텍트와 개발자가 설계하는 파트는 다를 수 있습니다. 아키텍트는 비지니스와 기술 문제를 해결하기 위해 아키텍처와 설계의 차이점을 알고 이 둘을 통합한 솔루션을 모색하는 역할자입니다. 전통적인 아키텍트는 비지니스 요구사항을 분석하고 제약조건을 명시, 컴포넌트 구조 분석, 설계 등을 진행하면, 전달받은 개발자각 각 패키지, 컴포넌트 내의 인터페이스, 클래스 등을 설계하고 구현을 했습니다.
단 방향으로 진행된 것이죠, 하지만 현재 위와 같은 방식으로 아키텍처와 개발자가 일을 한다는 것은 아키텍트와 개발자 사이의 가상의 벽을 세우고 소통하지 않고, 프로젝트 진행 시 큰 문제가 될 수 있습니다. 아키텍트가 결정한 사항이 개발팀에서 검토 시 전혀 쓸모없고, 사용할 수 없는 솔루션인 경우도 많습니다. 그렇기에 단방향이 아니라 상호 피드백을 하며 서로가 서로의 작업을 이해하고 협력해야 프로젝트를 성공 시킬 수 있습니다.
둘째, 어느 정도 기술 깊이를 유지하면서 폭넓은 기술 지식을 확보하는 것
아키텍트와 개발자의 기술 범위와 집중 분야는 다릅니다. 개발자는 본인의 개발 분야에 대해 기술의 깊이를 확보해야 합니다. 개발자는 자신이 알고 있는 것을 더 깊이있게 알기 위해 노력을 합니다. 하지만 아키텍트는 조금 다릅니다. 자신이 알고 있는 기술에 대해서만 깊이를 쌓는 것보다는 자신이 모른다는 사실을 아는 분야에 대해 학습을 합니다. 즉, 깊이가 아닌 넓이를 넓혀가며 자신이 모르는 것을 아는 분야를 자신이 알고있는 분야로 쌓아가는 것입니다.
아키텍트의 가치는 대부분 기술에 대한 폭 넓은 이해와 그 기술을 사용하여 특정 문제를 해결하는 것입니다. 그러기 위해서 한가지 전문 지식이 아니라 문제를 해결하기 위한 여러 솔루션을 알고있는 것이 큰 도움이 됩니다.
셋째, 다양한 솔루션과 기술 간의 트레이드 오프를 이해, 분석, 조율하는 것
아키텍트는 기술 여부와 관계없이 모든 솔루션의 트레이드 오프를 분석할 줄 알고 최선의 선택을 할 줄 알아야 합니다. A 기술이 좋은지, B 기술이 더 좋은지는 상황에 따라 다릅니다. 각각의 장점만을 생각할 수도 있지만, 각 기술의 단점과 단점이 존재함에도 불구하고 왜 이 솔루션에서 이 기술을 적용해야 하는지 트레이트 오프를 분석할 수 있어야 합니다.
넷째, 비지니스 동인의 중요성을 이해하고 그것을 아키텍처 관심사로 해석할 줄 아는 것
마지막으로, 비지니스 동인에 관한 것입니다. 성공적인 시스템 구축을 위해 필요한 비지니스 동인을 이해하고 요구사항을 아키텍처 특정으로 해석해 내는 것입니다. 따라서 이해관계자들과 원만하게 협력하고 요구사항을 이끌어내고 정리할 줄 알며, 그 사항들을 시스템으로 변환시킬 줄 알아야 합니다.
간략하게 글로 정리하기 어려운 내용에 대해 책의 내용을 빌어 정리해 보았습니다. 감사합니다.
Reference
- Fundamentals of Software Architecture, 마크 리처즈, 닐 포드 지음