Apache Kafka와 JMS란?
Apache Kafka와 JMS(Java Message Service)는 모두 메시징 시스템을 구현하기 위한 대표적인 기술입니다. 두 기술은 목적이 비슷하지만 동작 방식과 설계 철학에서 뚜렷한 차이를 보입니다. 각각의 개념부터 살펴보겠습니다.
JMS(Java Message Service)
JMS는 자바에서 공식적으로 제공하는 메시징 API로, 애플리케이션에 메시징 기능을 손쉽게 구현할 수 있도록 도와줍니다. JMS는 두 가지 메시징 모델을 지원합니다.
- 큐(Queue) 방식: 첫 번째 소비자가 메시지를 가져가면 해당 메시지는 큐에서 삭제되어 다른 소비자가 다시 가져갈 수 없습니다.
- 토픽(Topic) 방식: 발행/구독(Publisher/Subscriber) 모델로, 여러 소비자가 동일한 메시지를 수신할 수 있지만 시스템 확장이 상대적으로 어렵습니다.
Apache Kafka
Kafka는 위 두 가지 개념을 일반화한 분산 메시징 플랫폼입니다. 동일한 컨슈머 그룹(consumer group) 내부에서는 파티션을 활용해 확장성을 확보하고, 서로 다른 여러 컨슈머 그룹에는 동일한 메시지를 브로드캐스트할 수 있습니다. 또한 새로운 컨슈머가 그룹에 참여하거나 기존 컨슈머가 그룹을 떠날 때 자동 리밸런싱(auto rebalancing)을 지원하여 운영 부담을 크게 줄여줍니다.
Apache Kafka vs JMS 주요 차이점 비교표
| 번호 | 구분 | Apache Kafka | JMS |
|---|---|---|---|
| 1 | 기본 개념 | 분산형 발행-구독(publish-subscribe) 메시징 시스템으로, 다양한 소스 시스템에서 데이터를 수집해 대상 시스템에 실시간으로 전달합니다. | 자바에서 제공하는 메시징 API로, 애플리케이션 내 메시징 시스템 구현에 사용됩니다. |
| 2 | 풀/푸시 방식 | 풀(Pull) 방식을 사용하며, 클라이언트가 메시지를 직접 폴링(polling)해야 합니다. | 푸시(Push) 기반 모델을 사용하며, 모든 소비자에게 메시지를 브로드캐스트할 수 있습니다. |
| 3 | 메시지 보존 정책 | 정책(policy) 기반으로 메시지를 관리합니다. | 확인 응답(Acknowledgment) 기반으로 메시지를 처리합니다. |
| 4 | 자동 리밸런싱 | 컨슈머 그룹에 컨슈머가 추가되거나 제거될 때 자동 리밸런싱을 제공합니다. | 자동 리밸런싱을 지원하지 않습니다. |
| 5 | 메시지 순서 보장 | 파티션 단위로 메시지가 전송된 순서대로 수신되도록 보장합니다. | 메시지 순서를 보장하지 않습니다. |
정리
간단한 애플리케이션 내부의 메시징이 필요하다면 JMS가 적합하고, 대용량 실시간 데이터 스트리밍과 높은 확장성이 필요하다면 Apache Kafka가 더 나은 선택입니다. 특히 Kafka는 순서 보장과 자동 리밸런싱 덕분에 대규모 분산 환경에서 안정적인 운영이 가능합니다.