본문 바로가기

Message Broker

[RabbitMQ] 2. AMQP 란?

AMQP

 

이전 포스팅에선 메시지 브로커에 대해 알아봤습니다.

2024.08.15 - [Message Broker] - [RabbitMQ] 1. 메시지 브로커(Message Broker)에 대해

 

이번 포스팅에선 표준화된 메시지 프로토콜인 AMQP 에 대해 알아보겠습니다.

AMQP(Advanced Message Queuing Protocol) 란?

AMQP 는 메시지 지향 미들웨어(Message Oriented Middleware;MOM)에서 메시지 브로커 간 통신을 표준화하기 위해 설계된 프로토콜입니다.

서로 다른 시스템(이기종 포함)들이 소통할 때 각자 다른 방식을 사용한다면 한 쪽에서는 메시지를 읽는 방식을 맞춰줘야하는 불편함이 있거나 아예 소통하지 못할수도 있습니다.

이런 문제를 해결하기위해 탄생한 AMQP 는 안전하고 효율적인 전달을 위해 표준화 되었습니다. AMQP 를 활용하면 네트워크에서 메시지를 주고받는 방식이 일관되어 있기 때문에 시스템 간 소통이 원활해지죠.

 

AMQP 의 주요 구성요소

Producer 의 메시지가 Consumer 에게 도달하는 과정

이 프로토콜의 주요 요소를 살펴봅시다.

  • 메시지
    • AMQP 에서 전달되는 기본 단위를 말합니다.
    • 메시지는 헤더바디로 구성되어 있습니다. (헤더: 메시지 라우팅에 필요한 메타 데이터(Key-Value), 바디: 실제 데이터)
  • 생산자(Producer)
    • 메시지를 생성하고 메시지 브로커에게 전달하는 주체를 말합니다.
    • 메시지를 전달할 땐 특정 교환기(Exchange)에 전달합니다.
  • 교환기(Exchange)
    • 메시지를 받아 특정 큐로 라우팅 역할을 담당합니다. (전달대상 큐는 규칙에 의해 여러 개가 될 수도 있습니다.)
    • Exchange 종류
      • Direct Exchange: 라우팅 키(routing key)와 정확히 일치하는 큐에 메시지를 전달합니다. (1:1)
      • Fanout Exchange: 라우팅 키와 상관없이 모든 큐로 메시지를 전달합니다. (1:N)
      • Topic Exchange: 라우팅 키에 설정된 패턴("#.topic.*")에 해당하는 큐로 메시지를 전달합니다.
      • Headers Exchange: 메시지 헤더의 특정 속성을 읽고 해당하는 큐로 메시지를 전달합니다.
  • 큐(Queue)
    • 메시지가 전달된 후 소비자(Consumer)가 메시지를 수신할 때까지 대기하는 장소를 말합니다.
    • FIFO(선입선출) 로 동작합니다.
  • 소비자(Consumer)
    • 큐에서 메시지를 받아 처리하는 주체입니다.
  • 바인딩(Binding)
    • 교환기(Exchange)와 큐를 연결지어주는 역할을 합니다.
    • 특정 라우팅 키를 기준으로 메시지가 어느 큐로 가야하는지를 정의합니다.
    • 하나의 큐가 여러 개의 Exchange 에 바인딩 될 수도, 하나의 Exchange 가 여러 큐에 바인딩 될 수도 있습니다.

AMQP의 특성

https://www.amqp.org/about/what 에는 핵심 특성으로 5가지를 말합니다.

  • Security: AMQP 가 제공하는 기술은 전달되는 메시지의 기밀성무결성을 보호합니다.
  • Reliability: 메시지가 전송됐는지 확인(acknowledgment)하는 메커니즘을 제공합니다. 이를 통해 메시지가 손실되거나 중복되지 않도록 관리합니다.
  • Interoperability: 서로 다른 플랫폼, 언어에 중립적으로 설계되었기 떄문에 이기종 시스템 간 통합을 쉽게 합니다.
  • Standard: 국제적으로 표준화된 프로토콜로 AMQP 기반의 기술들이 동일한 방식으로 동작하도록 보장합니다.
  • Open: 누구나 접근할 수 있는 개방형 표준을 의미합니다. 누구나 AMQP 를 사용하여 메시징 시스템을 구축할 수 있으며 상업적 제한 없이 활용할 수 있음을 의미합니다.

저는 채팅 시스템에서 필요한 특성 중 이기종 시스템 간 통합을 쉽게 해주는 AMQP 특성을 보고 이 프로토콜을 지원하는 메시지 브로커를 사용하기로 결정했습니다.

RabbitMQ는 AMQP 의 구현체

RabbitMQ 는 AMQP 를 구현한 메시지 브로커 중 하나입니다. 커뮤니티 생태계가 활발하고, 기업 시스템에서도 사용되는 것을 보고 채팅 시스템 프로젝트에 적극 활용할 수 있을 것 같아 선택했습니다.

 

다음 포스팅은 RabbitMQ 에 대한 간략한 설명과 Spring Ecosystem 에서 사용하기 위한 설정을 알아보겠습니다.

 

도움이 되셨길 바라며,

읽어주셔서 감사합니다.