이전 포스팅에선 메시지 브로커에 대해 알아봤습니다.
2024.08.15 - [Message Broker] - [RabbitMQ] 1. 메시지 브로커(Message Broker)에 대해
이번 포스팅에선 표준화된 메시지 프로토콜인 AMQP 에 대해 알아보겠습니다.
AMQP(Advanced Message Queuing Protocol) 란?
AMQP 는 메시지 지향 미들웨어(Message Oriented Middleware;MOM)에서 메시지 브로커 간 통신을 표준화하기 위해 설계된 프로토콜입니다.
서로 다른 시스템(이기종 포함)들이 소통할 때 각자 다른 방식을 사용한다면 한 쪽에서는 메시지를 읽는 방식을 맞춰줘야하는 불편함이 있거나 아예 소통하지 못할수도 있습니다.
이런 문제를 해결하기위해 탄생한 AMQP 는 안전하고 효율적인 전달을 위해 표준화 되었습니다. AMQP 를 활용하면 네트워크에서 메시지를 주고받는 방식이 일관되어 있기 때문에 시스템 간 소통이 원활해지죠.
AMQP 의 주요 구성요소
이 프로토콜의 주요 요소를 살펴봅시다.
- 메시지
- 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 에서 사용하기 위한 설정을 알아보겠습니다.
도움이 되셨길 바라며,
읽어주셔서 감사합니다.
'Message Broker' 카테고리의 다른 글
[RabbitMQ] 3. 스프링 부트에서 RabbitMQ 설정 방법 (2) | 2024.08.22 |
---|---|
[RabbitMQ] 1. 메시지 브로커(Message Broker)에 대해 (0) | 2024.08.15 |