- 시스템 아키텍처는 일련의 소프트웨어 컴포넌트와 그 컴포넌트들을 분리하는 경계에 의해 정의
경계 횡단하기
- 런타임에 경계를 횡단함은 그저 경계 한 쪽에 있는 기능에서 반대편 기능을 호출하여 데이터 전달에 불과
- 적절한 위치에서 경계를 횡단하게 하는 비결은 소스 코드 의존성 관리에 있다
- 소스 코드 모듈 하나가 변경되면 이에 의존하는 다른 소스 코드 모듈도 변경하거나 다시 컴파일해서 새로 배포해야 할 지도 모르기 때문
두려운 단일체
- 아키텍처 경계 중에서 가장 단순하며 가장 흔한 형태는 물리적으로 엄격하게 구분되지 않는 형태
- 이는 소스 수준 분리 모드라고 불리운다
- 배포 관점에서 보면 이는 소위 단일체라고 불리는 단일 실행 파일에 지나지 않는다
- 이처럼 단일체는 경계가 드러나지 않는다
- 이러한 아키텍처는 거의 모든 경우에 특정한 동적 다형성에 의존하여 내부 의존성을 관리
- 가장 단순한 형태의 경계 횡단은 저수준 클라이언트에서 고수준 서비스로 향하는 함수 호출
- 그림 18.1 제어흐름은 경계를 횡단할 때 저수준에서 고수준으로 향한다
- 그림 18.2 제어흐름과는 반대로 경계를 횡단한다
- 단일체에서 컴포넌트 간 통신은 매우 빠르고 값싸다
- 결과적으로 소스 수준에서 결합이 분리되면 경계를 가로지르는 통신은 상당히 빈번할 수 있다
배포형 컴포넌트
- 아키텍처의 경계가 물리적으로 드러날 수도 있는데, 그 중 가장 단순한 형태는 동적 링크 라이브러리
- 컴포넌트를 이 형태로 배포하면 따로 컴파일하지 않고 곧바로 사용할 수 있다
- 컴포넌트는 바이너리와 같이 배포 가능한 형태로 전달