[RabbitMQ] 2. AMQP 란?

2024. 8. 16. 03:52·Message Broker

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 에서 사용하기 위한 설정을 알아보겠습니다.

 

도움이 되셨길 바라며,

읽어주셔서 감사합니다.

 

 

'Message Broker' 카테고리의 다른 글

[RabbitMQ] 3. 스프링 부트에서 RabbitMQ 설정 방법  (3) 2024.08.22
[RabbitMQ] 1. 메시지 브로커(Message Broker)에 대해  (1) 2024.08.15
'Message Broker' 카테고리의 다른 글
  • [RabbitMQ] 3. 스프링 부트에서 RabbitMQ 설정 방법
  • [RabbitMQ] 1. 메시지 브로커(Message Broker)에 대해
옐리yelly
옐리yelly
  • 옐리yelly
    개발 갤러리
    옐리yelly
  • 전체
    오늘
    어제
    • 모든 글 보기 (86)
      • Project (22)
      • Java (5)
      • Spring (8)
      • Kubernetes (6)
      • Docker (2)
      • JPA (3)
      • Querydsl (2)
      • MySQL (9)
      • ElasticSearch (7)
      • DevOps (4)
      • Message Broker (3)
      • Git & GitHub (2)
      • Svelte (1)
      • Python (8)
        • Python Distilled (4)
        • Anaconda (1)
        • Django (0)
        • pandas (3)
      • Algorithm (1)
      • Computer Science (0)
      • 내 생각 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    커넥션 풀
    Project
    프로젝트
    예약 시스템
    pandas
    ncloud
    devops
    Spring
    리팩토링
    mybatis
    docker
    argocd
    OOP
    k8s
    querydsl
    데드락
    JPA
    nks
    pymysql
    포텐데이
    MySQL
    gitops
    Python
    svelte
    Message Broker
    비사이드
    성능 테스트
    RabbitMQ
    elasticsearch
    blue-green 배포
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
옐리yelly
[RabbitMQ] 2. AMQP 란?
상단으로

티스토리툴바