메시지 큐와 JMS

성태팍·2023년 11월 5일

안녕하세요. 반갑습니다.

연계하면 빼놓을 수 없는 기술인 메시지 큐와 JMS를 알아보겠습니다.

메시지 큐

메시지 큐란 메시지를 저장하고 관리하는 대기열을 나타냅니다.
송신자(Producer)는 메시지를 큐에 게시하고,
수신자(Consumer)는 큐에서 메시지를 가져올 수 있습니다.


쉽게 말하면 메시지 제공자가 특정 메시지를 특정 큐에 올려놓으면
메시지 소비자는 특정 큐를 LISTEN 하다가 메시지가 감지되면 호로록 할수 있게끔 설정할 수 있다는 말입니다.

Apache ActiveMQ는 메시지 큐 지원 기술이 내장되어있는 오픈 소스 메시징 브로커 소프트웨어로
시스템 간 연계에 있어서 핵심적인 역할을 수행한다고 보면 되겠습니다.

Apache ActiveMQ는 Java로 작성되어 있으며 Java Message Service (JMS) API를 지원합니다.
JMS는 Java 애플리케이션 간에 메시지를 교환하고 통신하는 데 사용되는 Java의 표준 메시징 API입니다.

JMS(Java Message Service)

세상을 놀라게 했던 그 교회 아님
JMS는 자바 플랫폼, 엔터프라이즈 에디션(EE) 기반이며, 메시지 생성, 송수신, 읽기를 가능하게 합니다.

1) 발행/구독 모델(Publish-and-subscribe)
2) 지점간 연결(Point-to-point)

JMS API는 두 가지 모델을 지원하는데
Publish-and-subscribe에서는 1대다 연결을 지원하고 Topic을 기반으로 동작합니다.
Point-to-point는 1대1 연결을 지원하고 Queue를 사용합니다. 메시지가 한 번 수신되면 다른 수신자가 해당 메시지를 다시 받지 않기 때문에 1회성으로 처리됩니다.

이전에 사용한 솔루션은 Publish-and-subscribe 방식은 거의 사용하지 않았고
주로 Point-to-point 방식으로 구현되었습니다.

Point-to-point 방식은 다음과 같은 장점이 있습니다.

  1. 단순한 모델: P2P 모델은 단순하며 직관적입니다. 하나의 송신자가 하나의 수신자에게 메시지를 보내는 모델로, 메시징 시스템의 동작이 명확하고 이해하기 쉽습니다.

  2. 내구성과 안정성: P2P 모델은 메시지 큐를 사용하므로 메시지가 안전하게 저장됩니다. 이로 인해 메시지의 손실을 방지하고 안정성을 보장합니다.

  3. 유연성: 각 수신자는 큐에 대한 독립적인 메시지 처리 루틴을 가질 수 있으며, 메시지 큐 시스템은 메시지를 큐에 넣을 때 메시지의 우선순위를 지정할 수 있어 우선순위에 따라 메시지를 처리할 수 있습니다.

  4. 스케일링: P2P 모델을 사용하면 동일한 메시지를 여러 수신자에게 전달할 필요가 없으므로, 송신자 및 수신자 간에 상호작용이 간단해집니다. 이로 인해 시스템이 확장성 있게 설계될 수 있습니다.

  5. 비동기 통신: P2P 모델은 비동기적으로 메시지를 송수신하므로 느슨한 결합(Loose Coupling)을 지원하며, 시스템의 유연성을 향상시킵니다.

  6. 메시지 분배: P2P 모델은 메시지를 정확히 하나의 수신자에게 전달하므로, 여러 수신자 간의 경쟁 없이 메시지를 분배할 수 있습니다.

  7. 응답 시간 관리: P2P 모델을 사용하면 메시지가 큐에 보관되므로 수신자가 처리할 수 있는 시간에 메시지를 가져올 수 있습니다. 이로 인해 응답 시간을 관리하고 임계 시간 내에 메시지를 처리할 수 있습니다.

저는 주로 시스템과 시스템 간의 연계를 진행했기 때문에 굳이 Publish-and-subscribe 방식을 사용할 필요가 없었습니다. (메시지 순차 보장이 어렵고 각 구독자 별로 처리 속도도 다를 수 있기 때문에 장애 터지면 난리날 수도 있음.)

Point-to-point 방식을 구현할 때 큐를 4단계에 걸쳐서 구현하는데,

데이터송신 Queue, 데이터수신 Queue, 결과송신 Queue, 결과수신 Queue 생성.
위 4단계 중 한 군데라도 에러가 발생하면 특정 Error Queue로 메시지 적재...

위 방식대로 구현하면 메시지 순차 보장은 물론 에러도 어느정도 발라낼 수 있습니다.

profile
안녕하세요. 반갑습니다. 건강하세요.

0개의 댓글