본문 바로가기
Back-End

[rabbitMQ] M2칩 환경 SpringBoot + rabbitMQ 연동

by LeeGangEun 2022. 8. 23.

RabbitMq 사용하는 이유?

-> 먼저 한 프로젝트를 진행한다고 가정해보자. 
서버를 분할하지않고 한 서버에서만 프로젝트를 구상한다면
미니프로젝트에는 영향이 없겠지만, 조금이라도 규모가 커진다면
성능 및 사용성을 고려해야 한다.

LoL이라고 가정을 해보자.
1. 게임을 하고 있는유저
2. 로그인을 하고 있는유저

두 유저가 있다.
로그인 쪽 어떠한 이슈로 인해 서버가 터졌다.
여기서 만약 서버가 전부 통합 서버라면?...

게임을 하고 있던 사람도 멈추고 
게임을 찾고 있던 사람도 멈추고
로그인 하려던 사람도 멈추게 된다.

이러한 현상을 방지하고자 분산 서비스 시스템을 이용하는 것이다.

서버를 분산하였다면 ?

로그인 하는 서버만 터졌으면

게임을 진행하고 있던 유저는 아무런 피해없이 진행할 수 있을것이다.

대표적인 예로는 MSA(MicroService Architecture) 가 있다.

그리고 MSA를 이용하여 서버를 분할했을때 
서버와 서버에서 데이터를 주고 받아야 할 경우가 분명히 있을것이다.

데이터를 직접 서버로 보내 요청을 해도 되지만 이러면
굳이 서버를 분산한 이유가 없다.
중간에  안정기 같이 완충해줄 무언가가 필요하다.
 

이러한 완충 역할도 하고, 데이터를 좀 더 안전하게 주고 받을 수 있게 RabbitMQ가 도와준다.

그럼 사용법을 알아보자.

 

RabbitMQ란 ? 

공식문서에서는 우체국이라고 표현하고 있다.
RabbitMQ는 AMQP(Advanced Message Queueing Protocol)을 구현한 오픈소스 메시지 브로커(중개자)이다.
간단히 말해서 RabbitMQ는 데이터를 쌓아두고 나중에 비동기적 처리를 원할때 알맞은 데이터 저장소이다.

 

P(producer) : 생산자 메시지를 보낸다 (데이터 요청)
C(consume) : 메시지를 소모한다 (데이터를 응답)
M(message) : 직사각형 하나 당 message 한개라고 보면 된다.
Q(Queue): Queue안에 message가 속해있다고 보면된다.
  -> 비동기(Asynchronous) : 요청된 작업을 Queue에 적재하고, 다른 작업부터 처리 가능
  -> 비동조(Decoupling) : 주 애플리케이션과의 의존성 분리 가능
  -> 과잉(Redundancy) : 실패할 경우 재실행 가능(데이터를 보존가능)
  -> 보증(Guarantees) : Queue에 따로 적재된 작업들을 모니터링 가능
  -> 확장성(Scalable) : 다양한 애플리케이션이 message를 생산 가능.

 

RabbitMQ 다운로드 

먼저 Homebrew 가 터미널에 다운받아져 있어야 한다(공식문서 참고)

1. Homebrew를 최신버전으로 업데이트
-> brew update

 

2. rabbitMQ 다운로드
-> brew install rabbitmq

 

3. rabbitMq 실행
 -> rabbitmq-server : 포어그라운드로 돌리기
 -> rabbitmq-server start : 포어그라운드로 돌리기
 -> service rabbitmq-server start : 백그라운드에서 데몬으로 돌리기

 

4. 계정 접속 및 계정 생성
 -> rabbitMQ 기본 포트 : 5672
 -> rabbitMQ웹 기본 포트 : 15672
 -> 기본 username : guest
 -> 기본 password : guest

 

 

원하는 id,pw 생성하고 admin으로 권한부여 후 생성 !