27장 '크고 작은 모든' 서비스들

 

서비스 아키텍처

 

프로세스나 플랫폼 경계를 가로지르는 함수 호출에 지나지 않는 '서비스' 라는 것은 아키텍처 관점에서 중요한 서비스도 있지만, 중요하지 않은 서비스도 존재함.

서비스 아키텍처가 주는 이점들에 대해 저자는 따져 봄.

 

 

 

결합 분리의 오류

 

시스템을 서비스들로 분리함으로써

서비스 사이의 결합이 확실히 분리된다는 이점이 있음.

→ 모든 서비스 인터페이스가 잘 정의 되어있으며 서비스는 다른 서비스 변수에 직접 접근할 수 없어야 함.

 

그러나

  1. 서비스 사이를 오가는 데이터 레코드에 새로운 필드를 추가한다면 이 필드를 사용하는 서비스는 모두 변경되어야함.
  2. 서비스들은 이 필드에 담긴 데이터를 해석하는 방식을 사전에 완벽하게 조율 해야함.

따라서 서비스들은 데이터 레코드에 강하게 결합되어 서비스들 간에 간접적인 결합이 생김.

 

 

 

개발 및 배포 독립성의 오류

 

대규모 엔터프라이즈 시스템을 독립적으로 개발하고 배포 가능한, 수십, 수백 ...개의 서비스들을 이용하여 만들 수 있으며 이러한 개발 및 배포 독립성으로 확장 가능 또한 가능함.

그러나

  1. 서비스 기반 시스템 이외에도 모노리틱, 컴포넌트 기반 시스템으로도 구축하여 확장가능하기 때문에 서비스 기반이 유일한 선택지는 아님.
  2. '결합 분리의 오류'에 따르면 서비스가 항상 독립적으로 개발, 배포, 운영할 수 있는 것은 아님.

 

 

 

야옹이 문제

 

택시 통합서비스를 구현하기 위해 배치된 서비스들

 

특징을 보면 기능적으로 분해되어있음.

이로인해 서비스가 모두 결합되어있어 추가로 예를들어 야옹이 배달 기능을 구현하려면 기존 서비스를 전부다 변경해야함.

독립적으로 개발하고 배포하거나 유지될 수 없음.

→ 횡단 관심사가 지닌 문제. (서비스 지향이든 아니든 모든 SW이 문제에 직면함.)

 

 

 

객체가 구출하다.

 

이문제는 컴포넌트 기반 아키텍처에서 해결가능.

 

객체 지향 방식으로 횡단 관심사를 처리하기

 

기능적으로 분해된 다이어그램에서 새로운 야옹이라는 기능이 기능적 행위를 횡단하는 상황이였지만

다형적으로 확장할 수 있는 클래스 집합을 생성해 새로운 야옹이 기능을 처리함.

따라서 야옹이 기능은 결합이 분리되며, 독립적으로 개발, 배포할 수 있음.

 

 

 

컴포넌트 기반 서비스

 

서비스또한 SOLID 원칙대로 설계할 수 있으며 컴포넌트 구조를 갖출 수 있어 기존 컴포넌트를 변경하지 않고도 새로운 컴포넌트를 추가할 수 있음.

 

 

각 서비스의 자신만의 컴포넌트 설계로 되어있어서 파생 클래스를 만드는 방식으로 야옹이 같은 신규 기능을 추가 할 수 있음.

 

 

 

횡단 관심사

 

 

횡단 관심사를 처리하려면 다이어그램처럼 서비스 내부의 의존성 규칙을 준수하는 컴포넌트 아키텍처로 설계되어야함.

아키텍처경계는 서비스 사이에 존재하지 않으며, 아키텍처 경계를 정의하는것은 서비스 내에 위치한 컴포넌트임.

'📚 Book > Clean Architecture' 카테고리의 다른 글

30장 데이터베이스는 세부사항이다  (0) 2020.02.22
28장 테스트 경계  (0) 2020.02.22
26장 메인(Main) 컴포넌트  (0) 2020.02.22
25장 계층과 경계  (0) 2020.02.22
24장 부분적 경계  (0) 2020.02.22