[Clean Architecture 정리] 15장. 아키텍처
아키텍처
시스템 아키텍처
- 시스템 아키텍처란 '컴포넌트 분할', '컴포넌트 배치', '컴포넌트 간 의사소통' 등 시스템을 구축했던 사람들이 만들어낸 시스템의 형태이다.
- 시스템 아키텍처는 소프트웨어의 개발, 배포, 운영, 유지보수가 쉽게 될 수 있도록 설계되어야 한다.
- "이러한 일을 용이하게 만들기 위해서는 가능한 한 많은 선택지를, 가능한 한 오래 남겨두는 전략을 따라야 한다."
- 아키텍처의 목적은 시스템 생명 주기를 지원하는 것이고, 궁극적인 목표는 시스템 수명과 관련된 비용을 최소화하고, 프로그래머의 생산성은 최대화하는 것이다.
소프트웨어 아키텍트
- 소프트웨어 아키텍트는 프로그래밍 작업을 계속해서 하는 동시에 팀원이 생산성을 극대화할 수 있는 설계를 하도록 방향을 이끌어 줘야한다.
- 소프트웨어 아키텍트는 코드와 멀어지지 않아야 한다. 개발에서 발생하는 문제를 직접 경험하고 이해해서 다른 개발자를 지원할 수 있어야 한다.
개발
- 시스템 아키텍처는 개발팀이 개발을 쉽게 진행할 수 있도록 지원해야 한다.
- 소규모 팀이라면, 잘 정의된 컴포넌트나 인터페이스가 없더라도 '모노리틱(monolithic) 시스템'을 개발해 서로 효율적으로 협력할 수 있도록 지원한다.
- 대규모 팀이라면, 시스템을 신뢰할 수 있고 안정된 인터페이스를 갖춘, 잘 설계된 컴포넌트 단위로 분리하는 방식의 아키텍처를 설계하고 지원한다.
배포
- 소프트웨어 아키텍처는 시스템을 단 한 번에 쉽게 배포할 수 있도록 만드는데 목표를 두어야한다.
- 더 적은 서비스를 이용하고, 더 통합된 도구를 사용하는 등 개발 초기부터 고려해 개발팀이 배포 문제를 겪지 않도록 지원해야 한다.
운영
- 아키텍처가 개발, 배포, 유지보수보다 운영에 미치는 영향력이 더 작을 수 있지만, 좋은 아키텍처는 시스템을 운영하는데 필요한 요구를 알려준다.
- 유스케이스, 기능, 시스템의 필수 행위를 일급(first-class) 엔티티로 격상시켜, 이들 요소가 개발자에게 주요 목표로 인식되도록 해야한다.
유지보수
- 유지보수는 소프트웨어 시스템에서 비용이 가장 많이드는 요소이다.
- 유지보수의 가장 큰 비용은 탐사(spelunking)와 관련된 위험요소이며, 컴포넌트 분리, 안정된 인터페이스 등을 통해 이러한 비용들을 낮출 수 있도록 해야한다.
선택사항 열어두기
- 소프트웨어는 기계의 행위를 변경하는데 유연성을 갖기 위함이고, 이 유연성은 시스템의 형태, 컴포넌트의 배치 방식, 컴포넌트 간 연결 방식에 의존한다.
- 모든 소프트웨어 시스템은 정책(policy)와 세부사항(detail)로 분해할 수 있다.
- 정책 요소(policy)는 모든 업무 규칙과 업무 절차를 구체화하며, 세부사항(detail)은 사람, 외부 시스템, 프로그래머가 정책과 소통할 때 필요한 요소이다.
- 소프트웨어를 유연하게 유지하기 위해선, 세부사항(detail)을 가능한 한 많이, 오랫동안 열어 두는 것이다.
- 아키텍츠의 목표는 시스템에서 정책을 가장 핵심적인 요소로 식별하고, 세부사항은 정책에 무관하게 만들 수 있는 형태의 시스템을 구축하는 것이다.
아키텍처란
- 좋은 아키텍트는 세부사항을 정책으로부터 신중하게 가려내고, 정책이 세부사항과 결합되지 않도록 엄격하게 분리한다.
- 정책은 세부사항에 관한 어떤 것도 알지 못하며, 어떤 경우에도 세부사항에 의존하지 않는다.
- 좋은 아키텍트는 세부사항에 대한 결정을 가능한 한 오랫동안 미룰 수 있는 방향으로 정책을 설계한다.
서적 : http://www.yes24.com/Product/Goods/77283734