안녕하세요 여러분,
김송아 입니다.
모든 기술이 그렇듯 어떠한 기술을 반드시 선택해야한다는 건 절대 없습니다.
모든 기술은 장단점이 분명히 존재하기 때문에, 하나의 단점을 보완하기 위해 다른 기술을 사용할 수 있다는 것일뿐!
내가 주어진 환경과 기술에 따라
최선인 선택지를 선택해야 하는 것이 바로 우리가 할 일!
무슨 소리인지, 같이 한번 얘기해볼게요.
최근 저희가 같이 공부하고 있는 MSA하면, 빼놓을 수 없는 기술이 있죠.
메세지 브로커입니다.
ps. 메세지 브로커와 Pub/Sub에 대한 개요가 필요하시다면 바로 아래 글을 참고해주세요.
메세지 브로커의 종류는 다양합니다.
위 아티클에서 말씀드린 것처럼 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가 있습니다.
이번에는 Pub/Sub입니다.
Publisher와 Subscriber 구조라는 뜻으로, 줄여서 Pub/Sub 이라고 불리는 구조입니다.
Pub/Sub
Pub(Publisher)은 어떤 Sub(subscriber)가 있는지 모르는 상태에서 Message를 전송합니다.
Sub도 Pub에 대한 정보 없이 자신의 Interest에 맞는 Message만을 전송 받음
즉, 우편함인거죠!
우리는 우리 우편함에 누가 편지를 보냈는지는 모르지만, 일단 내 우편함이니까 다 꺼내보잖아요?
필요에 따라 메세지를 공유하는 형태로 쓸 수도 있습니다.
대표적인 제품 예시로 Kafka가 있습니다.
이제 이렇게 Message Queue와 Pub/Sub을 구분할 수 있게 되셨다면!
이제 여러분들은 RabbitMQ를 쓸지, Kafka를 쓸지 이제 고민 하실 수 있게 되셨습니다🎉
기쁨을 뒤로한 채, 이젠 아마도.. Redis는 그럼 왜 써..? 싶으실거 같아섴ㅋㅋㅋㅋ
다음 시간에는 Pub/Sub 중에서도 Kafka와 Redis의 차이는 무엇인지, 왜 실무에서 같이 쓰는지!
같이 확인해보면 좋을 것 같아요! 만나기 전에 여러분들이 먼저 차이를 설명할 수 있을 정도로 정리가 되신다면 더 좋겠죠?!
감사합니다!
이번 한 주도 너무너무 고생 많으셨고 :)
주말 잘 보내시구, 우리는 또 곧 만나요!
김송아 드림
'Programming' 카테고리의 다른 글
[언그래머] 아흔아홉번째 아티클_GraaaaaaaalVM (5) | 2024.08.30 |
---|---|
[언그래머] 코딩테스트 챌린지_22_순위 검색 (알고리즘: 이분 탐색) 카카오 기출 문제, 프로그래머스 Lv.2 (4) | 2024.08.27 |
[언그래머] 코딩테스트 챌린지_21_땅따먹기 (프로그래머스 Lv.2) (4) | 2024.08.20 |
[언그래머] 코딩테스트 챌린지_20_연속된 부분 수열의 합 (74) | 2024.08.16 |
[언그래머] 아흔일곱번째 아티클_AWS로 할 수 있는 일 8가지 (3) | 2024.08.13 |