
NestJS에서 MQTT 5 Shared Subscription 기능 사용하기
두줄요약
MQTT 5 Shared Subscription으로 다중 NestJS 서버의 중복 메시지 수신 문제를 줄였습니다. NestJS 8.2.6의 패턴 매칭 버그를 수정한 커스텀 패키지 적용 과정을 소개했습니다.
문제 상황
- IoT 데이터 수집 환경에서 모든 NestJS 서버가 동일 MQTT 메시지를 수신하는 구조
- 오토스케일링·배포 중 다중 서버 동작에 따른 DB 중복 저장 위험
해결 방법
- MQTT 5 Shared Subscription의
$share/groupName/topic형식으로 구독 그룹 구성 - 그룹 내 한 클라이언트에만 메시지를 전달하는 클라이언트 로드 밸런싱 활용
- NestJS 8.2.6의 핸들러 패턴 매칭 문제를 수정한
@nestjs/microservices커스텀 패키지 적용
원인 분석
- Shared Subscription 접두사
$share/groupName을 포함한 핸들러 키와 실제 MQTT 라우트의 패턴 매칭 불일치 - NestJS 공식 이슈와 미병합 PR에서 확인한 MQTT Shared Subscription 지원 누락
주의할 점
- MQTT 5 지원 Broker와 Subscriber 여부 사전 확인
- NestJS 8.4.0 이상에서는 별도 수정 없이 Shared Subscription 사용 가능



