91. 문제 해결 체크리스트
MQTTX에 메시지가 보이지 않음
먼저 확인할 것:
- 브로커가
broker.emqx.io:1883인지 확인합니다. - 구독 토픽의
{uniq-user-id}가 시뮬레이터 설정과 같은지 확인합니다. factory와dt/factory를 혼동하지 않았는지 확인합니다.- 시뮬레이터가 실제로 실행 중인지 확인합니다.
Node-RED가 메시지를 받지 못함
먼저 확인할 것:
- Node-RED에서
배포하기를 눌렀는지 확인합니다. - MQTT In 노드의 topic에 예전 사용자 ID가 남아 있지 않은지 확인합니다.
- 브로커 설정이
broker.emqx.io인지 확인합니다. - MQTT 노드 상태가 connected인지 확인합니다.
에어컨이 켜지지 않음
먼저 확인할 것:
- 룰엔진이 control을
kiot/{user}/factory/room-01/actuator/aircon/control로 발행하는지 확인합니다. - control 토픽에
dt가 들어가 있으면 잘못된 경로입니다. - 시뮬레이터가 aircon control 토픽을 구독 중인지 확인합니다.
- 시뮬레이터 로그에 제어 메시지 수신 기록이 있는지 확인합니다.
컨베이어벨트가 켜지지 않음
먼저 확인할 것:
- control payload의
power가"on"인지 확인합니다. - 토픽 경로가
factory/.../conveyor-belt/control인지 확인합니다. overheatMode만 켜고power를 켜지 않은 것은 아닌지 확인합니다.
시트1이 stale 데이터를 계속 발행함
원인:
- 시뮬레이터가 꺼졌는데 마지막 상태를 10초마다 계속 재발행하는 집계 로직일 수 있습니다.
권장:
- 새 raw 메시지가 들어온 경우에만 집계 발행 타이머가 의미 있게 동작하도록 조정합니다.
- 오래된 데이터는 룰엔진에서
stale-state로 판단하고 제어를 보류합니다.
AI Agent가 이상한 권고를 함
먼저 확인할 것:
- 시트3 현장 분석가 메시지가 과도하게 장황하지 않은지 확인합니다.
- 정상 상태에서 “향후 주의” 표현이 “즉시 조치”로 해석되지 않는지 확인합니다.
- 시트4가 정상 상태에서
ops/recommendation을 남발하지 않는지 확인합니다. - mock과 실제 LLM 응답을 구분해서 봅니다.
루프처럼 메시지가 계속 발행됨
가능 원인:
- 시트4가
recommend-to-monitor같은 메시지를 계속 발행합니다. - 룰엔진이 권고를 받을 때마다
rule/result를 발행하고, 시트3이 다시 반응합니다. - 시뮬레이터가 꺼져도 시트1이 오래된
state/current를 계속 발행합니다.
권장:
- 정상 상태에서는 운영 권고를 발행하지 않습니다.
- 오래된 데이터는 시트1 또는 룰엔진에서 보수적으로 차단합니다.
- 시트3과 시트4는 필요한 상태 변화에만 반응하도록 제한합니다.
Mermaid 다이어그램이 작게 보임
이 사이트의 Mermaid 다이어그램은 기본적으로 세로형 TB 구조를 사용합니다. 다이어그램이 작게 보이면 클릭해서 확대 화면으로 볼 수 있습니다.
그래도 복잡하면 다이어그램을 더 작은 단위로 나누고, 표를 함께 사용합니다.
API Key가 노출될까 걱정됨
원칙:
- API Key는 공개 문서에 쓰지 않습니다.
- Node-RED JSON에 직접 넣지 않습니다.
- Git 저장소에 커밋하지 않습니다.
권장 방식:
- 로컬 환경변수
- Node-RED credential 설정
- 로컬 API 프록시 또는 로컬 LLM
마지막 점검 순서
- MQTTX에서 raw
factory/#가 보이는지 확인합니다. - MQTTX에서
dt/factory/#가 보이는지 확인합니다. state/current가 최신 상태인지 확인합니다.rule/result가 발행되는지 확인합니다.- control 토픽이 실제
factory영역으로 발행되는지 확인합니다. - AI 메시지가 필요한 상황에서만 발행되는지 확인합니다.