Offcanvas

How To / 개발자 / 애플리케이션

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

2019.04.01 Kasun Indrasir  |  InfoWorld

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

반응형 합성에서 서비스는 비동기 이벤트 기반 메시징을 사용해서 통신하고 합성을 생성할 수 있다. 반응형 합성은 여러 소비자를 위한 게시-구독 메시징, 또는 단일 소비자를 위한 대기열 기반 메시징의 두 가지 기법 중 하나를 사용해서 구현할 수 있다.

<그림 4>에서 볼 수 있듯이 반응형 합성 패턴에서 마이크로서비스는 상호 직접 통신하지 않고, 중앙 이벤트 또는 메시지 버스와 메시지를 주고받는다. 서비스의 비즈니스 로직은 이벤트 도착 시 서비스 비즈니스 로직이 적용되고 실행되도록 구현된다. 서비스 비즈니스 로직은 이벤트 버스에 새 이벤트를 제출할 수도 있다. 이 버스는 단순 메시징 인프라 역할을 하며 모든 비즈니스 로직은 생산자 또는 소비자 수준에서 구현된다.
 
그림 4. 반응형 합성 패턴에서 마이크로서비스는 이벤트 버스를 통해 간접적으로 커뮤니케이션한다. ⓒWSO2


반응형 합성에서 일반적으로 사용되는 메시징 기법은 아파치 카프카(Apache Kafka) 메시징 프로토콜, NATS 클라우드 네이티브 메시징 프로토콜, AMQP 프로토콜이다. AMQP 프로토콜은 래빗MQ(RabbitMQ), 액티브MQ(ActiveMQ), 아르테미스(Artemis) 등의 메시징 소프트웨어에 사용된다.

반응형 합성은 서비스 간의 밀착 결합을 제거하고 서비스의 자율성을 높인다. 반응형 합성은 이벤트 소싱, 명령 및 조회 책임의 분리(CQRS)를 비롯한 다른 마이크로서비스 패턴에 자주 사용된다.

이제 이러한 패턴이 실제 마이크로서비스 구현에 어떻게 적용되는지 살펴보자.
 

실제 마이크로서비스 구현의 능동형 및 반응형 패턴

대부분의 실제 마이크로서비스 구현에서는 능동형과 반응형 합성을 혼합해서 사용해야 한다. <그림 5>에서 볼 수 있듯이 외부에 접한 대부분 서비스에는 동기 메시징 기반 합성을 사용할 수 있다. 이러한 기능은 여러 API 서비스로 구성되는 API 게이트웨이 계층을 통해 소비자에게 노출되는 경우가 많고 기능은 API 제어 평면에 의해 중앙에서 관리된다.
 
그림 5. 실제 마이크로서비스 구현에는 보통 능동형 합성 패턴과 반응형 합성 패턴 모두를 사용한다. ⓒWSO2

일반적으로 API 서비스와 소비자 간의 통신은 RESTful 메시징 또는 GraphQL API 쿼리 언어를 활용한다. API 서비스와 관리 계층은 WSO2 API 매니저, 콩(Kong), 글루(Gluu)와 오픈소스 기술 또는 애피지(Apigee), IBM, 소프트웨어 AG(Software AG), 팁코(Tibco)와 같은 상용 대안을 사용해 구현할 수 있다.

능동형과 반응형 합성 스타일 모두 다양한 통합 및 합성 요구사항을 충족할 수 있는 통합 프레임워크 또는 프로그래밍 언어가 필요하다. 예를 들어 메시지 변환, 다양한 시스템 및 서비스에 대한 커넥터, 동기 또는 비동기 이벤트 기반 메시징 또는 다양한 메시지 교환 패턴을 위한 지원이 포함될 수 있다. 마이크로서비스에 친화적인 오픈소스 통합 프레임워크로는 카멜-K(Camel-K), WSO2 마이크로 인티그레이터(WSO2 Micro Integrator), Micronaut.io가 있다. 이러한 기능은 특정 프로그래밍 언어(예: Ballerina.io)와 언어 프레임워크(예: 스프링 부트(Spring Boot))에서도 지원된다.

서비스 간 내부 동기 통신은 일반적인 RESTful 메시징을 사용하는 대신 성능, 형식 안전성, 계약 기반 특성 측면에서 유리한 gRPC를 통신 기술로 활용할 수 있다.

비동기 이벤트 기반 서비스 상호작용은 아파치 카프카, NATS, AMQP 프로토콜을 활용하는 소프트웨어와 같은 이벤트 버스 기술을 활용할 수 있다. 비동기 서비스에는 메시지를 소비하거나 생산하고 이벤트 버스와 교환할 수 있는 통합 로직이 있어야 한다. 여기서 설명한 대부분 통합 기술을 사용할 수 있지만, 표준 프로그래밍 언어의 라이브러리 내에서도 같은 메시징 표준이 지원되는 경우가 많다. 메시징 인프라를 사용하는 경우 이벤트 버스로부터 비즈니스 로직을 격리하지 않는 것이 중요하다.

순수 마이크로서비스 구현을 위한 두 가지 주요 접근 방법을 살펴봤다. 그러나 대부분 실제 시나리오에서 마이크로서비스 기반 애플리케이션은 기업의 모놀리식 시스템과 통합되어야 한다. 따라서 마이크로서비스와 모놀리식 서브시스템 사이에 연결 계층(흔히 손상 방지 계층이라고 함)을 구축하는 것이 바람직하다. 대부분의 실제 사용례에서 마이크로서비스와 모놀리식 서브시스템은 나란히 공존하며, 손상 방지 계층은 시스템의 변경 없이 둘의 원활한 통합을 가능하게 해준다. ESB 또는 통합 버스와 같은 기존 통합 기술을 사용해서 손상 방지 계층을 구현할 수 있다.

마이크로서비스 통합 패턴에 대한 좀 더 자세한 내용은 필자의 공저서 ‘Microservices for the Enterprise: Designing, Developing, and Deploying’을 참고하기 바란다.

* Kasun Indrasiri는 WSO2의 통합 아키텍처 담당 디렉터이다. WSO2 아키텍처팀의 핵심 구성원으로, 통합 플랫폼 개발을 주도하고 있다.
editor@itworld.co.kr
CIO Korea 뉴스레터 및 IT 트랜드 보고서 무료 구독하기
추천 테크라이브러리

회사명:한국IDG 제호: CIO Korea 주소 : 서울시 중구 세종대로 23, 4층 우)04512
등록번호 : 서울 아01641 등록발행일자 : 2011년 05월 27일

발행인 : 박형미 편집인 : 천신응 청소년보호책임자 : 한정규
사업자 등록번호 : 214-87-22467 Tel : 02-558-6950

Copyright © 2024 International Data Group. All rights reserved.