Post

아키텍처란?

15. 아키텍처란?

소프트웨어 아키텍트는 프로그래머이며, 앞으로도 계속 프로그래머로 남는다.

소프트웨어 아키텍트는 최고의 프로그래머이며, 앞으로도 계속 프로그래미 작업을 맡은 뿐만 아니라 동시에 나머지 팀원들이 생산성을 극대화할 수 있는 설계를 하도록 방향을 이끌어 준다.

소프트웨어 시스템의 아키텍처란 시스템을 구축했던 사람들이 만들어낸 시스템의 형태

가능한 한 많은 선택지를, 가능한 한 오래 남겨두는 전략을 따라야 한다.

아키텍처의 주된 목적은 시스템의 생명주기를 지원하는 것

좋은 아키텍처는 시스템을 쉽게 이해하고, 쉽게 개발하며, 쉽게 유지보수하고, 또 쉽게 배포하게 해준다.

아키텍처의 궁극전인 목표는 시스템의 수명과 관련된 비용은 최소화하고, 프로그래머의 생산성은 최대화화는 것

개발

시스템 아키텍처는 개발팀들이 시스템을 쉽게 개발할 수 있도록 만들어야 한다.

팀 구조에 따라 아키텍처 관련 결정에서 차이가 생긴다.

배포

소프트웨어 아키텍처는 시스템을 단 한 번에 쉽게 배포할 수 있도록 만드는 데 그 목표를 두어야 한다.

운영

아키텍처가 시스템 운영에 미치는 영향은 개발, 배포, 유지보수에 미치는 영향보다는 덜 극적이다.

좋은 소프트웨어 아키텍처는 시스템을 운영하는 데 필요한 요구도 알려준다.

유지보수

유지보수의 가장 큰 비용은 탐사(spelunking)와 이로 인한 위험부담에 있다.

탐사란 기존 소프트웨어에 새로운 기능을 추가하거나 결함을 수정할 떄, 소프트웨어를 파헤쳐서 어디를 고치는 게 최선인지, 그리고 어떤 전력을 쓰는 게 최적일지를 결정할 때 드는 비용

선택사항 열어 두기

소프트웨어를 부드럽게 유지하는 방법은 선택사항을 가능한 한 많이, 그리고 가능한 한 오랫동안 열어두는 것

모든 소프트웨어 시스템은 정책과 세부사항으로 분해가능

정책 요소는 모든 업무 규칙과 업무 절차를 구체화(시스템의 진정한 가치가 살아있는 곳)

세부사항은 사람, 외부 시스템, 프로그래머가 정책과 소통할 떄 필요한 요소지만, 정책이 가진 행위에 조금도 영향을 미치지 않는다. (ex. 데이터베이스, 웹 시스템, 서버, 프레임워크 …)

아티텍트의 목표는 시스템에서 정책을 가장 핵심적인 요소로 식별하고, 동시에 세부사항은 정책에 무관하게 만들 수 있는 형태의 시스템을 구축하는 데 있다.

세부사항에 몰두하지 않은 채 고수준의 정책을 만들 수 있다면, 세부사항에 대한 결정을 오랫동안 미루거나 연기할 수 있다.

선택사항을 더 오랫동안 열어 둘 수 있다면 더 많은 실험을 해볼 수 있고 더 많은 것을 시도할 수 있다.

좋은 아키텍트는 결정되지 않은 사항의 수를 최대화한다.

장치 독립성

코드를 입출력 장치와 결합함 -> 장치 종속적

입출력 장치가 새로 추가될 때마다 수정이 어려워짐

장치 독립성이 필요하다

결론

좋은 아키텍트는 세부사항을 정책으로부터 신중하게 가려내고, 정책이 세부사항과 결합되지 않도록 엄격하게 분리

좋은 아키텍트는 세부사항에 대한 결정을 가능한 한 오랫동안 미룰 수 있는 방향으로 정책 설계

참조

  1. 클린 아키텍처(Clean Architecture)
This post is licensed under CC BY 4.0 by the author.