프로토콜 / 바이너리 직렬화

MQTT 토픽 매칭각 토픽의 이유까지 확인

구독 필터 하나와 줄마다 발행 토픽 하나를 입력하고 MQTT 버전과 전달 상황을 선택하세요.

MQTT 토픽 매칭

구독 토픽 필터

발행 토픽 목록

줄별 매칭 결과

필터와 토픽은 이 브라우저에서 처리됩니다. 브로커에 연결하거나 네트워크 요청을 보내지 않습니다.

프로토콜 및 전달 옵션

+는 한 계층 전체, #는 마지막 계층 전체에만 씁니다. 발행 토픽에는 와일드카드를 넣을 수 없습니다.

필터 하나와 최대 1,000개 토픽. 빈 줄만 건너뛰며 공백과 빈 계층은 유지합니다.

필터와 토픽을 입력하면 시작합니다.

발행은 성공했는데 구독에서 메시지가 보이지 않는다면 MQTT 토픽 매칭으로 계층 수, 대소문자, 맨 앞 슬래시와 $ 시스템 토픽 규칙을 확인할 수 있습니다. 입력을 정규화하지 않고 처음 달라지는 위치를 보여 줍니다.

여러 이름을 한 번에 비교하면서 필터의 일치 여부와 기존 보존 메시지의 첫 전달 여부를 따로 봅니다. MQTT 5 공유 구독에서는 필터가 일치해도 새로 참가한 구성원이 이전 메시지를 받지 않습니다.

MQTT 토픽 매칭을 쓰는 이유

필터 일치와 실제 초기 전달을 분리합니다.

와일드카드의 범위를 눈으로 확인

MQTT 토픽 매칭은 +가 정확히 한 계층을, 끝의 #가 부모와 하위 계층을 덮는 차이를 표시합니다. 빈 계층이나 $ 시스템 이름을 지우거나 임의로 바꾸지 않습니다.

토픽 계층이 갈라져 한 계층 경로와 부모 및 하위 경로가 다른 범위로 표시된 그림

보존 메시지 전달을 별도로 판단

같은 저장된 토픽이 일반 구독과 MQTT 5 공유 구독의 필터에 모두 일치할 수 있습니다. 그러나 새 공유 구성원에게는 오래된 보존 메시지가 재전달되지 않습니다.

두 구독 경로가 저장된 토픽에 일치하지만 일반 구독에만 이전 메시지가 전달되는 그림

구독 전 세 가지 확인

01

토픽 이름을 그대로 유지

실제 발행 이름을 한 줄씩 넣으세요. 대소문자, 공백, 앞뒤 슬래시와 빈 계층도 의미가 있습니다. 길이가 0인 구분 줄만 건너뜁니다.

  • 와일드카드 예제에서 sensors//temperature의 빈 계층을 확인하세요.
02

버전과 전달 시점 선택

MQTT 5는 $share/그룹/필터를 공유 구독으로 풀이하지만 3.1.1에는 표준 공유 구독이 없습니다. 보존 모드는 새 구독이 기존 메시지를 처음 받는지만 검사합니다.

  • 공유 예제를 적용하면 MQTT 5와 보존 모드가 함께 선택됩니다.
03

첫 불일치 계층 확인

일치하지 않으면 먼저 다른 계층을 표시합니다. 공유 보존 행은 규칙 일치와 재전달 없음이 구별됩니다. 입력이 바뀐 뒤에는 이전 결과의 복사와 저장이 잠깁니다.

  • 자동 테스트를 끄면 Ctrl/Cmd+Enter로 실행할 수 있습니다.

필터 동작을 설명하는 결과

계층 단위 와일드카드

토픽 와일드카드 +는 정확히 한 계층을, #는 마지막 위치에서 부모를 포함한 나머지를 가리킵니다. 일반적인 * 또는 ? 패턴으로 바꾸지 않습니다.

여러 토픽 필터 검사

MQTT 토픽 필터 하나로 최대 1,000줄을 검사합니다. 원래 줄 번호를 유지하며 잘못된 발행 이름과 단순 불일치를 따로 셉니다.

버전별 공유 구독

MQTT 5에서는 $share/그룹/을 제외한 내부 필터로 비교합니다. 3.1.1에서는 문자 그대로 비교하며 브로커 확장을 추측하지 않습니다.

이 예측이 멈추는 지점

발행 이름에 와일드카드 금지
+와 #는 구독 필터의 전체 계층이어야 하고 #는 끝에만 올 수 있습니다. 발행 토픽에 들어 있으면 오류입니다. 첫 계층의 와일드카드로 $SYS를 잡을 수도 없습니다.
공유 구독은 버전에 따라 다름
MQTT 3.1.1의 $share는 표준 공유 문법이 아니므로 일반 계층으로 취급합니다. 공급업체 확장이나 그룹 구성원 배정은 시뮬레이션하지 않습니다.
보존 모드는 새 구독의 첫 전달만
각 줄을 이미 보존 메시지가 있는 토픽으로 봅니다. 일반 MQTT 5 구독은 Retain Handling 0을 가정하며 QoS, 재연결, 삭제와 이후 발행은 다루지 않습니다.
브로커 권한은 검사하지 않음
MQTT 토픽 매칭은 브로커에 접속하거나 ACL과 인증 정보를 확인하지 않습니다. 로컬 규칙 일치가 실제 구독 승인이나 전달을 증명하지는 않습니다.

MQTT 토픽 매칭 자주 묻는 질문

MQTT 토픽 와일드카드 +와 #는 어떻게 다르게 매칭되나요?

+는 빈 계층을 포함해 정확히 한 계층에 해당합니다. #는 마지막 전체 계층에만 놓이고 부모 토픽과 그 아래 0개 이상의 계층에 해당합니다.

토픽 필터와 발행 토픽이 매칭되지 않으면 왜 메시지가 오지 않나요?

이 도구가 처음 다른 계층이나 $ 시스템 예외를 표시합니다. 그 밖에 브로커 ACL, QoS와 연결 상태도 원인이 될 수 있지만 이 페이지는 검사하지 않습니다.

토픽 이름은 대소문자를 구분하나요?

예. Sensor/temp와 sensor/temp는 서로 다른 이름입니다. 이 MQTT 구독 테스트는 대소문자나 Unicode를 바꾸지 않고 그대로 비교합니다.

토픽 이름 앞뒤에 슬래시를 붙이면 어떻게 되나요?

맨 앞이나 뒤의 슬래시는 빈 계층을 만들고 서로 다른 토픽이 됩니다. 오류로 고치지 않으며 필터와 계층별로 비교합니다.

공유 구독과 와일드카드를 함께 쓰면 메시지는 어떻게 나뉘나요?

MQTT 5의 내부 필터는 일반 와일드카드 규칙으로 매칭됩니다. 실시간 메시지를 받을 그룹 구성원은 브로커가 고르고, 새 구성원에게 기존 보존 메시지는 재전달되지 않습니다.

매칭 문제가 아직 남았나요?

지금 MQTT 토픽 매칭 사용하기

실제 필터와 토픽 목록을 MQTT 토픽 매칭에 넣고, 이미 저장된 메시지의 새 구독 초기 전달을 확인할 때만 보존 모드를 선택하세요.

모든 비교는 브라우저 안에서 실행됩니다.