15주차 ‐ NodeRed - movie-01/SmartDevice GitHub Wiki
15주차 - NodeRed
개요
- NodeRed
- inject 노드
- 메시지 객체와 debug노드
- function 노드
- AWS NodeRed
- 실습
🌀 Node-RED란?
Node-RED는 브라우저 기반의 시각적 프로그래밍 툴로, JavaScript 런타임인 Node.js 위에서 실행된다. 사물인터넷(IoT), API 연동, 데이터 흐름 자동화 등 다양한 응용에 사용되며, **플로우(flow)**라 불리는 블록 연결 방식으로 동작한다.
- 개발 언어: JavaScript (백엔드 Node.js)
c++에 익숙하다면 쉽다.
- 주요 특징:
- 브라우저 기반의 드래그 앤 드롭 방식 UI
- MQTT, HTTP, WebSocket, AWS 등 다양한 노드 제공
- 커스터마이징이 쉬운 Function 노드 제공
⚙️ Node-RED 작동 환경
✅ 1. 필수 소프트웨어 및 사양
구성 요소 | 설명 |
---|---|
Node.js | Node.js v16 이상 권장 (v20까지 안정 지원됨) |
npm | Node.js에 포함된 패키지 매니저, 노드 설치 및 플러그인 설치용 |
OS | Linux, Windows, macOS, Raspberry Pi 등 대부분의 OS 지원 |
메모리 | 최소 256MB (1GB 이상 권장, 특히 Dashboard 사용 시) |
디스크 | 설치 용량은 작지만, 로그 및 플로우 파일 저장 고려 필요 |
💻 2. 개발 환경 기준
환경 요소 | 설정 내용 |
---|---|
IDE | VSCode, WebStorm 등 JS 친화적인 IDE 권장 |
실행 방식 | node-red 명령으로 로컬 개발 서버 실행 |
접속 주소 | 기본 포트는 http://localhost:1880 |
플로우 저장 | ~/.node-red/flows_*.json, 자동 백업 기능 포함 |
패키지 추가 | npm install node-red-contrib-xxx 형식으로 추가 가능 |
🧩 주요 노드 구성 요소
1️⃣ Inject 노드 (inject)
Inject 노드는 플로우 실행의 시작점 역할을 하며, 메시지를 수동 또는 주기적으로 **강제로 주입(inject)**할 수 있는 노드다.
- 용도: 테스트용 메시지 입력, 일정 주기 데이터 흐름 시작 등
- 설정 예시:
- payload: 문자열, 숫자, JSON 등 다양한 형식 지정 가능
- timestamp: 현재 시간 주입
- 활용 예시
[inject: timestamp] → [function: 데이터 가공] → [debug: 출력]
2️⃣ 메시지 객체 (msg)
Node-RED에서는 각 노드를 통과하는 데이터 단위를 메시지 객체 msg로 정의한다. JavaScript 객체 형태이며, 기본적으로 다음과 같은 속성을 가진다
속성 | 설명 |
---|---|
msg.payload | 핵심 데이터 내용 |
msg.topic | 메시지 주제 또는 분류 키워드 |
msg._msgid | 내부 메시지 식별자 (자동 생성) |
예시:
{
"payload": "Hello, world!",
"topic": "greeting"
}
3️⃣ Debug 노드 (debug)
Debug 노드는 msg 객체의 내용을 개발자 콘솔 또는 UI 화면에 출력하는 용도로 사용된다.
- 출력 설정:
- 전체 메시지 출력
- 특정 속성 (예: msg.payload, msg.topic)만 출력 가능
- 실습 팁:
- 문제 발생 시 해당 지점 앞뒤로 debug 노드를 배치하여 메시지 흐름 추적
4️⃣ Function 노드 (function)
Function 노드는 JavaScript 코드로 msg 객체를 조작하거나, 조건 분기, 필터링, 계산 등을 수행할 수 있다.
- 입력: msg 객체
- 출력: 수정된 msg 객체 또는 여러 메시지 반환 가능
- 코드 예시:
msg.payload = msg.payload.toUpperCase();
return msg;
- 복수 출력 포트 예시:
if (msg.payload > 100) {
return [msg, null]; // 1번 포트로 출력
} else {
return [null, msg]; // 2번 포트로 출력
}
☁️ AWS와 Node-RED 연동
1. AWS 연동 개요
Node-RED는 AWS IoT Core, Lambda, S3, DynamoDB 등의 서비스와 플로우를 통해 연동할 수 있다. 특히 MQTT 프로토콜을 통해 IoT 디바이스 데이터를 손쉽게 처리할 수 있다.
2. 대표적인 AWS 노드 종류
노드 이름 | 설명 |
---|---|
aws-iot-device | AWS IoT Core 연결 (MQTT Publish/Subscribe) |
aws-lambda | Lambda 함수 호출 |
aws-s3 | S3 버킷에 파일 업로드/다운로드 |
aws-dynamodb | DynamoDB 데이터 쓰기/읽기 |
3. 연동 예시 플로우
[inject: 센서 데이터]
→ [function: JSON 변환]
→ [aws-iot-device: Publish]
→ AWS IoT Core
4. 인증 및 보안
- IAM 사용자 인증 정보 또는 Cognito 사용
- AWS IoT 연결 시 Thing 등록, 정책 생성, X.509 인증서 등록 필요
- Lambda 사용 시 권한 정책 부여 필요
실습
- "https://nodejs.org/en/" Node.js 홈페이지에 들어가서 다운로드 및 설치
- 윈도우 키 누르고 "cmd" 입력하여 관리자 권한으로 실행
- "npm install -g --unsafe-perm node-red" 입력
- "node-red" 입력 후 URL 실습 페이지 실행
inject 노드
메시지 객체 출력
메시지 객체 속성 출력하기
debug 노드 비활성화
function 노드 1
function 노드 2