9주차_Node‐RED - sookite22/SmartDivice_24 GitHub Wiki

목차

  • Node-RED
    • Node-RED 구성 요소
  • 실습
    • Node-RED 설치
  • 후기

1. Node-RED란?

시각적 프로그래밍 을 통해 IoT, 웹 서비스, 데이터베이스 등의 다양한 시스템을 연결하고 자동화할 수 있는 흐 기반의 프로그래밍 도구(Flow-Based Programming, FBP) 이다. IoT 및 다양한 서비스 통합 작업을 간편하게 수행할 수 있는 강력한 도구로, 비전문가도 쉽게 접근하여 복잡한 시스템을 설계할 수 있도록 도와준다.

IBM에 의해 개발되었으며, 오픈 소스 프로젝트로 유지 관리되고 있다. 주로 IoT(사물 인터넷) 애플리케이션을 개발하고, 다양한 서비스 및 디바이스를 통합하는 데 사용된다.

node-red_output-2722x1080

주요 특징

  1. 비주얼 프로그래밍 인터페이스: Node-RED는 웹 기반의 드래그 앤 드롭 방식의 흐름(flow) 기반 개발 환경을 제공한다. 사용자는 코드를 직접 작성하지 않고도 다양한 노드(nodes)를 연결하여 복잡한 워크플로우를 쉽게 설계할 수 있다는 장점이 있다.

  2. 노드(Node)와 플로우(Flow): 각 노드는 특정 기능을 수행하는 블록을 말한다. 플로우는 노드를 연결하여 데이터가 흐르는 경로를 정의한다. JSON 포맷으로 저장되며, 쉽게 내보내기 및 가져오기를 할 수 있다

  3. 확장성: Node-RED는 Node.js로 작성되어 있어, Node.js 생태계의 패키지 를 활용하여 기능을 확장할 수 있다. 사용자 정의 노드 및 플러그인을 통해 기능을 확장할 수 있다.

  4. 유연성: 다양한 서비스와 디바이스를 손쉽게 연결할 수 있다.

  5. 커넥터: 다양한 프로토콜과 서비스(API, MQTT, HTTP, WebSocket 등)를 지원하는 노드를 통해 다양한 시스템과 쉽게 통합할 수 있다.

  6. 활발한 커뮤니티: 많은 사용자와 개발자가 다양한 노드를 공유하고 있어, 필요한 기능을 쉽게 찾을 수 있다.

장점

  1. 가볍다(라즈베리파이와 같은 작은 컴퓨터에서도 운영 가능)
  2. 이해하기 쉬운 흐름 기반 프로그래밍 도구
  3. 이벤트 기반 및 Non-blocking 모델 지원
  4. JavaScript로 프로그램 가능
  5. Node-RED 대시보드(UI) 제공
  6. 자신만의 UI 제작 가능(커스터 마이징)
  7. 잘 정리된 개발 가이드 제공
  8. 직접 필요한 노드 제작 가능

기본 사용법

  1. 브라우저에서 http://localhost:1880 에 접속하여 편집기를 사용한다.
  2. 편집기에서 노드를 드래그 앤 드롭 하여 배치하고, 연결선을 그어 플로우를 구성 한다.
  3. 노드의 속성 을 설정하고, 필요에 따라 JavaScript 코드를 작성하여 기능을 정의 한다.

활용 사례

  • IoT 솔루션: 센서 데이터 수집 및 처리, 디바이스 제어
  • API 통합: 여러 웹 서비스 API를 연결하여 데이터 통합
  • 자동화 작업: 주기적인 작업 자동화 및 워크플로우 관리

1.1. Node-RED 구성 요소

스크린샷 2024-06-24 173904

  1. 노드(Nodes): Node-RED의 기본 구성 요소로, 각각 특정 기능 을 수행한다. 다양한 종류의 노드가 존재하며, 입력, 출력, 처리, 소셜, 데이터베이스 등의 기능을 제공한다. 드래그 앤 드롭 방식으로 편집기에서 연결하여 사용한다. 입력 노드 (Input Nodes), 출력 노드 (Output Nodes), 기능 노드 (Function Nodes), 소셜 노드 (Social Nodes), 저장소 노드 (Storage Nodes), 네트워크 노드 (Network Nodes)가 있다.

  2. 플로우(Flows): 노드들이 연결된 경로 로, 데이터가 흐르는 방향을 정의한다. 플로우는 JSON 형태로 저장되며, 쉽게 내보내기 및 가져오기를 할 수 있다. 이를 통해 복잡한 작업을 시각적으로 설계하고 관리할 수 있다.

  3. 편집기(Editor): Node-RED의 웹 기반 사용자 인터페이스 로, 노드를 배치하고 플로우를 설계하는 데 사용된다. 브라우저로 접속할 수 있으며 편집기를 통해 노드의 속성을 설정하고, 디버깅 메시지를 확인할 수 있다.

  4. 런타임(Runtime): Node-RED의 백엔드 부분으로, Node.js 기반에서 동작한다. 플로우를 실행하고, 노드 간의 메시지 전송을 관리한다. 외부 API와의 통신, 데이터베이스 연결 등을 처리한다.

  5. 메시지(Messages): 노드 간에 전달되는 데이터 단위 이다. 메시지는 JavaScript 객체 형태로, msg 객체로 표현된다. 메시지 객체는 다양한 속성을 가질 수 있으며, 노드의 입력과 출력을 통해 전달된다.

  6. 대시보드(Dashboard): 웹 기반 대시보드이다. 이를 통해 데이터를 시각화 하고, 사용자 인터페이스를 구축할 수 있다. 다양한 위젯을 제공하여 실시간 데이터 모니터링 및 제어가 가능하다.

  7. 팔레트(Palette): 노드를 선택하고 관리할 수 있는 인터페이스이다.

2. 실습

2.1. Node-RED 설치

  1. Node-RED를 설치하기 위해서는 먼저 https://nodejs.org/en 에서 Node.js 를 다운 받고 설치해야 한다.

스크린샷 2024-06-24 161159

  1. 프롬포트 창에 다음과 같이 입력하여 Node-RED를 설치한다.
node -v // node.js 버전 확인
npm install -g --unsafe-perm node-red // node-red 설치
npm install node-red-dashboard // 대쉬보드 설치
node-red // node-red 실행

스크린샷 2024-06-23 041310 스크린샷 2024-06-23 041342

  • "Started flows"가 나타나면 성공이다.
  1. 브라우저 주소창에 "http://localhost:1880" 를 입력한다. Node-RED는 1880 포트 를 사용한다. 그러면 다음과 같이 Node-RED 환경이 나타난다.

스크린샷 2024-06-23 042004

노드 실행 환경에서 대시보드 설치

노드 실행 환경에서도 대시보드를 따로 설치할 수 있다.

  • 팔렛트 관리 > 설치 가능한 노드 > "dashboard" 검색

스크린샷 2024-06-24 162248 스크린샷 2024-06-24 162427 스크린샷 2024-06-24 162521

3. 후기

node.js를 코딩에 활용해 본 적은 있지만 Node-RED를 통해 흐름 기반 프로그래밍을 실행하는 것은 흥미롭고 더 이해하기 쉬웠다. 직접 코드를 짜는 것도 좋지만, 이런 흐름 기반 프로그래밍 도구도 목적에 따라 잘 활용할 줄 알아야 한다고 생각한다.