WebSocket 클라이언트
외부 streaming 서버 (ws / wss) 의 endpoint 에 게이트웨이가 클라이언트로 outbound 접속 해 push 되는 메시지를 실시간으로 받아오는 모드입니다.
| 상황 | 어떤 모드를 쓰나요 |
|---|---|
| 외부 IT 시스템이 REST POST 로 값을 보내올 때 | HTTP 푸시 |
| 외부 streaming 서버가 WebSocket 으로 값을 흘려줄 때 | WebSocket 클라이언트 (이 페이지) |
| 사내 PLC 의 값을 직접 읽을 때 | Modbus / OPC-UA 등 |
등록 폼 입력값
| 입력 칸 | 무엇을 적나요 | 예시 |
|---|---|---|
| IP 주소 | WebSocket 서버 호스트 | 192.168.10.99, stream.example.com |
| 포트 | WebSocket 서버 포트 (ws=80, wss=443 표준) | 8765, 443 |
| PATH | endpoint 경로 (기본 /) | /stream/v1 |
| TLS | wss 사용 여부 | false (ws) / true (wss) |
| SUBSCRIBE MESSAGE | 연결 직후 한 번 보낼 메시지 (옵션) | {"op":"subscribe","topic":"line1.tempC"} |
| 수집 주기 | 캐시된 값을 게이트웨이가 읽어가는 주기 (ms) | 1000 |
실제 접속 URL: <scheme>://<host>:<port><PATH> (예: ws://192.168.10.99:8765/stream/v1)
태그의 PLC 주소 표기 — 4-mode JSON
서버가 보내는 메시지가 JSON 인 경우, MQTT / Apache Kafka 와 동일한 4-mode 디코더로 값을 추출합니다.
서버가 다음과 같이 push 한다고 할 때:
{"tempC": 25.7, "humid": 40.2, "running": true, "meta":{"unit":"degC"}}
| 모드 | 태그의 PLC 주소 | 받아오는 값 |
|---|---|---|
| KEY (top-level) | tempC | 25.7 |
| KEY | humid | 40.2 |
| KEY | running | true |
| PATH (JSON Pointer) | :$.meta.unit | degC |
| RAW | _raw_ 또는 :_raw_ (또는 빈 칸) | 메시지 전체 |
| SCALAR | (메시지가 JSON 이 아닐 때) _raw_ | 메시지 그대로 |
WebSocket 은 단일 채널이라 topic 부분이 없습니다 — : 앞부분을 비우거나 그대로 key 만 쓰면 됩니다.
JSON 이 아니거나, 메시지 전체를 그대로 받고 싶으면 _raw_ 또는 빈 칸을 쓰면 됩니다.
자주 쓰는 사례
| 사례 | 어떻게 |
|---|---|
| 클라우드 streaming broker (실시간 시세, 환율, 날씨 등) | 서버가 push 하는 JSON 키 그대로 태그에 등록 |
| ROS 2 / rosbridge_server | rosbridge 의 WebSocket 으로 접속 → topic 메시지 수신 |
| 사내 자체 streaming 게이트웨이 | 보통 평문 ws 8080 / 8765 — tls=false |
| 외부 보안 SaaS (인증서 필요) | wss 443 — tls=true |
| 서버가 subscribe 핸드쉐이크를 요구함 | SUBSCRIBE MESSAGE 에 약속된 payload 입력 |
흔한 문제와 해결
| 증상 | 원인 | 해결 |
|---|---|---|
| 값이 안 들어옴 | 서버가 메시지를 push 안 함 | wscat -c ws://<host>:<port><path> 로 직접 받아보고 콘솔에 줄이 나오는지 확인 |
| 값이 안 들어옴 | subscribe 메시지 미설정 (서버가 요구하는데) | 서버 매뉴얼 확인 후 SUBSCRIBE MESSAGE 등록 |
[WS] connect 실패: timeout | 방화벽 / 포트 / DNS | port 막힘 여부, telnet / nc 로 TCP 연결 가능한지 확인 |
[WS] connect 실패: handshake | path / TLS 설정 오류 | URL <scheme>://<host>:<port><path> 직접 검증 |
| TLS 인증서 오류 | 자체서명 (self-signed) | 운영에서는 정식 인증서 사용 권장. 임시 시 시스템 관리자에게 cacerts 추가 요청 |
| JSON 키별 값이 비어있음 | 메시지 형식이 JSON 이 아님 | 일단 _raw_ 로 받아본 뒤 형식 확인 |