이번 도전 과제는 이벤트 기반 마이크로서비스(Event-Driven Microservices)를 구축하는 것입니다. 이벤트 기반 마이크로서비스란 무엇이며, 왜 이러한 방식을 채택해야 하는지에 대해 자세히 알아보겠습니다.
템포럴 커플링(Temporal Coupling)과 느슨한 커플링(Loose Coupling)
동기 통신(Synchronous Communication)과 비동기 통신(Asynchronous Communication)
-
동기 통신:
- 동기 통신은 요청을 보낸 서비스가 응답을 받을 때까지 기다리는 방식입니다. 이 방식은 두 가지 접근법으로 나뉩니다:
- 명령형 접근법(Imperative Approach): 요청이 있을 때마다 쓰레드가 할당되어 응답이 올 때까지 대기.
- 반응형 접근법(Reactive Approach): 요청이 완료되면 쓰레드가 풀로 돌아가 다른 요청을 처리, 응답이 돌아오면 다시 쓰레드가 할당되어 응답을 처리.
-
비동기 통신:
- 비동기 통신은 서비스 간의 통신이 비동기적으로 이루어지며, 요청을 보낸 서비스는 즉각적인 응답을 기다리지 않습니다.
- 예: 전자상거래 애플리케이션에서 주문 마이크로서비스가 배송 마이크로서비스에 알림을 보내는 경우, 배송 마이크로서비스의 응답을 기다리지 않고 주문 마이크로서비스의 작업이 완료됩니다.
이벤트 기반 마이크로서비스(Event-Driven Microservices) 구축
- 이벤트(Event):
- 시스템 내 상태 전환이나 업데이트를 의미하는 사건.
- 이벤트가 발생하면 관련된 마이크로서비스에 알림을 보냄으로써 비동기 통신을 구현할 수 있습니다.
- 이벤트 기반 아키텍처(Event-Driven Architecture):
- 비동기 통신을 사용해 이벤트를 생성하고 소비하는 방식으로 마이크로서비스를 설계.
- 이를 위해 스프링 클라우드(Spring Cloud)의 Spring Cloud Function과 Spring Cloud Stream 프로젝트를 활용할 수 있습니다.
참고
- Spring Cloud Function과 Spring Cloud Stream: 스프링 클라우드 생태계에서 이벤트 기반 아키텍처를 구현하는 데 유용한 프로젝트들입니다.
이벤트 기반 마이크로서비스 구축: 이벤트 모델 및 구현 방법
이벤트 기반 마이크로서비스 구축 결정
우리는 마이크로서비스 네트워크 내에서 가능한 경우 이벤트 기반 마이크로서비스를 구축하기로 결정했습니다. 이러한 이벤트 기반 마이크로서비스를 구축하는 데는 두 가지 주요 모델이 있습니다.
이벤트 기반 모델
이벤트 기반 마이크로서비스를 구축할 때 사용할 수 있는 두 가지 주요 이벤트 모델은 다음과 같습니다:
-
퍼블리셔-구독자 모델 (Pub/Sub Model):
- 퍼블리셔(생산자)가 이벤트를 생성하고 이를 구독자(소비자)에게 배포합니다.
- 이 모델의 특징은 구독자가 이벤트를 소비한 후에는 해당 이벤트를 다시 재생할 수 없다는 것입니다.
- 새로운 구독자는 과거 이벤트에 접근할 수 없습니다.
- 적용 시나리오: 과거의 이벤트를 참조할 필요가 없는 경우에 이상적입니다.
-
이벤트 스트리밍 모델 (Event Streaming Model):
- 퍼블리셔가 이벤트를 생성하고, 이 이벤트는 순차적으로 로그에 저장됩니다.
- 소비자는 이벤트 스트림의 어느 부분에서든 이벤트를 읽을 수 있으며, 과거의 이벤트도 재생할 수 있습니다.
- 적용 시나리오: 소비자가 과거의 이벤트를 재생하거나 확인할 수 있어야 하는 경우에 적합합니다.
- 필요한 경우 이벤트 재생 기능을 비활성화할 수도 있습니다.
이벤트 모델의 구현 방법
이 두 가지 모델을 구현하기 위해 다음과 같은 제품들을 사용할 수 있습니다:
-
RabbitMQ:
- 주로 Pub/Sub 모델을 구현하는 데 사용됩니다.
- 메시지 브로커로서 퍼블리셔-구독자 모델을 지원하는 강력한 도구입니다.
-
Apache Kafka:
- 이벤트 스트리밍 모델을 구현하는 데 사용됩니다.
- 이벤트 스트리밍 처리에 널리 사용되는 견고한 플랫폼입니다.
앞으로의 계획
이 섹션에서는 RabbitMQ를 사용하여 퍼블리셔-구독자 모델을 기반으로 이벤트 기반 마이크로서비스를 구축하는 방법에 대해 집중적으로 다룰 것입니다. 이후 섹션에서는 Apache Kafka를 사용하여 이벤트 스트리밍 모델을 기반으로 마이크로서비스를 구축하는 방법을 다룰 것입니다.
참고자료
- RabbitMQ: 퍼블리셔-구독자 모델 구현을 위한 도구.
- Apache Kafka: 이벤트 스트리밍 모델 구현을 위한 도구.
이제 다음 강의에서 RabbitMQ를 사용한 Pub/Sub 모델을 더 깊이 탐구해 보겠습니다.
감사합니다. 다음 강의에서 뵙겠습니다.