목록 보기
NestJS에서 MQTT 5 Shared Subscription 기능 사용하기
백엔드

NestJS에서 MQTT 5 Shared Subscription 기능 사용하기

그린데이터
그린데이터
2022년 1월 21일

두줄요약

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 사용 가능

다음 읽기

#MQTT 주제를 다룬 다른 회사 글

MQTT 의 이해부터 테스트까지 (feat. POS 연동)

MQTT의 기본 개념과 QoS, 세션, 요청/응답 패턴을 정리하고 POS 연동 적용 가능성을 살펴보았습니다. 또한 NestJS와 Amazon MQ로 테스트해 재연결 시 메시지 수신과 전달 보장 가능성을 확인했습니다.

테이블링
테이블링
백엔드

댓글 0개

댓글을 작성하려면 로그인이 필요합니다.

댓글을 불러오는 중...