마이크로서비스 아키텍처(MSA)를 프로젝트에 적용하기 위해 학습하며, 트랜잭션 분산에 필요한 메시징 플랫폼을 마주하게 되었습니다. 하지만 찾아보니 메시지 브로커와 이벤트 브로커 두 가지 개념이 존재하였고 이에 대해 확실한 학습과 차이를 알기 위해 글을 작성했습니다.
메시지 브로커는 흔히 많은 기업들에서 대규모 메시지 기반 미들웨어 아키텍처에서 사용되어 왔습니다.또한, 메시지 브로커에 있는 큐에 데이터를 보내고 받는 Producer와 Consumer를 통해 메시지를 통신하고 네트워크를 맺는 용도로 사용해왔습니다.
자세하게 들여다본다면 Producer가 메시지를 생성하면, 메시지 브로커내에서 이 메시지를 어떤 큐에 발송할지 결정하는 exchange를 하게 되고, 이렇게 큐에 들어간 메시지는 Consumer가 가져가게 됩니다. 따라서 Consumer가 메시지를 가져가면 큐에는 더 이상 메시지가 남지 않고 사라지게 됩니다.
하지만 이러한 전통적인 메시지 브로커의 형태는 소비자와 메시지 브로커의 결합력이 높아지게 되어 후에 서비스의 트래픽이 증가하여도 수평적으로 확장하는 데에 어려움이 있습니다.
이벤트 또는 메시지라고 불리는 레코드를 하나만 보관하고 인덱스를 통해 개별 액세스를 관리힙니다. 메시지 브로커와 이벤트 브로커 모두의 이벤트를 수신하고, 이것을 소비자에게 전달하는 데에 목적을 두고 있지만 작동 방식에 큰 차이가 있습니다.
이벤트 브로커는 메시지 브로커와 다르게 topic이라는 것이 event streamer에 저장됩니다. Producer가 이벤트를 생성하면, topic이라고 불리는 이벤트의 레코드 로그를 streamer에 순서대로 기록하게 됩니다. 그 후 해당 topic을 구독한 Consumer에게 전달하게 됩니다. 또한, 이 topic을을 Consumer가 가져간 후에도 event stream에서 계속 topic을 유지하기 때문에 오류 수정이 필요하거나 앱을 리빌드 하는 등의 상황에서 이벤트를 다시 재생시킬 수 있습니다.
메시지 브로커의 경우 이벤트 브로커에 비해 조금 더 쉽지만 Consumer와 메시지 브로커간의 결합도가 높기 때문에 트래픽이 작으면서 비즈니스가 후에 확장되지 않을 확률이 높다면 메시지 브로커를 사용하는 것이 좋습니다.
하지만 대규모 트래픽이 예상되고, 추후 확장이 예상된다면 이벤트 브로커를 선택하는 것이 더 좋을 수 있습니다.