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 사용 시 권한 정책 부여 필요

실습

  1. "https://nodejs.org/en/" Node.js 홈페이지에 들어가서 다운로드 및 설치 image

  1. 윈도우 키 누르고 "cmd" 입력하여 관리자 권한으로 실행
  2. "npm install -g --unsafe-perm node-red" 입력
  3. "node-red" 입력 후 URL 실습 페이지 실행

image

image


inject 노드

image image image


메시지 객체 출력

image image image


메시지 객체 속성 출력하기

image image image image


debug 노드 비활성화

image


function 노드 1

image image image


function 노드 2

image image image