도입

최근들어 msa 서비스가 활성화되는 만큼 pub/sub(게시/구독)모델들을 많이 사용하기 시작했다.

당근마켓의 경우, 월 평균 1000만명의 트래픽이 발생하고 나서야 모놀리식에서 msa로 전환했다는 기사를 얼핏 본 기억이 있다.

이 처럼 msa 서비스가 필수는 아니지만 대세인 만큼 mssage-queue 시스템에 대해 곽광을 받는 것도 사실이다.

해당 글은 비전문가가 인터넷에 떠도는 글들을 읽고 자신이 받아드린 사실로 써내려가는 잘 못된 이야기이다.

kafka 공식문서와 rabbitMQ 공식문서를 비교하여 현재 자신의 시스템에서 어떤 것이 효율적일지 판단하는 것이 좋겟다.

카프카

  • 공식문서: https://kafka.apache.org/documentation/

kafka의 공식문서를 보면 소개란에 이벤트 스트리밍 플랫폼이라는 글을 강조하는 걸 볼 수 있다.

해당 글을 읽어보면

  1. 다른 시스템에서 데이터를 지속적으로 가져오고, 내보내기 작업 즉, 이벤트 스트림을 pub하고 sub한다.
  2. 원하는 기간 동안 이벤트 스트림을 지속적이고, 안정적으로 저장한다.
  3. 발생하는 대로 또는 회고적으로 이벤트 스트림을 처리한다.

위의 3가지 글귀가 보인다.

해당 글귀를 종합적으로 이야기해보자면, 다른 시스템에서 데이터를 지속적으로 가져오고, 내보내는 작업은 이벤트 스트림이라고 하고,

해당 이벤트 스트림을 지속적이고, 안정적으로 저장하며, 발생하는 대로 이벤트 스트림을 처리한다는 내용이다.

위에서 강조표시한 부분들을 읽어보자 지속적, 안정적, 발생하는 대로 실시간 스트리밍 방식에 알맞는 단어 인 것 같다.

어떤 어플리케이션이 실시간으로 데이터를 받아드린다고 생각해보자.

해당 어플리케이션은 지속적이고, 데이터가 발생하는 대로 처리를 해야할 것이다.

이러한 사실을 바탕으로 소개를 다시 읽어보면 이벤트 스트리밍은 무엇에 활용할 수 있는지에 대한 답변글이 있다.

해당 소개글도 데이터들을 실시간으로 처리하는 것을 중심적으로 설계된 것을 알 수 있다.

rabbitMQ

  • 공식문서: https://www.rabbitmq.com/

공식문서를 보면 아래의 3가지 토픽이 가장 중요하다는 것을 알 수 있다.

  1. 상호 운용 가능 - Interoperable
  2. 유연한 - Flexible
  3. 믿을 수 있는 - Reliable

내 생각에는 이 중 가장 중요한 토픽은 1번 상호 운용 가능이라는 토픽인 것 같다.

카프카는 위에서도 설명을 했지만, 실시간 데이터를 처리하는 것을 중심적으로 설계되었다라고 할 수 있고 rabbitMQ는 이기종 간 특정 프로토콜(AMQP, MQTT 등)을 사용하여 서로 간의 통신을 중심적으로 설계된 것으로 생각해볼 수 있다.

프로토콜

  • AMQP

https://ko.wikipedia.org/wiki/AMQP

해당 위키피디아를 읽어보면, ‘각기 다른 벤더들의 구현체가 상호 운용될 수 있는 정도로’라는 문구가 나온다.

  • MQTT

https://mqtt.org/

해당 공식문서를 읽어보면, IoT 메시징의 표준이라는 것을 알 수 있다.

위의 말을 종합하면 rabbitMQ는 이기종 간 통신을 중심적으로 설계되었다고 생각해볼 수 있으며 msa 시대가 열린 만큼 서로 다른 모듈 간의 통신에서 사용하는 것이 좋을 것 같다는 생각이다.

다음 글에서는 kafka, rabbitMQ 공식문서를 보고 사용해보는 것을 포스팅하겠다.

댓글남기기