JMS(Java Message Service)란 무엇인가?
JMS는 Java Message Service의 약자로, 자바 플랫폼에서 메시지 기반 시스템을 구축할 수 있도록 자바가 공식적으로 제공하는 표준 API입니다. 애플리케이션 간에 비동기적으로 데이터를 주고받는 메시징 시스템을 손쉽게 구현할 수 있게 해줍니다.
중요한 점은 JMS가 하나의 API이자 명세(Specification)라는 것입니다. 즉, JMS 자체에는 구현 코드가 포함되어 있지 않으므로, 실제로 사용하려면 ActiveMQ, WebLogic Messaging 같은 서드파티 메시징 프로바이더(구현체)가 반드시 필요합니다.
JMS가 지원하는 두 가지 메시징 도메인
JMS는 다음 두 가지 메시징 모델을 지원합니다.
- 점대점(Point to Point, P2P) 메시징
- 발행/구독(Publish/Subscribe, Pub/Sub) 메시징
두 모델은 메시지 전달 방식과 구조에서 뚜렷한 차이를 보이며, 아래 표에서 핵심적인 차이점을 한눈에 비교할 수 있습니다.
P2P와 Pub/Sub의 주요 차이점 비교
| 번호 | 구분 기준 | 점대점(P2P) 메시징 | 발행/구독(Pub/Sub) |
|---|---|---|---|
| 1 | 기본 구조 | 1:1(일대일) 메시지 전달 방식입니다. 메시지는 큐(Queue)에 저장되며, 해당 메시지는 오직 하나의 수신자만 읽을 수 있습니다. | 1:N(일대다) 메시징 방식입니다. 메시지는 토픽(Topic)으로 전송되며, 여러 소비자가 동시에 수신할 수 있습니다. |
| 2 | 풀(Pull) / 푸시(Push) 방식 | 풀(Pull) 방식을 사용합니다. 클라이언트가 메시지를 받기 위해 매번 큐를 폴링(polling)해야 합니다. | 푸시(Push) 기반 모델을 사용합니다. 메시지가 구독 중인 모든 소비자에게 자동으로 브로드캐스트됩니다. |
| 3 | 응답 확인(Acknowledgment) | 메시지 수신에 대한 응답 확인이 필수입니다. | 응답 확인은 선택 사항입니다. |
| 4 | 시간 종속성 | 발신자와 수신자 간에 시간 종속성이 없습니다. 수신자가 나중에 접속해도 큐에 저장된 메시지를 가져올 수 있습니다. | 발행자와 구독자 간에 시간 종속성이 존재합니다. 구독자는 메시지가 발행되는 시점에 구독 상태여야 메시지를 받을 수 있습니다. |
정리: 어떤 모델을 선택해야 할까?
점대점(P2P) 모델은 작업을 단일 처리자에게 확실하게 전달해야 하는 경우(예: 주문 처리, 작업 큐)에 적합하고, 발행/구독(Pub/Sub) 모델은 하나의 이벤트를 여러 시스템에 동시에 알려야 하는 경우(예: 뉴스 피드, 실시간 알림)에 적합합니다. 애플리케이션의 요구 사항에 따라 적절한 메시징 도메인을 선택하는 것이 중요합니다.