아키텍처 관점으로 중요한 서비스도 있지만, 그렇지 않은 서비스도 존재한다.
→ 저자는 중요한 서비스에 대해 관심을 가진다.
서비스 아키텍처에 대해 이의 제기.
결합 분리의 오류
이점1. 서비스를 분리함으로써 통해 상호 결합이 확실히 분리된다고 본다.
그러나 서비스 프로세서의 네트워크 상 공유 자원 때문에 결합될 가능성은 여전히 존재한다.
따라서 서비스들은 레코드에 강하게 결합되고, 서비스들 사이는 간접적으로 결합되어 버린다.
개발 및 배포 독립성의 오류
이점2. 시스템을 독립적으로 개발하고, 배포 가능한 수십/수백/수천 개의 서비스들을 이용해 만들 수 있다고 믿는다.
그러나
‘결합 분리 오류', ‘개발 및 배포 독립성의 오류’에 대한 예
TaxiFinder: TaxiSupplier를 검토해 택시 후보 선별
TaxiSelector: 사용자의 요구 조건에 따라 후보 중 적합한 택시 선택
TaxiDispatcher: 해당 택시에 배차 지시
택시 통합 시스템이 각각의 서비스별로 나뉘어 개발, 운영되고 있다.
만약 야옹이 배달 서비스를 추가하겠다고 한다면?
→ 모든 소프트웨어의 횡단 관심사가 지닌 문제
컴포넌트 기반 아키텍처에서 이 문제를 해결한다면?
배차에 특화된 로직 부분은 Rides 컴포넌트로 추출, 야옹이의 신규 기능은 Kittens 컴포넌트에 들어감
두 컴포넌트 모두 의존성 규칙 준수
서비스도 객체 지향 방식처럼 해결할 수 있을까? 🙆🏻♀️
서비스 또한 SOLID 원칙대로 설계할 수 있으며 컴포넌트 구조를 갖출 수도 있다.
횡단 관심사를 처리하려면, 서비스 내부는 의존성 규칙도 준수하는 컴포넌트 아키텍처로 설계해야 한다.
→ 아키텍처 경계를 정의하는 것은 서비스가 아닌, 서비스 내 위치한 컴포넌트다.
서비스 자체로는 아키텍처적으로 중요한 요소는 아니다.
서비스를 단일 컴포넌트로 만들거나, 다수의 컴포넌트로 구성되는 컴포넌트 기반 서비스를 만들어야 한다.