1. 문제 상황
Monolith v2 서버를 개인 시놀로지 나스에서 컨테이너 매니저를 통해 구동하려고 합니다. gemini를 사용해 현재 웹 서버는 열려있는 상태로 외부에서도 접속이 가능한 상태입니다. 그러나 Monolith v2 기판과 통신이 되지 않아 데이터를 받아오지 않습니다. 연결 해결에 관한 질문입니다.
- 서버와 보드가 연결하기 위한 포트가 지정되어 있나요?
- 웹서버에서 오른쪽 아래 뜨는 경고가 Authentication Failed, Server Connection Closed 두가지로 뜨는데 (동시에 뜨진 않음) 어떤 상황에서 경고가 발생하는건가요?
1-1. 데이터
웹서버 주소: http://miribi.synology.me:3926
외부 포트 : 3926
YAML : 첨부
2. 재현 방법
직접 배포 가이드를 통해 monolith.git 파일을 pc에 저장한 후 빌드를 마친 뒤 나온 파일을 시놀로지 나스 상에 올려 서버를 구성했습니다.
Miribi_monolith_YAML.txt (1.8 KB)
Gemini subscription이 있으면 로컬에 프로젝트를 clone하고 gemini-cli에서 질문해 보세요.
아래는 Claude Opus 생성 답변이고 실제와 일치합니다.
❯ 서버와 보드가 연결하기 위한 포트가 지정되어 있나요?
웹서버에서 오른쪽 아래 뜨는 경고가 Authentication Failed, Server Connection Closed 두가지로 뜨는데 (동시에 뜨진 않음) 어떤 상황에서 경고가 발생하는건가요?
● 2 Explore agents finished (ctrl+o to expand)
├─ Find server-board connection port · 21 tool uses · 49.2k tokens
│ ⎿ Done
└─ Find auth/connection error warnings · 34 tool uses · 36.8k tokens
⎿ Done
● 1. 서버-보드 연결 포트
MQTT over WebSocket Secure(WSS) 프로토콜을 사용하며, 외부 포트는 443 (HTTPS) 으로 고정되어 있습니다.
┌─────────────────────────┬───────────┬────────────┬─────────────────────────────────────────┐
│ 구간 │ 프로토콜 │ 포트 │ 비고 │
├─────────────────────────┼───────────┼────────────┼─────────────────────────────────────────┤
│ 펌웨어 → 서버 │ WSS │ 443 │ device/firmware/main/network/mqtt.c:369 │
├─────────────────────────┼───────────┼────────────┼─────────────────────────────────────────┤
│ 웹 클라이언트 → 서버 │ WSS │ 443 │ web/src/service/mqtt.js:34 │
├─────────────────────────┼───────────┼────────────┼─────────────────────────────────────────┤
│ Mosquitto 브로커 (내부) │ WebSocket │ 9001 │ server/config/mosquitto.conf │
├─────────────────────────┼───────────┼────────────┼─────────────────────────────────────────┤
│ Traefik 리버스 프록시 │ HTTPS │ 443 → 9001 │ server/docker-compose.yml │
└─────────────────────────┴───────────┴────────────┴─────────────────────────────────────────┘
외부에서는 모두 443 포트로 접속하고, Traefik이 WebSocket upgrade 헤더를 감지하여 내부 Mosquitto 9001 포트로 라우팅합니다.
---
2. 경고 메시지 발생 조건
두 경고 모두 web/src/service/mqtt.js에서 발생합니다.
"Authentication Failed"
- 발생 위치: mqtt.js:53 — MQTT error 이벤트 핸들러
- 조건: Mosquitto 브로커가 인증을 거부할 때 (Not authorized 에러)
- 원인: server/name(사용자명) 또는 server/key(비밀번호)가 서버의 mosquitto.passwd에 등록된 값과 불일치
- 참고: 세션당 1회만 표시됨 (first_auth_fail 플래그로 제어)
"Server Connection Closed"
- 발생 위치: mqtt.js:62 — MQTT close 이벤트 핸들러
- 조건: 이전에 연결이 정상 수립된 상태(connection.server.value !== 'Offline')에서 연결이 끊어질 때
- 원인:
- 네트워크 단절
- 브로커 측 연결 종료
- WebSocket 통신 장애
- keepalive 타임아웃 (10초 간격)
즉, 인증 정보가 틀리면 "Authentication Failed"가, 인증은 성공했지만 이후 연결이 끊기면 "Server Connection Closed"가 표시됩니다.
시놀로지의 443 포트 점유 문제로 공유기를 시놀로지 네트워크 앞단에 배치하여 포트포워딩을 통해 해결했습니다.
또 새 점퍼선으로 교체해서 펌웨어를 다시 올렸습니다. 오래된 점퍼선으로 펌웨어를 올린 보드는 폄웨어 업로드가 완료 되었다고 표시되더라도 정상 작동하지 않았습니다. 통신 문제가 있는 듯 합니다. 보드 2개를 교차로 비교해 본 결과 새 점퍼선으로 한 경우에만 정상적으로 작동했습니다.
1개의 좋아요