서론
입사 후 처음 맡게된 업무는 회사에서 제공하는 OpenAPI 관련 업무였다.
관련해서 MQ를 처음 사용해보게 됐는데, 회사에선 RabbitMQ를 사용하고 있었다.
아직 업무 투입 전이기 때문에, 빠르게 학습해보도록 하려고 한다.
RabbitMQ를 공부하다보니 자연스럽게 AMQP라는 용어도 나왔는데, 이게 뭔지 궁금해서 한 번 알아봤다.
참고
https://preamtree.tistory.com/172
본론
AMQP는 '프로토콜' 이다.
AMQP는 Advanced 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를 한 번 거쳐 가도록 세팅해서, 애플리케이션 간 의존성을 줄이는 방법을 선택할 수 있겠다.
결론
생소한 용어가 나와서 조금 겁을 먹었었는데, 생각보다 별게 아니었다. 그냥 이런식으로 흘러가는구나~ 하는 개념으로 이해하면 될 것 같다.