15주차 ‐ Node‐RED 실습 - gitjs523/SmartDevice2025 GitHub Wiki

1. Node-RED의 개요

(1) Node-RED란?

  • IBM사에서 사물인터넷(IoT)를 위해 만든 프로그래밍 도구.
  • IoT 기기, API(응용 프로그램 인터페이스), 또는 여러 서비스를 시각적으로 쉽게 연결할 수 있음.

(2) Node-RED의 특징

  • 노드(node)를 기본으로 하고 각 노드를 선으로 연결해서 플로우를 만드는 방식

노드: 특정 기능을 수행하는 프로그램 묶음.

  • 오픈 소스 방식으로 수 천개의 노드가 등록되어 있어 다양한 일 수행 가능.
  • IT 기술과 환경이 발전함에 따라 Node-RED의 새로운 노드도 만들어짐. (노드의 확장성)
  • 컨트롤러 구현에 가장 적합한 개발 환경.

로우코드(Low-code) 개발 방식

  • Node-RED는 로우코드 개발 플랫폼. 코드를 적게 작성하고 응용 시스템을 빠르게 만들 수 있는 개발 환경 제공.
  • 소프트웨어 전문가가 아닌 사람도 자신의 전문 지식을 기반으로 응용 시스템 개발에 참여할 수 있게 되었습니다.

이벤트 드리븐 작동 방식

  • Node-RED는 여러 이벤트가 발생하는 노드 여러개를 나열 가능.

(3) 작동 환경

  • 인터넷 브라우저 이용
  • Node-RED는 Node.js 환경에서 작동.
    • Node.js: 크롬의 자바스크립트 런타임 엔진을 브라우저가 아닌 일반적인 컴퓨터에서 작동하도록 한 것.

Node.js를 먼저 설치한 후 Node-RED를 설치.

  • 동적 정보 표현을 위해 자바스크립트 인터프리터 언어 사용.
  • 대부분의 OS(Operating Ststem, 운영체제)에서 작동.

2. Node-RED 실습

(1) Node-RED 실행 기초 실습

  • Node-RED를 실행해보기

실습 과정

  1. Node.js 홈페이지 접속하여 Node.js 다운로드(주소: https://nodejs.org/ko)
  2. 명령 프롬프트(cmd) 실행
  3. 명령 프롬프트에 "npm install -g --unsafe-perm node-red" 입력 후 "node-red" 입력

image

image

  1. 명령 프롬프트에서 받은 url 실행

image

실행 결과

image

(2) inject 노드 실습

  • inject 노드: 주입하다의 의미를 가진 노드. 수동 또는 정기적으로 메시지 객체를 발생시켜 전송.
  • Node-RED를 이용한 실습해보기
  • inject 노드를 이용해 현재 시간을 출력해보기

inject 노드 타임스탬프

  1. 팔레트에서 inject 노드 드래그(드래그 시 timestamp로 바뀜)한 후 debug 노드 드래그
  2. 두 노드를 연결한 후 배포하기 클릭

image

  1. 배포한 후 inject 노드 옆에 버튼을 눌러 실행(이때 debug 노드의 옆에 버튼을 눌러 유효화된 상태여야 함.)

실행 결과(1/3)

image

문자열 메시지 생성

  1. 타임스탬프 노드 더블 클릭
  2. 출력 값의 형식을 string으로 변환

image

  1. 문자열 입력한 후 수정 완료

image

  1. 다시 '배포하기' 버튼을 클릭하여 실행 및 결과 확인

실행 결과(2/3)

  • 우측 아래에 "안녕하세요"가 출력된 것이 결과

image

메시지 자동 생성 설정

  1. 노드 수정에서 반복 항목에서 "지정한 시간간격" 선택 후 수정 완료

image

  1. 다시 '배포하기' 버튼을 클릭하여 실행 및 결과 확인

실행 결과(3/3)

  • 1초 간격으로 결과 값이 나오고 있음

image

(3) 메시지 객체와 debug 노드 실습

  • 메시지 객체(msg): Node-RED의 데이터 전달 기본 단위
  • Debug 노드: 디버그(debug)를 수행하는 노드

디버그: 버그(프로그래밍에 발생하는 오류를 찾고 수정하는 행동

메시지 객체 출력하기

  1. debug 노드 더블 클릭하여 노드 수정 창 열기(inject 노드는 반복 없음으로 수정했음)
  • inject 노드 수정한 정보

image

  1. 출력을 오브젝트로 변경 후 수정 완료

image

image

  1. 배포 후 실행

실행 결과(1/3)

image

메시지 객체 속성 출력하기

  • debug 노드를 이용하여 msg 객체의 각 속성에 대한 값만 출력 가능
  1. inject 노드와 debug 노드를 적절히 수정
  • inject 노드 image

  • debug 노드 image

  1. debug 노드 복사 및 붙여넣기(debug 노드를 3개로 만들기
  2. 붙여넣은 debug 노드 중 하나의 값을 'payload'에서 'topic'으로 수정
  3. 나머지 하나의 값을 '_msgid'로 수정
  4. 배포 후 실행

실행 결과(2/3)

image

debug 노드 비활성화

  • debug 노드 옆에 있는 버튼을 눌러 노드들의 활성 여부를 정할 수 있음.

실행 결과(3/3)

  • debug 노드 3개 중 아래에 있는 3번째 노드만 활성화한 상태.
  • inject 노드의 활성화 버튼을 계속 눌러도 3번째 노드의 결과만 출력됨.

image

(4) function 노드 실습

  • function 노드:
    • JavaScript 언어를 사용하는 함수 블록.
    • 메세지 객체 전달받을 시 실행.
    • 최종적으로 msg 객체를 반환할 수도 안할 수도 있음.

문자열 변경

  1. 팔레트의 '기능' 항목에서 function 노드 드래그하여 배치 후 inject 노드와 debug 노드도 배치
  • inject 노드 image
  1. function 노드에 다음과 같이 입력(함수 언어는 JavaScript로 작성)

image

  1. function 노드를 inject 노드와 debug 노드 사이에 연결하고 배포하여 실행

실행 결과(1/2)

image

덧셈 처리

  • msg 객체에 담긴 숫자를 변경해보기
  1. 새롭게 inject 노드, function 노드, debug 노드 배치
  2. inject 노드의 payload를 숫자로 변경

image

  1. 다음과 같이 function 노드 수정 후 배포하여 실행

image

실행 결과(2/2)

image

  • 추가) inject 노드를 추가로 연결하여 출력할 수 있음.

image