MQTT · 2026-04-22

MQTT 토픽 와일드카드 성능과 최적 사용법

MQTT 와일드카드가 브로커와 클라이언트 성능에 미치는 영향과 실무에서 부하를 줄이며 안정적으로 운영하기 위한 설계와 측정 방법에 대한 설명

작성일 : 2026-04-22 ㆍ 작성자 : 관리자
post
목차

소개

MQTT의 토픽 와일드카드는 구독 편의성을 크게 높인다. 하지만 잘못 사용하면 브로커와 클라이언트 성능에 부정적 영향을 줄 수 있다. 이 글에서는 와일드카드 동작 원리부터 성능 영향, 측정 방법과 실무에서의 권장 사용법까지 단계적으로 정리한다.

토픽 와일드카드 기본 개념

와일드카드 종류

  • "+" : 한 레벨의 임의 토픽 매칭
  • "#" : 남은 모든 하위 레벨 매칭 (멀티 레벨)

동작 예시

토픽이 "sensors/+/temperature"이면 "sensors/room1/temperature" 등 한 레벨만 매칭한다. 반면 "sensors/#"는 "sensors/room1/temperature"부터 "sensors/room1/humidity/status"까지 모두 매칭한다.

와일드카드 사용 시 성능 영향

브로커 측면

  • 매칭 비용 증가: 브로커는 수신한 메시지마다 구독 테이블과 와일드카드 패턴을 비교한다. 패턴 수가 많거나 복잡하면 CPU 비용이 커진다.
  • 메모리 사용 증가: 구독 자체가 많아지면 구독 테이블과 라우팅 정보가 커져 메모리 사용량이 늘어난다.
  • 전달 폭주(routing fan-out): 광범위한 와일드카드는 메시지를 많은 구독자에게 전달하게 되어 네트워크와 IO 부하를 증가시킨다.

클라이언트 측면

  • 불필요한 메시지 수신: 과도한 구독 범위는 클라이언트가 원치 않는 메시지를 받게 하여 처리 비용과 배터리 소모를 늘린다.
  • QoS와 재전송 영향: 많은 수신 메시지는 ACK과 재전송 로직에 영향을 주어 전체 시스템 지연을 키운다.

언제 와일드카드를 사용해야 하는가

와일드카드는 토픽 구조가 일정하고, 다수 장치나 동적 디바이스 그룹을 한꺼번에 처리해야 할 때 유용하다. 반면 중요하거나 빈번히 전송되는 데이터는 구체적 토픽을 사용해 필터링하는 편이 낫다.

mqtt 와일드카드 성능 최적화 전략

1. 토픽 설계 개선

  • 계층 구조 설계: 관심사 분리가 잘 된 계층을 만들면 와일드카드 범위를 좁힐 수 있다.
  • 의미 있는 레벨 사용: 중요도나 유형을 상위 레벨에 두어 선택적 구독이 가능하게 한다.

2. 최소 권한 구독 원칙

필요한 데이터만 구독한다. 예를 들어 클라이언트가 특정 센서 타입의 데이터만 필요하면 "sensors/+/temperature" 대신 구체적인 디바이스 또는 태그를 사용한다.

3. 라우팅과 브로커 설정

  • 브로커의 구독 인덱스와 매칭 알고리즘을 확인한다.
  • 필요 시 브로커 샤딩이나 퍼블리셔 측 필터링을 도입해 fan-out을 줄인다.

토픽 와일드카드 사용 권장 사례

  • 운영 대시보드: 다수 디바이스의 상태를 한 번에 수집할 때는 와일드카드를 사용해 편리성을 확보한다.
  • 디버그 또는 로그 수집: 임시로 광범위 구독을 설정해 문제를 진단한다.
  • 서비스 구간별 분리: 서로 다른 서비스는 별도 네임스페이스를 두어 와일드카드가 범위를 침범하지 않게 한다.

측정과 모니터링

성능 지표

  • 메시지 처리량(pps)
  • CPU 사용률과 메모리
  • 네트워크 대역폭과 전달 지연

테스트 방법

  • 와일드카드 포함/비포함 시나리오를 각각 만들어 비교 측정
  • 점진적 스케일링으로 임계점을 파악
  • 실제 필드 데이터와 유사한 패턴으로 부하 테스트

간단한 코드 예시

아래는 Node.js(mqtt.js)를 사용한 구독 예시다. 와일드카드 사용 전후로 전달되는 메시지 수를 모니터링해 차이를 확인할 수 있다.

const mqtt = require('mqtt')
const client = mqtt.connect('mqtt://broker.example')

client.on('connect', () => {
  // 광범위 구독
  client.subscribe('sensors/#', { qos: 1 })
  // 또는 제한 구독
  // client.subscribe('sensors/temperature/+/room1', { qos: 1 })
})

client.on('message', (topic, message) => {
  // 메시지 처리 로직
  console.log(topic, message.toString())
})

실무 체크리스트

  • 토픽 네이밍 정책 문서화
  • 와일드카드 사용 영역과 목적 명확화
  • 부하 테스트와 모니터링 대시보드 구성
  • 브로커 설정(샤드, 인덱스) 검토
  • 주기적 구독 정리 및 필요 없는 구독 제거

결론

와일드카드는 편의성과 유지보수성을 크게 향상시키지만, 남용하면 브로커와 클라이언트 성능에 부담을 준다. mqtt 와일드카드 성능 관점에서 토픽 설계와 구독 최소화, 측정 기반 튜닝이 핵심이다. 토픽 와일드카드 사용 권장은 필요성과 범위를 명확히 할 때 가장 효과적이며, mqtt 와일드카드 최적화는 설계 단계부터 모니터링까지 이어지는 과정이다.

mqtt mqtt 와일드카드 성능 토픽 와일드카드 사용 권장 mqtt 와일드카드 최적화 토픽 설계 브로커 성능 IoT 구독 최적화