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를 실행해보기
실습 과정
- Node.js 홈페이지 접속하여 Node.js 다운로드(주소: https://nodejs.org/ko)
- 명령 프롬프트(cmd) 실행
- 명령 프롬프트에 "npm install -g --unsafe-perm node-red" 입력 후 "node-red" 입력
- 명령 프롬프트에서 받은 url 실행
실행 결과
(2) inject 노드 실습
- inject 노드: 주입하다의 의미를 가진 노드. 수동 또는 정기적으로 메시지 객체를 발생시켜 전송.
- Node-RED를 이용한 실습해보기
- inject 노드를 이용해 현재 시간을 출력해보기
inject 노드 타임스탬프
- 팔레트에서 inject 노드 드래그(드래그 시 timestamp로 바뀜)한 후 debug 노드 드래그
- 두 노드를 연결한 후 배포하기 클릭
- 배포한 후 inject 노드 옆에 버튼을 눌러 실행(이때 debug 노드의 옆에 버튼을 눌러 유효화된 상태여야 함.)
실행 결과(1/3)
문자열 메시지 생성
- 타임스탬프 노드 더블 클릭
- 출력 값의 형식을 string으로 변환
- 문자열 입력한 후 수정 완료
- 다시 '배포하기' 버튼을 클릭하여 실행 및 결과 확인
실행 결과(2/3)
- 우측 아래에 "안녕하세요"가 출력된 것이 결과
메시지 자동 생성 설정
- 노드 수정에서 반복 항목에서 "지정한 시간간격" 선택 후 수정 완료
- 다시 '배포하기' 버튼을 클릭하여 실행 및 결과 확인
실행 결과(3/3)
- 1초 간격으로 결과 값이 나오고 있음
(3) 메시지 객체와 debug 노드 실습
- 메시지 객체(msg): Node-RED의 데이터 전달 기본 단위
- Debug 노드: 디버그(debug)를 수행하는 노드
디버그: 버그(프로그래밍에 발생하는 오류를 찾고 수정하는 행동
메시지 객체 출력하기
- debug 노드 더블 클릭하여 노드 수정 창 열기(inject 노드는 반복 없음으로 수정했음)
- inject 노드 수정한 정보
- 출력을 오브젝트로 변경 후 수정 완료
- 배포 후 실행
실행 결과(1/3)
메시지 객체 속성 출력하기
- debug 노드를 이용하여 msg 객체의 각 속성에 대한 값만 출력 가능
- inject 노드와 debug 노드를 적절히 수정
-
inject 노드
-
debug 노드
- debug 노드 복사 및 붙여넣기(debug 노드를 3개로 만들기
- 붙여넣은 debug 노드 중 하나의 값을 'payload'에서 'topic'으로 수정
- 나머지 하나의 값을 '_msgid'로 수정
- 배포 후 실행
실행 결과(2/3)
debug 노드 비활성화
- debug 노드 옆에 있는 버튼을 눌러 노드들의 활성 여부를 정할 수 있음.
실행 결과(3/3)
- debug 노드 3개 중 아래에 있는 3번째 노드만 활성화한 상태.
- inject 노드의 활성화 버튼을 계속 눌러도 3번째 노드의 결과만 출력됨.
(4) function 노드 실습
- function 노드:
- JavaScript 언어를 사용하는 함수 블록.
- 메세지 객체 전달받을 시 실행.
- 최종적으로 msg 객체를 반환할 수도 안할 수도 있음.
문자열 변경
- 팔레트의 '기능' 항목에서 function 노드 드래그하여 배치 후 inject 노드와 debug 노드도 배치
- inject 노드
- function 노드에 다음과 같이 입력(함수 언어는 JavaScript로 작성)
- function 노드를 inject 노드와 debug 노드 사이에 연결하고 배포하여 실행
실행 결과(1/2)
덧셈 처리
- msg 객체에 담긴 숫자를 변경해보기
- 새롭게 inject 노드, function 노드, debug 노드 배치
- inject 노드의 payload를 숫자로 변경
- 다음과 같이 function 노드 수정 후 배포하여 실행
실행 결과(2/2)
- 추가) inject 노드를 추가로 연결하여 출력할 수 있음.