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는 웹 기반의 드래그 앤 드롭 방식의 흐름(flow) 기반 개발 환경을 제공한다. 사용자는 코드를 직접 작성하지 않고도 다양한 노드(nodes)를 연결하여 복잡한 워크플로우를 쉽게 설계할 수 있다는 장점이 있다.
-
노드(Node)와 플로우(Flow): 각 노드는 특정 기능을 수행하는 블록을 말한다. 플로우는 노드를 연결하여 데이터가 흐르는 경로를 정의한다. JSON 포맷으로 저장되며, 쉽게 내보내기 및 가져오기를 할 수 있다
-
확장성: Node-RED는 Node.js로 작성되어 있어, Node.js 생태계의 패키지 를 활용하여 기능을 확장할 수 있다. 사용자 정의 노드 및 플러그인을 통해 기능을 확장할 수 있다.
-
유연성: 다양한 서비스와 디바이스를 손쉽게 연결할 수 있다.
-
커넥터: 다양한 프로토콜과 서비스(API, MQTT, HTTP, WebSocket 등)를 지원하는 노드를 통해 다양한 시스템과 쉽게 통합할 수 있다.
-
활발한 커뮤니티: 많은 사용자와 개발자가 다양한 노드를 공유하고 있어, 필요한 기능을 쉽게 찾을 수 있다.
장점
- 가볍다(라즈베리파이와 같은 작은 컴퓨터에서도 운영 가능)
- 이해하기 쉬운 흐름 기반 프로그래밍 도구
- 이벤트 기반 및 Non-blocking 모델 지원
- JavaScript로 프로그램 가능
- Node-RED 대시보드(UI) 제공
- 자신만의 UI 제작 가능(커스터 마이징)
- 잘 정리된 개발 가이드 제공
- 직접 필요한 노드 제작 가능
기본 사용법
- 브라우저에서 http://localhost:1880 에 접속하여 편집기를 사용한다.
- 편집기에서 노드를 드래그 앤 드롭 하여 배치하고, 연결선을 그어 플로우를 구성 한다.
- 노드의 속성 을 설정하고, 필요에 따라 JavaScript 코드를 작성하여 기능을 정의 한다.
활용 사례
- IoT 솔루션: 센서 데이터 수집 및 처리, 디바이스 제어
- API 통합: 여러 웹 서비스 API를 연결하여 데이터 통합
- 자동화 작업: 주기적인 작업 자동화 및 워크플로우 관리
1.1. Node-RED 구성 요소
-
노드(Nodes): Node-RED의 기본 구성 요소로, 각각 특정 기능 을 수행한다. 다양한 종류의 노드가 존재하며, 입력, 출력, 처리, 소셜, 데이터베이스 등의 기능을 제공한다. 드래그 앤 드롭 방식으로 편집기에서 연결하여 사용한다. 입력 노드 (Input Nodes), 출력 노드 (Output Nodes), 기능 노드 (Function Nodes), 소셜 노드 (Social Nodes), 저장소 노드 (Storage Nodes), 네트워크 노드 (Network Nodes)가 있다.
-
플로우(Flows): 노드들이 연결된 경로 로, 데이터가 흐르는 방향을 정의한다. 플로우는 JSON 형태로 저장되며, 쉽게 내보내기 및 가져오기를 할 수 있다. 이를 통해 복잡한 작업을 시각적으로 설계하고 관리할 수 있다.
-
편집기(Editor): Node-RED의 웹 기반 사용자 인터페이스 로, 노드를 배치하고 플로우를 설계하는 데 사용된다. 브라우저로 접속할 수 있으며 편집기를 통해 노드의 속성을 설정하고, 디버깅 메시지를 확인할 수 있다.
-
런타임(Runtime): Node-RED의 백엔드 부분으로, Node.js 기반에서 동작한다. 플로우를 실행하고, 노드 간의 메시지 전송을 관리한다. 외부 API와의 통신, 데이터베이스 연결 등을 처리한다.
-
메시지(Messages): 노드 간에 전달되는 데이터 단위 이다. 메시지는 JavaScript 객체 형태로, msg 객체로 표현된다. 메시지 객체는 다양한 속성을 가질 수 있으며, 노드의 입력과 출력을 통해 전달된다.
-
대시보드(Dashboard): 웹 기반 대시보드이다. 이를 통해 데이터를 시각화 하고, 사용자 인터페이스를 구축할 수 있다. 다양한 위젯을 제공하여 실시간 데이터 모니터링 및 제어가 가능하다.
-
팔레트(Palette): 노드를 선택하고 관리할 수 있는 인터페이스이다.
2. 실습
2.1. Node-RED 설치
- Node-RED를 설치하기 위해서는 먼저 https://nodejs.org/en 에서 Node.js 를 다운 받고 설치해야 한다.
- 프롬포트 창에 다음과 같이 입력하여 Node-RED를 설치한다.
node -v // node.js 버전 확인
npm install -g --unsafe-perm node-red // node-red 설치
npm install node-red-dashboard // 대쉬보드 설치
node-red // node-red 실행
- "Started flows"가 나타나면 성공이다.
- 브라우저 주소창에 "http://localhost:1880" 를 입력한다. Node-RED는 1880 포트 를 사용한다. 그러면 다음과 같이 Node-RED 환경이 나타난다.
노드 실행 환경에서 대시보드 설치
노드 실행 환경에서도 대시보드를 따로 설치할 수 있다.
- 팔렛트 관리 > 설치 가능한 노드 > "dashboard" 검색
3. 후기
node.js를 코딩에 활용해 본 적은 있지만 Node-RED를 통해 흐름 기반 프로그래밍을 실행하는 것은 흥미롭고 더 이해하기 쉬웠다. 직접 코드를 짜는 것도 좋지만, 이런 흐름 기반 프로그래밍 도구도 목적에 따라 잘 활용할 줄 알아야 한다고 생각한다.