[MSA] 서비스 간에 어떻게 통신할 것인가?

Dev StoryTeller·2025년 3월 30일

MSA를 구축한다면 가장 핵심이 되는 부분이 아닐까 싶다
서비스를 어찌저찌 잘 나눠놓았지만 어떻게 효율적으로 서비스 간에 통신을 할 것인가
여러가지 방법이 있겠으나 여기서는 REST API를 통한 통신이벤트를 통한 통신에 대해 알아보도록 하겠다


🍀 REST API 통신

가장 기본적인 방법이라고 생각한다
개발자들에게 가장 익숙한 방법이며, 다른 방법들과 다르게 별도로 필요한 것은 없다

해당 방법은 통신의 결과값을 받아와야 한다거나 동기식으로 작동해야 할 때 사용한다


🍀 Event 통신

Event를 던지고 필요한 곳에서 받아 처리한다
이 방식이 바로 Event Driven Architecture(EDA) 이다

REST API 처럼 반드시 반환값을 돌려받아야 한다던가 동기식으로 작동하는 것이 아닌,
뒷처리가 필요한 콜백같은 작업이 진행되야 한다면 이 방식이 훨씬 어울린다

다만 이벤트들을 보관하고 처리해 줄 무언가가 필요한데, 이것을 메시지 브로커라고 한다

🍊 메시지 브로커란?

🍎 개념
앞서 말했듯 중간에서 이벤트들을 보관하고 처리해주는 서비스이다
이를 위해 메시지 큐라는 곳에 이벤트들을 쌓아두고, 선입선출에 의해 하나씩 꺼내서 처리를 한다

꼭 필수로 있어야하는 것은 아니다. 물론 서버끼리 비동기로 통신할 수도 있겠지만, 중간에서 이벤트들을 관리할 서비스가 있는 것이 좋다


🍎 종류
다양한 서비스들이 있겠지만, 대표적으로 아래 4가지가 유명하다

  • Apache Kafka

  • RabbitMQ

  • Apache ActiveMQ

  • Amazon SQS

🍎 장점

  • 이벤트 메시지의 안전한 관리
    사용자가 메시지를 꺼내기 전까지 메시지 큐 내에서 안전하게 관리된다

  • 의존성 X
    이벤트 방식의 가장 큰 장점 중 하나이다. 통신하는 서비스끼리 의존성이 없기 때문에, 수신자가 어떻든지 상관없이 메시지를 보낼 수 있다

  • 메시지 처리 방식 설정
    브로커 자체적으로 처리 방식을 설정할 수 있다
    ex) 메시지가 큐에 도착하는 즉시, 수신
    ex) 큐의 메시지가 10개가 될 때까지 수신을 하지 않음


🍎 단점

  • 관리 및 운영 필요
    운영해야 할 것이 하나 더 늘었기에, 이에 대한 관리 및 운영이 필요하다

🔎 후기?

현재는 아직 이벤트를 통한 통신을 필요가 없기에 구성하지 않았다
하지만 추후 필요하게 된다면 그 때 다시 자세히 알아보도록 하자

profile
개발을 이야기하는 개발자입니다

0개의 댓글