2019.04.01

마이크로서비스 필수 통합 패턴의 이해 : 능동형 합성과 반응형 합성

Kasun Indrasir | InfoWorld
마이크로서비스 아키텍처는 독립적이고 세분화된, 자율 서비스 모음 형태의 소프트웨어 애플리케이션 빌드를 촉진한다. 따라서 실제 비즈니스 사용례를 구축하는 경우 애플리케이션을 구성하는 마이크로서비스는 서로 커뮤니케이션해야 한다. 세분화된 서비스가 확산되면서 마이크로서비스 통합과 서비스 간 커뮤니케이션 구축은 마이크로서비스 아키텍처 구현에서 가장 어려운 부분 중 하나가 됐다.
 
ⓒBrandon Mowinkel (CC0)

마이크로서비스 아키텍처의 난제를 이해하기 위해 먼저 아주 가까운 과거부터 살펴보자. 마이크로서비스 이전의 서비스 지향 아키텍처(SOA)와 웹 서비스 시대에는 모든 서비스 합성과 통합이 구현된 중앙 엔터프라이즈 서비스 버스(Enterprise Service Bus, ESB) 아키텍처가 사용됐다.

예를 들어, <그림 1>에서 볼 수 있듯이 모든 서비스는 ESB와 통합되고 선택된 비즈니스 기능이 API 관리 계층을 통해 소비자에게 노출됐다. ESB는 개별 API, 데이터, 시스템을 통합하기 위해 필요한 모든 기능을 제공했다.
 
그림 1. ESB를 사용해 중앙집중화된 통합 아키텍처 ⓒWSO2

그러나 마이크로서비스 아키텍처로 접어들자 방대한 비즈니스 로직과 모놀리식 통합 계층을 그대로 두고서는 자율성, 협소한 비즈니스 기능 집합 지향성과 같은 마이크로서비스의 근본적인 개념을 구현하기가 매우 어려워졌다. 따라서 중앙 ESB를 통합 버스로 사용하는 방법은 실용성이 떨어진다.

마이크로서비스 아키텍처에서 마이크로서비스는 스마트 엔드포인트와 단순 파이프 스타일을 사용하여 통합되며, 여기서 모든 인텔리전스는 엔드포인트에 위치하고 엔드포인트 간 상호 연결은 단순 메시징 인프라를 통해 이뤄진다. <그림 2>에서 볼 수 있듯이 파악된 비즈니스 기능을 위한 마이크로서비스를 설계할 수 있으며, 이들은 다양한 비즈니스 사용례를 실현하기 위해 상호 커뮤니케이션해야 한다.
 
그림 2. 마이크로서비스 아키텍처는 스마트 엔드포인트와 단순 파이프가 특징이다. ⓒWSO2

모놀리식 앱과 중앙 ESB를 해체하고 이 기능을 각 서비스로 분담하는 것은 말로는 간단하지만 사실 여러 난관이 있다. 따라서 일반적인 마이크로서비스 통합 패턴을 이해하고 이를 구현하기 위한 적절한 기술과 프레임워크를 선택하는 것이 매우 중요하다. 이러한 주요 마이크로서비스 통합 패턴 중 두 가지로, 능동형 합성(Active composition)과 반응형 합성(Reactive composition)이 있다.
 

마이크로서비스 아키텍처를 위한 능동형 합성 패턴

능동형 합성 패턴에서 마이크로서비스는 요청-응답 형태를 사용해 커뮤니케이션한다한다. 이 경우 마이크로서비스는 REST/HTTP, gRPC 원격 프로시저 호출, GraphQL API 쿼리 언어와 같은 동기 메시징 프로토콜을 사용해 하나 이상의 다른 마이크로서비스를 호출할 수 있다. <그림 3>은 서비스가 다양한 상호작용 유형에 따라 조직화되는 이러한 마이크로서비스 통합 시나리오를 보여준다.
 
그림 3. 능동형 합성 패턴에서 마이크로서비스는 동기화 메시징 프로토콜을 사용해 커뮤니케이션한다. ⓒWSO2


능동형 합성 마이크로서비스 구현에서는 코어 또는 원자 서비스를 식별할 수 있다. 이러한 서비스는 세분화된 자립형 서비스로, 외부 서비스 종속성이 없거나 최소한만 있고 주로 비즈니스 로직으로 구성되며 네트워크 통신 로직은 조금 있거나 없다.

원자 마이크로서비스는 극히 세분화되어 있어 비즈니스 기능에 직접 매핑할 수 없는 경우가 많으므로 특정 비즈니스 기능을 위해 여러 원자 또는 코어 서비스의 합성이 필요할 수 있다. 중간 계층은 이러한 합성 또는 통합 마이크로서비스로 구성된다. 많은 경우 이러한 서비스는 라우팅, 변환, 조율, 탄력성, 안정성과 같은 ESB 기능의 상당 부분을 지원해야 한다.

반면 합성 또는 통합 서비스는 원자 서비스에 비해 구성 입자가 크다. 상호 독립적이며 비즈니스 로직(예를 들어 라우팅, 호출할 서비스, 데이터 형식 매핑 방법 등)과 네트워크 통신 로직(예를 들어 다양한 프로토콜을 통한 서비스 간 통신과 회로 차단기와 같은 탄력성 동작)을 포함한다.

선택한 합성 서비스 집합(또는 일부 원자 서비스까지)을 API 서비스 및 에지 서비스를 사용해서 관리형 API로 노출한다. 이는 특수한 유형의 합성 서비스로, 기본적인 라우팅 기능과 API 버전 관리, API 보안 패턴, 스로틀링, 수익화를 적용하고 API 합성을 생성한다. <그림 3>에서 볼 수 있듯이 이러한 API는 제어 평면 또는 API 관리 계층에 의해 중앙 관리된다.

능동형 합성의 이점은 다양한 구현 기술을 선택해서 코어, 합성, API 서비스를 구현할 수 있다는 점이다. 단점은 서비스 간 결합과 종속성이다. 서비스가 하나 이상의 다운스트림 서비스에 종속될 수 있다. 따라서 능동형 합성은 대화형 요청-응답 스타일이 주요 요건인 특정 마이크로서비스 상호작용에만 적합하다.
 




2019.04.01

마이크로서비스 필수 통합 패턴의 이해 : 능동형 합성과 반응형 합성

Kasun Indrasir | InfoWorld
마이크로서비스 아키텍처는 독립적이고 세분화된, 자율 서비스 모음 형태의 소프트웨어 애플리케이션 빌드를 촉진한다. 따라서 실제 비즈니스 사용례를 구축하는 경우 애플리케이션을 구성하는 마이크로서비스는 서로 커뮤니케이션해야 한다. 세분화된 서비스가 확산되면서 마이크로서비스 통합과 서비스 간 커뮤니케이션 구축은 마이크로서비스 아키텍처 구현에서 가장 어려운 부분 중 하나가 됐다.
 
ⓒBrandon Mowinkel (CC0)

마이크로서비스 아키텍처의 난제를 이해하기 위해 먼저 아주 가까운 과거부터 살펴보자. 마이크로서비스 이전의 서비스 지향 아키텍처(SOA)와 웹 서비스 시대에는 모든 서비스 합성과 통합이 구현된 중앙 엔터프라이즈 서비스 버스(Enterprise Service Bus, ESB) 아키텍처가 사용됐다.

예를 들어, <그림 1>에서 볼 수 있듯이 모든 서비스는 ESB와 통합되고 선택된 비즈니스 기능이 API 관리 계층을 통해 소비자에게 노출됐다. ESB는 개별 API, 데이터, 시스템을 통합하기 위해 필요한 모든 기능을 제공했다.
 
그림 1. ESB를 사용해 중앙집중화된 통합 아키텍처 ⓒWSO2

그러나 마이크로서비스 아키텍처로 접어들자 방대한 비즈니스 로직과 모놀리식 통합 계층을 그대로 두고서는 자율성, 협소한 비즈니스 기능 집합 지향성과 같은 마이크로서비스의 근본적인 개념을 구현하기가 매우 어려워졌다. 따라서 중앙 ESB를 통합 버스로 사용하는 방법은 실용성이 떨어진다.

마이크로서비스 아키텍처에서 마이크로서비스는 스마트 엔드포인트와 단순 파이프 스타일을 사용하여 통합되며, 여기서 모든 인텔리전스는 엔드포인트에 위치하고 엔드포인트 간 상호 연결은 단순 메시징 인프라를 통해 이뤄진다. <그림 2>에서 볼 수 있듯이 파악된 비즈니스 기능을 위한 마이크로서비스를 설계할 수 있으며, 이들은 다양한 비즈니스 사용례를 실현하기 위해 상호 커뮤니케이션해야 한다.
 
그림 2. 마이크로서비스 아키텍처는 스마트 엔드포인트와 단순 파이프가 특징이다. ⓒWSO2

모놀리식 앱과 중앙 ESB를 해체하고 이 기능을 각 서비스로 분담하는 것은 말로는 간단하지만 사실 여러 난관이 있다. 따라서 일반적인 마이크로서비스 통합 패턴을 이해하고 이를 구현하기 위한 적절한 기술과 프레임워크를 선택하는 것이 매우 중요하다. 이러한 주요 마이크로서비스 통합 패턴 중 두 가지로, 능동형 합성(Active composition)과 반응형 합성(Reactive composition)이 있다.
 

마이크로서비스 아키텍처를 위한 능동형 합성 패턴

능동형 합성 패턴에서 마이크로서비스는 요청-응답 형태를 사용해 커뮤니케이션한다한다. 이 경우 마이크로서비스는 REST/HTTP, gRPC 원격 프로시저 호출, GraphQL API 쿼리 언어와 같은 동기 메시징 프로토콜을 사용해 하나 이상의 다른 마이크로서비스를 호출할 수 있다. <그림 3>은 서비스가 다양한 상호작용 유형에 따라 조직화되는 이러한 마이크로서비스 통합 시나리오를 보여준다.
 
그림 3. 능동형 합성 패턴에서 마이크로서비스는 동기화 메시징 프로토콜을 사용해 커뮤니케이션한다. ⓒWSO2


능동형 합성 마이크로서비스 구현에서는 코어 또는 원자 서비스를 식별할 수 있다. 이러한 서비스는 세분화된 자립형 서비스로, 외부 서비스 종속성이 없거나 최소한만 있고 주로 비즈니스 로직으로 구성되며 네트워크 통신 로직은 조금 있거나 없다.

원자 마이크로서비스는 극히 세분화되어 있어 비즈니스 기능에 직접 매핑할 수 없는 경우가 많으므로 특정 비즈니스 기능을 위해 여러 원자 또는 코어 서비스의 합성이 필요할 수 있다. 중간 계층은 이러한 합성 또는 통합 마이크로서비스로 구성된다. 많은 경우 이러한 서비스는 라우팅, 변환, 조율, 탄력성, 안정성과 같은 ESB 기능의 상당 부분을 지원해야 한다.

반면 합성 또는 통합 서비스는 원자 서비스에 비해 구성 입자가 크다. 상호 독립적이며 비즈니스 로직(예를 들어 라우팅, 호출할 서비스, 데이터 형식 매핑 방법 등)과 네트워크 통신 로직(예를 들어 다양한 프로토콜을 통한 서비스 간 통신과 회로 차단기와 같은 탄력성 동작)을 포함한다.

선택한 합성 서비스 집합(또는 일부 원자 서비스까지)을 API 서비스 및 에지 서비스를 사용해서 관리형 API로 노출한다. 이는 특수한 유형의 합성 서비스로, 기본적인 라우팅 기능과 API 버전 관리, API 보안 패턴, 스로틀링, 수익화를 적용하고 API 합성을 생성한다. <그림 3>에서 볼 수 있듯이 이러한 API는 제어 평면 또는 API 관리 계층에 의해 중앙 관리된다.

능동형 합성의 이점은 다양한 구현 기술을 선택해서 코어, 합성, API 서비스를 구현할 수 있다는 점이다. 단점은 서비스 간 결합과 종속성이다. 서비스가 하나 이상의 다운스트림 서비스에 종속될 수 있다. 따라서 능동형 합성은 대화형 요청-응답 스타일이 주요 요건인 특정 마이크로서비스 상호작용에만 적합하다.
 


X