목차

클라우드 네이티브 애플리케이션 디자인 패턴 – 책 소개

🗓️

마이크로서비스 아키텍처를 구성하는 디자인 패턴

“한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다.”

  • 원제 : Design Patterns for Cloud Native Applications
  • 저자 : Kasun Indrasiri, Sriskandarajah Suhothayan
  • O’Reilly Media, 2021 / 한빛미디어, 2022

이 책에서는 마이크로서비스 아키텍처로 구성되는 서비스를 설계 할 때 인프라, 서비스 배포, 통신, 서비스 조합, 데이터베이스에 대해 어떤 패턴들이 적용될 수 있는가 소개한다.

SOA는 특정 비즈니스 기능을 지원하는 서비스들을 조합하여 소프트웨어 어플리케이션을 만드는 모듈성 개념이다. 각 서비스들은 중앙 집중화된 모놀리식 컴포넌트를 포함하기도 한다. 이러한 구조적 특징 때문에 독립적으로 개발-배포가 어렵고 신뢰성이 떨어진다. 반면 마이크로서비스 아키텍처는 비즈니스의 핵심 기능을 구현한 독립적인 서비스다. 서비스를 통합하기 위해 일괄된 버스나 인터페이스가 아닌 각각의 방법으로 서비스를 연결한다. 또한 다른 서비스와 데이터베이스를 공유하지 않는다.

컨테이너는 클라우드 네이티브 어플리케이션을 패키징하고 실행하는데 중요한 역할을 한다. 배포될 이미지를 컨테이너 레지스트리 라고 하며 이 이미지를 컨테이너 인스턴스라는 프로세스로 실행한다. VM과 가장 큰 차이점은 하이퍼바이저를 통하지 않아 호스트의 커널, 프로세서, 메모리를 공유한다는 점이다. 쿠버네티스는 이러한 컨테이너 오케스트레이션의 대표적인 솔루션이다. 마이크로서비스 어플리케이션의 설계, 배포 자동화, 메트릭에 대해서도 설명한다.

통신

어플리케이션과 외부 서비스 간의 상호작용을 구현하는 것은 클라우드 네이티브 어플리케이션 환경에서 흔하지만 여전히 까다롭다고 한다. Request-Response방식의 동기 통신 방식과 메시지 큐, pub-sub 방식의 비동기 통신이 있다.

이 파트에서는 Request-Response, RPC, 단일 수신자, 다중 수신자, 비동기 요청-응답에 대해 소개한다. 동기적 처리를 할때 메시징에 RESTful, GraphQL, gRPC, 웹소켓이 있다. 비동기 처리를 처리를 위한 메시징 패턴에 AMQP, 카프카, NATS가 있다.

서비스 연결성 및 조합

이 파트에서는 내부 서비스 간 연결성을 확보하고 서비스끼리 조합하는 패턴을 소개한다.

연결성 – 통신의 보안성, 가용성 등을 보장한다.
조합 – 여러 서비스를 결합하여 새로운 서비스를 만드는 것.

연결성 패턴으로 서비스 연결성 패턴, 서비스 추상화 패턴, 서비스 레지스트리 및 검색 패턴, 탄력적 연결성 패턴(resilent connectivity pattern), 사이드카 패턴, 서비스 메시 패턴에 대해 소개한다. 여기서 재시도, 데드라인, 서킷 브레이커 패턴들의 개념도 같이 등장한다.

조합 패턴으로는 서비스 오케스트레이션 패턴, 서비스 코레오그래피 패턴, 사가 패턴에 대해 설명한다.

데이터

데이터를 분산하게 되면 서비스간 데이터 접근이나 동기화가 어려워 진다. 트랜잭션 처리, 캐싱 등 마이크로서비스 아키텍처에 어울리는 데이터 스토어 패턴이 필요하다.인입되는 입력 데이터에만 영향을 받는 경우 stateless 어플리케이션이다. 인입되는 데이터와 설정, 상태가 모두 필요한 형태를 stateful 어플리케이션이라고 한다.

데이터 조합 패턴은 데이터 서비스, 조합 데이터 서비스, 클라이언트 사이드 매시업 패턴이 있다. 데이터 확장 패턴에는 데이터베이스를 나누는 샤딩과 CQRS에 대해서 설명한다.

이벤트 주도 이키텍처

EDA라고 불리는 이벤트 주도 아키텍처는 비동기 통신의 한 방법이다.

이벤트 전달 패턴에는 생산자-소비자, 발행자-구독자(pub-sub), fire and forget, store and foward, polling, request callback 을 소개한다. 비동기 이벤트 전달 패턴으로 오케스트레이션 패턴을 사용한다. 여기에는 중재자 패턴, pipe and filter, 우선순위 큐 에 대해서 소개한다.

스트림 프로세싱 패턴

EDA는 한번에 하나의 이벤트만 처리하지만 스트림 패턴은 상태를 가지고 지속적으로 처리하는 패턴이다.

API 관리 및 사용 패턴

일부 서비스를 외부에 제공해야할 때 API 게이트웨이 형식으로 제공하는 경우에 API패턴이 몇가지 있다. 관리 패턴에는 API 게이트웨이, API 마이크로 게이트웨이, 서비스 메시 사이드카 게이트웨이가 있고, 사용 패턴에는 FE와 각 서비스간의 직접 통신, API 게이트웨이를 통한 FE 통신, FE를 위한 백엔드가 있다.

주로 서비스 설계를 위한 패턴들을 시나리오와 그래프로 잘 설명하는 책이다. 주변에서 이야기하는 막연한 단어들로 익숙하지 않았던 개념들에 대해 확실하게 머리에 새길 수 있는 책이였다.

“한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다.”