MSA를 구축한다면 가장 핵심이 되는 부분이 아닐까 싶다
서비스를 어찌저찌 잘 나눠놓았지만 어떻게 효율적으로 서비스 간에 통신을 할 것인가
여러가지 방법이 있겠으나 여기서는 REST API를 통한 통신과 이벤트를 통한 통신에 대해 알아보도록 하겠다
가장 기본적인 방법이라고 생각한다
개발자들에게 가장 익숙한 방법이며, 다른 방법들과 다르게 별도로 필요한 것은 없다
해당 방법은 통신의 결과값을 받아와야 한다거나 동기식으로 작동해야 할 때 사용한다
Event를 던지고 필요한 곳에서 받아 처리한다
이 방식이 바로 Event Driven Architecture(EDA) 이다
REST API 처럼 반드시 반환값을 돌려받아야 한다던가 동기식으로 작동하는 것이 아닌,
뒷처리가 필요한 콜백같은 작업이 진행되야 한다면 이 방식이 훨씬 어울린다
다만 이벤트들을 보관하고 처리해 줄 무언가가 필요한데, 이것을 메시지 브로커라고 한다
🍎 개념
앞서 말했듯 중간에서 이벤트들을 보관하고 처리해주는 서비스이다
이를 위해 메시지 큐라는 곳에 이벤트들을 쌓아두고, 선입선출에 의해 하나씩 꺼내서 처리를 한다
꼭 필수로 있어야하는 것은 아니다. 물론 서버끼리 비동기로 통신할 수도 있겠지만, 중간에서 이벤트들을 관리할 서비스가 있는 것이 좋다
🍎 종류
다양한 서비스들이 있겠지만, 대표적으로 아래 4가지가 유명하다
- Apache Kafka
- RabbitMQ
- Apache ActiveMQ
- Amazon SQS
🍎 장점
이벤트 메시지의 안전한 관리
사용자가 메시지를 꺼내기 전까지 메시지 큐 내에서 안전하게 관리된다
의존성 X
이벤트 방식의 가장 큰 장점 중 하나이다. 통신하는 서비스끼리 의존성이 없기 때문에, 수신자가 어떻든지 상관없이 메시지를 보낼 수 있다
메시지 처리 방식 설정
브로커 자체적으로 처리 방식을 설정할 수 있다
ex) 메시지가 큐에 도착하는 즉시, 수신
ex) 큐의 메시지가 10개가 될 때까지 수신을 하지 않음
🍎 단점
현재는 아직 이벤트를 통한 통신을 필요가 없기에 구성하지 않았다
하지만 추후 필요하게 된다면 그 때 다시 자세히 알아보도록 하자