Pub/Sub 모델을 활용한 비동기 마이크로서비스 구축 시나리오

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

Pub/Sub 모델을 활용한 비동기 마이크로서비스 구축 시나리오

1. 비동기 통신 도입 배경

현재 계정(accounts), 카드(cards), 대출(loans) 마이크로서비스 간의 통신은 동기식 통신을 기반으로 이루어지고 있습니다. 이러한 동기식 통신은 사용자에게 즉각적인 응답을 제공해야 하는 중요한 비즈니스 로직에서 필수적입니다. 예를 들어, 사용자가 계좌를 생성할 때, 계정 서비스는 계좌가 성공적으로 생성되었는지 즉시 알리고 응답해야 합니다. 그러나, 비즈니스 요구 사항에 따라 비동기 통신이 더 적합한 경우가 있으며, 이 경우 Pub/Sub 모델을 활용한 이벤트 기반 마이크로서비스를 구축할 수 있습니다.

2. 시나리오 개요

이제 Pub/Sub 모델을 적용하여 비동기 통신을 사용하는 시나리오를 살펴보겠습니다. 이 시나리오에서는 새로운 계정을 생성하는 과정에서 비동기 통신을 도입합니다.

  1. 계좌 생성 요청:

    • 사용자가 계정 마이크로서비스를 통해 새로운 계좌를 생성합니다.
    • 계정 서비스는 계좌를 생성하고, 사용자에게 계좌가 성공적으로 생성되었음을 알리는 즉시 응답을 제공합니다.
  2. 이벤트 생성:

    • 계좌 생성 후, 계정 서비스는 별도의 이벤트를 생성하여 이벤트 브로커(RabbitMQ)에 전달합니다. 이 이벤트는 "계좌가 성공적으로 생성되었음"을 알리는 역할을 합니다.
  3. 이벤트 큐에 전달:

    • 이벤트 브로커는 이 이벤트를 큐(queue)에 저장합니다. 이 큐는 구독자(consumer)들이 이벤트를 읽을 수 있도록 유지됩니다.
  4. 메시지 서비스:

    • 메시지 마이크로서비스는 큐를 지속적으로 모니터링합니다.
    • 새로운 이벤트가 큐에 저장되면, 메시지 서비스는 해당 이벤트를 읽고 사용자에게 SMS나 이메일을 통해 계좌 생성 완료를 알립니다.
  5. 반대 방향의 비동기 흐름:

    • 메시지 서비스가 사용자에게 알림을 보낸 후, 이를 다시 이벤트 브로커에 이벤트로 게시합니다.
    • 계정 서비스는 이 새로운 이벤트를 구독하고, 이를 통해 계정 생성 알림이 성공적으로 전송되었음을 데이터베이스에 업데이트합니다.

이와 같이, 계정 서비스와 메시지 서비스 간의 통신은 완전히 비동기적으로 이루어집니다. 메시지 서비스가 느리게 동작하거나 중단되더라도 계정 서비스에는 영향을 미치지 않습니다. 두 서비스는 서로의 구체적인 정보를 알 필요 없이 오직 이벤트 브로커와의 상호작용만을 통해 통신합니다.

3. 적용 기술 및 구현

이 섹션에서는 RabbitMQ를 사용하여 Pub/Sub 모델을 구현하고, 이를 통해 위에서 설명한 비동기 마이크로서비스 시나리오를 구축할 것입니다. RabbitMQ는 이벤트 브로커로 사용되며, 계정 서비스와 메시지 서비스 간의 이벤트를 중재하는 역할을 합니다.

참고자료 및 코드 예제

  • RabbitMQ 설치 및 설정: RabbitMQ를 설치하고 기본적인 큐와 교환(exchange) 설정을 진행합니다.
  • 계정 서비스: 계정 생성 API를 구현하고, 이벤트를 생성하여 RabbitMQ에 게시하는 로직을 추가합니다.
  • 메시지 서비스: RabbitMQ에서 이벤트를 구독하고, 이를 기반으로 SMS나 이메일을 발송하는 로직을 구현합니다.

이제 다음 강의에서 실제 구현을 시작하겠습니다.

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

profile
무슨 생각하며 사니

0개의 댓글