이벤트 기반 마이크로서비스 (Event-Driven Microservices)

날아올라돼지야·2024년 8월 31일
0

이번 도전 과제는 이벤트 기반 마이크로서비스(Event-Driven Microservices)를 구축하는 것입니다. 이벤트 기반 마이크로서비스란 무엇이며, 왜 이러한 방식을 채택해야 하는지에 대해 자세히 알아보겠습니다.

템포럴 커플링(Temporal Coupling)과 느슨한 커플링(Loose Coupling)

  • 느슨한 커플링:

    • 애플리케이션의 비즈니스 로직을 개별 마이크로서비스로 분리하여, 독립적으로 개발, 배포 및 확장할 수 있게 하는 것.
    • 예: 계정, 카드, 대출 관련 로직을 각각의 마이크로서비스로 분리.
  • 템포럴 커플링(Temporal Coupling):

    • 템포럴 커플링은 호출된 서비스가 응답을 반환할 때까지 호출한 서비스가 대기해야 하는 경우 발생합니다. 즉, 호출된 서비스의 지연이나 문제는 호출한 서비스에 영향을 미칩니다.
    • 이 문제를 해결하기 위해 마이크로서비스 간 비동기 통신을 사용하는 것이 좋습니다.

동기 통신(Synchronous Communication)과 비동기 통신(Asynchronous Communication)

  • 동기 통신:

    • 동기 통신은 요청을 보낸 서비스가 응답을 받을 때까지 기다리는 방식입니다. 이 방식은 두 가지 접근법으로 나뉩니다:
      1. 명령형 접근법(Imperative Approach): 요청이 있을 때마다 쓰레드가 할당되어 응답이 올 때까지 대기.
      2. 반응형 접근법(Reactive Approach): 요청이 완료되면 쓰레드가 풀로 돌아가 다른 요청을 처리, 응답이 돌아오면 다시 쓰레드가 할당되어 응답을 처리.
  • 비동기 통신:

    • 비동기 통신은 서비스 간의 통신이 비동기적으로 이루어지며, 요청을 보낸 서비스는 즉각적인 응답을 기다리지 않습니다.
    • 예: 전자상거래 애플리케이션에서 주문 마이크로서비스가 배송 마이크로서비스에 알림을 보내는 경우, 배송 마이크로서비스의 응답을 기다리지 않고 주문 마이크로서비스의 작업이 완료됩니다.

이벤트 기반 마이크로서비스(Event-Driven Microservices) 구축

  • 이벤트(Event):
    • 시스템 내 상태 전환이나 업데이트를 의미하는 사건.
    • 이벤트가 발생하면 관련된 마이크로서비스에 알림을 보냄으로써 비동기 통신을 구현할 수 있습니다.
  • 이벤트 기반 아키텍처(Event-Driven Architecture):
    • 비동기 통신을 사용해 이벤트를 생성하고 소비하는 방식으로 마이크로서비스를 설계.
    • 이를 위해 스프링 클라우드(Spring Cloud)의 Spring Cloud FunctionSpring Cloud Stream 프로젝트를 활용할 수 있습니다.

참고

  • Spring Cloud FunctionSpring Cloud Stream: 스프링 클라우드 생태계에서 이벤트 기반 아키텍처를 구현하는 데 유용한 프로젝트들입니다.

이벤트 기반 마이크로서비스 구축: 이벤트 모델 및 구현 방법

이벤트 기반 마이크로서비스 구축 결정

우리는 마이크로서비스 네트워크 내에서 가능한 경우 이벤트 기반 마이크로서비스를 구축하기로 결정했습니다. 이러한 이벤트 기반 마이크로서비스를 구축하는 데는 두 가지 주요 모델이 있습니다.

이벤트 기반 모델

이벤트 기반 마이크로서비스를 구축할 때 사용할 수 있는 두 가지 주요 이벤트 모델은 다음과 같습니다:

  1. 퍼블리셔-구독자 모델 (Pub/Sub Model):

    • 퍼블리셔(생산자)가 이벤트를 생성하고 이를 구독자(소비자)에게 배포합니다.
    • 이 모델의 특징은 구독자가 이벤트를 소비한 후에는 해당 이벤트를 다시 재생할 수 없다는 것입니다.
    • 새로운 구독자는 과거 이벤트에 접근할 수 없습니다.
    • 적용 시나리오: 과거의 이벤트를 참조할 필요가 없는 경우에 이상적입니다.
  2. 이벤트 스트리밍 모델 (Event Streaming Model):

    • 퍼블리셔가 이벤트를 생성하고, 이 이벤트는 순차적으로 로그에 저장됩니다.
    • 소비자는 이벤트 스트림의 어느 부분에서든 이벤트를 읽을 수 있으며, 과거의 이벤트도 재생할 수 있습니다.
    • 적용 시나리오: 소비자가 과거의 이벤트를 재생하거나 확인할 수 있어야 하는 경우에 적합합니다.
    • 필요한 경우 이벤트 재생 기능을 비활성화할 수도 있습니다.

이벤트 모델의 구현 방법

이 두 가지 모델을 구현하기 위해 다음과 같은 제품들을 사용할 수 있습니다:

  1. RabbitMQ:

    • 주로 Pub/Sub 모델을 구현하는 데 사용됩니다.
    • 메시지 브로커로서 퍼블리셔-구독자 모델을 지원하는 강력한 도구입니다.
  2. Apache Kafka:

    • 이벤트 스트리밍 모델을 구현하는 데 사용됩니다.
    • 이벤트 스트리밍 처리에 널리 사용되는 견고한 플랫폼입니다.

앞으로의 계획

이 섹션에서는 RabbitMQ를 사용하여 퍼블리셔-구독자 모델을 기반으로 이벤트 기반 마이크로서비스를 구축하는 방법에 대해 집중적으로 다룰 것입니다. 이후 섹션에서는 Apache Kafka를 사용하여 이벤트 스트리밍 모델을 기반으로 마이크로서비스를 구축하는 방법을 다룰 것입니다.

참고자료

  • RabbitMQ: 퍼블리셔-구독자 모델 구현을 위한 도구.
  • Apache Kafka: 이벤트 스트리밍 모델 구현을 위한 도구.

이제 다음 강의에서 RabbitMQ를 사용한 Pub/Sub 모델을 더 깊이 탐구해 보겠습니다.

감사합니다. 다음 강의에서 뵙겠습니다.

profile
무슨 생각하며 사니

0개의 댓글