스마트디바이스실습 ‐ 15주차 - jiho0419/SmartDevice_2025-1 GitHub Wiki
💠 비주얼 프로그래밍 도구 로서, 브라우저 기반의 플로우(flow) 편집기를 통해 다양한 장치, 서비스, API 등을 연결 하여 워크플로우를 구성할 수 있도록 설계되있다.
💠 IBM에 의해 개발되었고 현재는 JS Foundation의 오픈소스 프로젝트로 관리되고 있다.
항목 | 설명 |
---|---|
플로우 기반 개발 | 코딩 없이 시각적으로 노드를 연결하여 동작 흐름을 설계 |
Node.js 기반 | JavaScript 런타임(Node.js)을 사용하여 가볍고 유연함 |
웹 기반 인터페이스 | 브라우저를 통해 언제 어디서든 편집 및 배포 가능 |
확장 가능성 | 수천 개의 커뮤니티 플러그인 및 사용자 정의 노드 지원 |
다양한 통신 프로토콜 지원 | MQTT, HTTP, WebSocket, Modbus 등 다양한 통신 방식 사용 가능 |
🔸 기능 단위 블록 (예: 입력 노드, 처리 노드, 출력 노드)
🔸 예: inject
, function
, http request
, mqtt in
, debug
등
🔸 노드들을 연결한 흐름 단위
🔸 하나의 서비스 또는 작업 단위로 구성
🔸 플로우를 따라 전달되는 데이터 객체
🔸 각 노드에서는 msg.payload
, msg.topic
등을 이용하여 데이터를 처리
분야 | 활용 예시 |
---|---|
스마트 홈 | IoT 센서(MQTT) 데이터 수집, 자동 조명/에어컨 제어 |
산업 자동화 | 설비 상태 모니터링, 알람 시스템, 로깅 |
API 통합 | 외부 API 연동 (RESTful API, Webhook) |
데이터 시각화 | Grafana, Dashboard 노드를 이용한 실시간 데이터 시각화 |
AI / ML 연동 | TensorFlow, Python 노드와 연계하여 예측 분석 |
🔸 비개발자도 사용 가능 한 직관적인 UI
🔸 Node.js 기반으로 다양한 JS 라이브러리 사용 가능
🔸 IoT와 API 통합에 특화된 구조
🔸 커뮤니티가 활발하고 자료가 풍부
🔸 복잡한 로직 처리에는 한계 (JS로 커버 가능하나 유지보수 어려움)
🔸 대규모 시스템에는 구조적 설계가 부족할 수 있음
🔸 성능 면에서는 Python, C/C++에 비해 제한적
+-------------------+
| Web Editor | ← 사용자 인터페이스 (브라우저)
+-------------------+
|
v
+-------------------+ +-------------------+
| Flow Engine | <----> / Runtime /
| (Node Execution) | | (Node.js 기반) |
+-------------------+ +-------------------+
|
v
+-----------------------------+
| 외부 장치/서비스/API |
+-----------------------------+
노드 | 설명 |
---|---|
inject |
입력 트리거 생성 (주기적 실행 등) |
debug |
디버깅 메시지 출력 |
function |
JavaScript 코드 처리 가능 |
http in /http response
|
RESTful API 구성 |
mqtt in /mqtt out
|
MQTT 브로커 연동 |
🔸 node.js
🔸 https://nodejs.org/ko
접속 > 맞는 사양으로 다운 및 설치

🔸 실습 페이지 실행
🔸 cmd
접속 > npm install -g --unsafe-perm node-red
입력 > node-red
입력
🔸 나온 자신의 url 실행 > Node-Red
실습 페이지에서 실습 진행


🔸 inject
debug
가져와 연결

🔸 inject 노드 설정
🔸 이름 타입스크립트
변경
🔸 msg.payload YYYY-MM-DDTHH:mm:ss.sssZ
로 변경 > 완료
클릭

🔸 디버그에 현재 년도 월 일 시간 분 초가 표기됨

🔸 inject
debug
가져와 연결

🔸 inject 노드 설정
🔸 이름 인사
변경
🔸 msg.payload string
변경 > 안녕하세요
입력
🔸 2번째 msg topic
변경 > 완료
클릭

🔸 문자(string)형식으로 안녕하세요 가 출력되는 것을 확인

🔸 inject
debug
가져와 연결

🔸 inject 노드 설정
🔸 이름 인사설명
변경
🔸 msg.payload string
변경 > 인사페이로드
입력
🔸 2번째 msg topic
변경 > 인사토픽
입력 > 완료
클릭

🔸 debug 노드 설정
🔸 대상
> msg오브젝트 전체
변경 > 완료
클릭

🔸 msg오브젝트 전체가 출력되는 것을 확인

🔸 inject
debug
가져와 연결

🔸 inject 노드 설정
🔸 이름 인사말을 전하는 노드입니다
변경
🔸 msg.payload string
변경 > 안녕하세요
입력
🔸 2번째 msg topic
변경 > 인사토픽
입력 > 완료
클릭

🔸 debug 1 노드 설정
🔸 대상
> msg오브젝트 전체
변경 > 완료
클릭
🔸 debug 1
에 연결된 출력 값 > msg오브젝트 전체가 출력됨


🔸 debug 2 노드 설정
🔸 대상
> msg.
설정 > topic
입력 > 완료
클릭
🔸 debug 2
에 연결된 출력 값 > topic만 출력 됨


🔸 debug 3 노드 설정
🔸 대상
> msg.
설정 > _msgid
입력 > 완료
클릭
🔸 debug 3
에 연결된 출력 값 > _msgid만 출력 됨


🔸 각 debug에 설정에 맞게 출력되는 것을 확인

🔸 inject
debug
function
가져와 연결

🔸 inject 노드 설정
🔸 이름 반말로 인사하는 노드
변경
🔸 msg.payload string
변경 > 안녕
입력
🔸 2번째 msg topic
변경 > 반말
입력 > 완료
클릭

🔸 function 노드 설정
🔸 이름 존댓말로 변환
입력
🔸 msg.payload = msg.payload+"하세요!"
코드 추가 > 완료
클릭

🔸 inject의 msg 에서 function의 코드 msg가 합쳐져 안녕하세요!
가 정상적으로 출력됨

🔸 inject
debug
function
가져와 연결

🔸 inject 노드 설정
🔸 이름 `` > 입력하지 않음
🔸 msg.payload number
변경 > `3` 입력
🔸 2번째 msg `topic` 변경 > `숫자 메시지` 입력 > `완료` 클릭

🔸 function 노드 설정
🔸 이름 더하기 3
입력
🔸 msg.payload = msg.payload + 3
코드 추가 > 완료
클릭

🔸 inject의 msg 에서 function의 코드 msg가 합쳐져 출력됨
string
설정할 경우 > string
+ number
> string
으로 출력 > 33
💡 intect의 msg number
설정할 경우 > number
+ number
> number
으로 출력 > 6
