소프트웨어 시스템이란 정책을 기술한 것
입력과 출력까지의 거리
계속 같은 말이 반복된다. 중요하단 뜻이겠지
의존성은 저수준 컴포넌트에서 고수준 컴포넌트로 향해야 한다.
사업적으로 수익을 얻거나 비용을 줄일 수 있는 규칙 또는 절차
핵심 업무 규칙과 핵심 업무 데이터를 결합하여 만드는 객체
자동화된 시스템이 동작하는 방법을 정의하고 제약함으로써 수익을 얻거나 비용을 줄이는 업무 규칙
건물의 청사진을 보고 어떤 건물인지 알 수 있는 것처럼 애플리케이션 아키텍처 역시 어떤 시스템인지 알 수 있어야 한다.
소프트웨어 아키텍처는 유스케이스를 지원하는 구조
아키텍처를 통해 시스템이 보여야 한다는 것, 유스케이스를 중심으로 구조를 잡고 프레임워크에 구조를 의존하지 말것 모두 명심하자
결론 부분의 예시가 상당히 재미있다.
"모델처럼 보이는 것들을 확인했습니다. 그런데 뷰와 컨트롤러는 어디에 있죠?"
그러면 "그것은 세부사항이므로 당장은 고려할 필요가 없습니다. 나중에 결정할 겁니다." 이렇게 답할 수 있어야 한다는 게 흥미로웠다.
시스템 아키텍처에 관한 여러가지 아이디어가 존재하지만 핵심적인 내용은 비슷하고 목표는 모두 같다.
모든 아키텍처 아이디어가 공유하는 목표로 소프트웨어를 계층으로 분리함으로써 관심사 분리라는 목표를 달성하고 있다.
모든 아키텍처는 시스템이 다음과 같은 특징을 지니도록 만들어졌다.
프레임워크 존재 여부에 의존하지 않는다. 프레임워크를 도구로 사용한다.
업무 규칙은 UI, DB, 웹 서버 등 세부사항 없이도 테스트할 수 있다.
시스템의 나머지 부분을 변경하지 않고도 UI를 쉽게 변경할 수 있다.
DB를 교체할 수 있다.
실제로 업무 규칙은 외부 세계와의 인터페이스에 대해 전혀 알지 못한다.

전사적인 핵심 업무 규칙을 캡슐화한다.
애플리케이션에 특화된 업무 규칙을 포함한다.
모델을 재패키징하는 과정을 이야기하는듯 하다.
가장 바깥쪽 계층은 일반적으로 DB나 웹 프레임워크 같은 프레임워크나 도구들로 구성된다.
다시 또 같은말 고수준으로 향하게 하라