[Book]Clean Architecture 5부(15~19장)
아키텍처란?
- SW아키텍트는 코드와 동떨어져서는 안 된다.
- 아키텍처의 주된 목적은 시스템의 생명주기를 지원하는 것이다.
- 좋은 아키텍처는 시스템을 쉽게 이해하고, 쉽게 개발하며, 쉽게 유지보수하고, 또 쉽게 배포하게 해준다.
- 아키텍처의 궁극적인 목표는 시스템의 수명과 관련된 비용은 최소화하고, 프로그래머의 생산성은 최대화하는 데 있다.
개발
- 개발하기 힘든 시스템이라면 수명이 길지도 않고 건강하지도 않을 것이다.
배포
- SW 아키텍처는 시스템을 단 한 번에 쉽게 배포할 수 있도록 만드는 데 그 목표를 두어야 한다.
운영
- 좋은 SW아키텍처는 시스템을 운영하는데 필요한 요구를 알려준다.
유지보수
- 모든 측면에서 봤을 때, SW시스템에서 비용이 가장 많이 든다.
- 신중하게 아키텍처를 만들면 이 비용을 크게 줄일 수 있다.
선택사항 열어두기
- 아키텍트의 목표는 시스템에서 정책을 가장 핵심적인 요소로 식별하고, 동시에 세부사항은 정책에 무관하게 만들 수 있는 형태의 시스템을 구축하는 데 있다. 이를 통해 세부사항을 결정하는 일은 미루거나 연기할 수 있다.
독립성
유스케이스
- 시스템 아키텍처는 시스템의 의도를 지원해야 한다.
- 아키텍트의 최우선 관심사는 유스케이스이며, 아키텍처에서도 유스케이스가 최우선이다.
운영
- 시스템의 운영 지원 관점에서 볼 때, 아키텍처는 더 실질적이며 덜 피상적인 역할을 맡는다.
개발
- 콘웨이의 법칙
시스템을 설계하는 조직이라면 어디든지 그 조직의 의사소통 구조와 동일한 구조의 설계를 만들어 낼 것이다.
배포
- 목표는 즉각적인 배포
유스케이스 결합분리
경계 : 선긋기
- 소프트웨어 아키텍처는 선을 긋는 기술이며, 경계라고 부른다.
- 어떤 종류의 결정이 이른 결정일까?
- 시스템의 업무 요구사항
- ex) 프레임워크, 데이터베이스, 웹 서버, 유틸리티 라이브러리, 의존성 주입에 대한 결정
- 좋은 아키텍처는 이러한 결정을 최후의 순간에 내릴 수 있게 해주며, 결정에 따른 영향이 크지 않게 해준다.
경계 해부학
- 경계 횡단하기
- 두려운 단일체
- 배포형 컴포넌트
- 스레드
- 로컬 프로세스
- 서비스
정책과 수준
- 좋은 아키텍처라면 각 컴포넌트를 연결할 때, 의존성 방향이 컴포넌트의 수준을 기반으로 연결되도록 만들어야 한다. 즉, 저수준 컴포넌트가 고수준 컴포넌트에 의존하도록 설계되어야 한다.
- 소스코드의존성은 그 수준에 따라 결합되어야하며, 데이터 흐름을 기준으로 결합되면 안된다.
댓글남기기