# heegeon

## 1장. 설계와 아키텍처란?

#### 소프트웨어 아키텍처의 목표

* 소프트웨어 아키텍처의 목표는 필요한 시스템을 만들고 유지보수하는 데 투입되는 인력을 최소화하는 데 있다.
* 설계 품질을 재는 척도는 고객의 요구를 만족시키는 데 드는 비용을 재는 척도와 다름없다.

#### 잘못된 아키텍처의 사례

1. "코드는 나중에 정리하면 돼. 당장은 시장에 출시하는 게 먼저야"
2. 이전에 작성한 코드로 돌아가서 정리하는 일은 거의 없다.
3. 바로 다음에 만들어야 할 새로운 기능이 항상 기다리기 때문이다.

#### 결론

어떤 경우라도 개발 조직이 할 수 있는 최고의 선택지는 조직에 스며든 과신을 인지하여 방지하고, 소프트웨어 아키텍처의 품질을 심각하게 고민하기 시작하는 것이다.

## 2장. 두 가지 가치에 대한 이야기 - 행위와 구조

#### 행위

* 프로그래머를 고용하는 이유는 이해관계자를 위해 기계가 수익을 창출하거나 비용을 절약하도록 만들기 위해서이다.
* 요구사항을 구현하고 버그를 수정하는 일이 직업이 아니다.

#### 아키텍처

* 소프트웨어는 말 그대로 '부드러운 제품'이라는 의미를 가진다.
* 소프트웨어는 부드러움을 지니도록 만들어졌는데 이는 기계의 행위를 쉽게 변경할 수 있도록 하기 위해서다.
* 즉, 이해관계자가 기능에 대한 생각을 바꾸면 이러한 변경사항을 간단하고 쉽게 적용할 수 있어야 한다.
* 변경사항의 범위에 비례하고 형태와는 관련이 없어야 한다.
* 기존의 형태와 다른 형태의 요구사항을 마주하더라도 변경이 가능하도록 아키텍처는 형태에 독립적이어야 하고 그럴수록 더 실용적이다.

#### 더 높은 가치

* 완벽하게 동작하지만 수정이 불가능한 프로그램과 동작하지 않지만 변경이 쉬운 프로그램 중 더 유용한 것은 후자이다.

#### 결론

아키텍처가 후순위가 되면 시스템을 개발하는 비용이 더 많이 들고, 일부 또는 전체 시스템에 변경을 가하는 일이 현실적으로 불가능해진다.
