Backend/RabbitMQ

[RabbitMQ] AMQP에 대해

Emil :) 2024. 8. 14. 19:02
728x90
반응형

서론


입사 후 처음 맡게된 업무는 회사에서 제공하는 OpenAPI 관련 업무였다.

관련해서 MQ를 처음 사용해보게 됐는데, 회사에선 RabbitMQ를 사용하고 있었다.
아직 업무 투입 전이기 때문에, 빠르게 학습해보도록 하려고 한다.

RabbitMQ를 공부하다보니 자연스럽게 AMQP라는 용어도 나왔는데, 이게 뭔지 궁금해서 한 번 알아봤다.

참고


https://preamtree.tistory.com/172

 

Spring AMQP 맛보기 - 1. AMQP 개념

부제: RabbitMQ Spring 연동, RabbitMQ 연동 이번 시리즈에서는 간단한 Spring AMQP 예제를 소개한다. 예제를 시작하기 전에 이번 포스팅에서는 AMQP라는 것에 대해 소개할 것이다. 1. AMQP 정의 Advanced Message Qu

preamtree.tistory.com

https://velog.io/@holicme7/%ED%91%9C%EC%A4%80-%EB%A9%94%EC%84%B8%EC%A7%95-%ED%94%84%EB%A1%9C%ED%86%A0%EC%BD%9C-%EC%A0%95%EB%A6%AC-AMQP-STOMP-MQTT

 

표준 메세징 프로토콜 정리 (AMQP, STOMP, MQTT)

AMQP는 메세지 지향 미들웨어 (MOM) 을 위한 표준 응용 계층 프로토콜입니다. 간단히 말하면, 메세지 통신을 위한 규약 스펙 입니다.플랫폼 종속적인 제품들 사이에서 서로 다른 이기종간에 메세지

velog.io

 

본론


AMQP는 '프로토콜' 이다.

AMQPAdvanced Message Queuing Protocol의 약자이다.

프로토콜이 무엇인가? 서로 다른 시스템 간에 통신하기 위한 '규약' 이다.

AMQP도 마찬가지다. 서로 다른 MQ들 간에 통신하기 위한 공통된 프로토콜이다.
이게 전부임. 별거없다. MQ들의 구성에 대해 간략하게 만든 통신규약이라고 이해하자.
이 AMQP라는 프로토콜을 충족하기 위해선 다음과 같은 조건들이 필수로 만족해야 한다.

  • 모든 broker들은 같은 방식으로 동작할 것
  • 모든 client들은 같은 방식으로 동작할 것
  • 네트워크상으로 전송되는 명령어들의 표준화
  • 중립적인 프로그래밍 언어

여기서 중립적인 프로그래밍 언어란, Java, C, Python 등과 같이 저수준 언어와 고수준 언어의 중간쯤 되는 언어들을 일컫는다.

용어와 동작원리

  • Publisher(Producer) : 메세지를 보내는 곳
  • Exchange : 수신한 메시지를 큐에 분배하는 곳
  • Queue : 메시지를 저장하는 곳. Consumer에게 전달하는 역할 수행
  • Binding : Exchange와 Queue를 묶는 mapping개념. 1:1 or 1:N
  • Consumer(Subscriber) : 메시지를 받는 곳

왜 사용하는가?

생산자와 소비자의 의존성을 느슨하게 하기 위함이다.

위와 같이 일반적인 애플리케이션은 DB와 직접 통신을 하는데, 이러한 방식은 다음과 같은 단점이 있다.

  • DB 지연이 직접적인 애플리케이션 지연의 원인이 되기도 한다.
  • DB 장애 시 애플리케이션도 장애가 된다.

이를 보완하기 위해 AMQP 기반의 메세지 큐를 사용한다.
개선한다면 다음과 같은 구조가 된다.

그런데 이렇게 두고 보니, 결국엔 일반적인 메시지 큐를 구성하는 방법과 동일하다는 것을 알게 되었다. 생각보다 별게 없었음.

관련 포스팅에서 MSA를 곁들여서 설명하는데, 이 내용도 잠깐 적어보자면, MQ와 Consumer를 한 번 거쳐 가도록 세팅해서, 애플리케이션 간 의존성을 줄이는 방법을 선택할 수 있겠다.

기존의 MSA
MQ를 끼워넣어 개선한 MSA

결론


생소한 용어가 나와서 조금 겁을 먹었었는데, 생각보다 별게 아니었다. 그냥 이런식으로 흘러가는구나~ 하는 개념으로 이해하면 될 것 같다.

구독 및 하트는 정보 포스팅 제작에 큰 힘이됩니다♡

728x90
반응형