Programming

Message Queue vs Pub/Sub (MQ vs Kafka)

송코딩 songcoding 2024. 8. 23. 07:59

안녕하세요 여러분,

김송아 입니다.

 

 

 

모든 기술이 그렇듯 어떠한 기술을 반드시 선택해야한다는 건 절대 없습니다.

모든 기술은 장단점이 분명히 존재하기 때문에, 하나의 단점을 보완하기 위해 다른 기술을 사용할 수 있다는 것일뿐!

내가 주어진 환경과 기술에 따라
최선인 선택지를 선택해야 하는 것이 바로 우리가 할 일!

 

ㅋㅋㅋㅋㅋㅋㅋ놀이공원가서 이렇게 최선을 다하는 사람? 🙈 저요

 

 

무슨 소리인지, 같이 한번 얘기해볼게요.

 

최근 저희가 같이 공부하고 있는 MSA하면, 빼놓을 수 없는 기술이 있죠.

메세지 브로커입니다.

 

ps. 메세지 브로커와 Pub/Sub에 대한 개요가 필요하시다면 바로 아래 글을 참고해주세요.

 

[언그래머] 아흔다섯번째 아티클_Spring boot MSA 설계 (7) 메세지 브로커

안녕하세요 여러분!!송아지할때 송아 김송아입니다.  지난 시간까지 우리 MSA에 대해 무슨 얘기 했는지 기억하시는 분!!ㅎㅎ혹시 기억이 안 나신다면, 괜찮습니다!!😊 이거 다시 보고오면 되죠,

songacoding.tistory.com

 

 

 

메세지 브로커의 종류는 다양합니다.

위 아티클에서 말씀드린 것처럼 Apache Kafka, RabbitMQ, ActiveMQ, Redis 정도로 추려집니다.

 

 

이 친구들이 모두 공존하고 있다는 것은 분명, '다들 다르다'는 겁니다.

메세지 브로커라는 같은 기능을 하고 있는데 대체 뭐가 다른걸까요?

 

 

🤔 우리 프로젝트에 메세지 브로커가 쓰고 싶다면, 그냥 저 중에 아무거나 쓰면 되는 걸까요?
😇 그쵸.. 아무거나 쓰면 왠지 안된다고 할 것 같죠?

 

 

 

 

자 그럼, 오늘 오프닝에서 말씀 드렸던 것처럼

두 가지중에 어떤 보기가 우리 프로젝트에 최선일지 생각해봐야 한다는 겁니다.

 

내 친구가 MQ 쓰니까 나도 MQ! 요즘 트렌드가 Kafka이니까 Kafka! 라고 하신다면 등짝 때릴거야...

다시 한번 생각해보죠. 우선 다양한 메세지 브로커 중에..

특히나 많이 고민하시는 Kafka와 MQ 중 선택을 어떻게 할지 생각해보시죠!

 

 

선택을 하려면, Kafka와 MQ를 비교할 수 있어야 하는데..

이럴때 무작정 제품을 비교하시는 게 아니라, 일단 그 제품의 원리를 파악하고 이해하셔야 한다는 겁니다!

 

 

 

그럼, 원리를 같이 뜯어볼게요.

대표적으로,

✅ RabbitMQ는 메세지 브로커 중에서도 Message Queue 원리를 가지고 구현되어 있고, 

 Kafka는 Pub/Sub 원리로 구현이 되어 있습니다.

 

이 두 가지 원리를 제대로 알지 않고, '두 기술은 대체 어떤 상황에 쓰는 거야?!' 라고 생각하신다면

너무 어렵게 느껴지실 수 있습니다.

 

그러니 일단 제품 이름을 뒤로 하고, 기술의 원리부터 뜯어보시죠.

우선 Message Queue 입니다.

 

 

 

Message Queue

Message를 발행하는 Producer(생산자)가 Message를 Queue에 넣어두면, 

Customer(소비자)가 Message를 가져와 데이터를 처리하는 것입니다.

 

Consumer 중 하나가 Message를 가져가면, 그 메세지는 삭제됩니다.

즉, 하나의 메세지는 한명의 Consumer만 가져갈 수 있다는 겁니다.

 

그렇다보니 누가 어떤 Queue를 쓰는지 너무 중요할 것 같죠?

그래서 실무에서는 Producer 입장에서 이 메세지를 어떤 Consumer에게 보내고 싶은지 잘 선택해서

그 Consumer가 사용하는 Queue에 메세지를 잘 넣어둬야겠구요!

 

대표적인 제품 예시로 RabbitMQ가 있습니다.

 

Message Queue

 

 

 

 

이번에는 Pub/Sub입니다.

Publisher와 Subscriber 구조라는 뜻으로, 줄여서 Pub/Sub 이라고 불리는 구조입니다.

 

Pub/Sub

Pub(Publisher)은 어떤 Sub(subscriber)가 있는지 모르는 상태에서 Message를 전송합니다.

Sub도 Pub에 대한 정보 없이 자신의 Interest에 맞는 Message만을 전송 받음

 

즉, 우편함인거죠!

우리는 우리 우편함에 누가 편지를 보냈는지는 모르지만, 일단 내 우편함이니까 다 꺼내보잖아요?

 

필요에 따라 메세지를 공유하는 형태로 쓸 수도 있습니다.

대표적인 제품 예시로 Kafka가 있습니다.

 

Pub/Sub

 

 

 

이제 이렇게 Message Queue와 Pub/Sub을 구분할 수 있게 되셨다면!

이제 여러분들은 RabbitMQ를 쓸지, Kafka를 쓸지 이제 고민 하실 수 있게 되셨습니다🎉

 

 

기쁨을 뒤로한 채, 이젠 아마도.. Redis는 그럼 왜 써..? 싶으실거 같아섴ㅋㅋㅋㅋ

 

다음 시간에는 Pub/Sub 중에서도 Kafka와 Redis의 차이는 무엇인지, 왜 실무에서 같이 쓰는지!

같이 확인해보면 좋을 것 같아요! 만나기 전에 여러분들이 먼저 차이를 설명할 수 있을 정도로 정리가 되신다면 더 좋겠죠?!

 

 

감사합니다!

이번 한 주도 너무너무 고생 많으셨고 :)

주말 잘 보내시구, 우리는 또 곧 만나요!

 

김송아 드림