프로그램 (PHP,Python)

Node-RED로 시작하는 IoT 앱 개발: 설치부터 보안까지 종합 가이드

날으는물고기 2024. 11. 13. 00:17

Node-RED란 무엇인가?

Node-RED는 오픈소스 시각적 프로그래밍 도구로, 특히 사물 인터넷(IoT) 애플리케이션 개발에 최적화되어 있습니다. 웹 기반의 플로우 편집기를 통해 다양한 노드(Node)를 드래그 앤 드롭하여 손쉽게 데이터 흐름을 설계할 수 있습니다. 이를 통해 데이터 수집, 처리, 분석 및 시각화를 효율적으로 수행할 수 있습니다.


Node-RED 설치 및 설정

1. Node.js 설치

Node-RED는 Node.js 환경에서 실행되므로, Node.js를 설치해야 합니다. LTS(Long Term Support) 버전을 권장합니다.

 

Windows

  • Node.js 공식 사이트에서 Windows 설치 프로그램을 다운로드하여 설치합니다.

 

macOS

  • Node.js 공식 사이트에서 macOS 설치 프로그램을 다운로드하여 설치합니다.
  • 또는 Homebrew를 사용하는 경우: brew install node

 

Linux (Ubuntu 예시)

# Node.js 14.x 버전 설치 스크립트 추가
curl -sL https://deb.nodesource.com/setup_14.x | sudo -E bash -

# Node.js 설치
sudo apt-get install -y nodejs

2. Node-RED 설치

Node.js 설치 후, npm(Node Package Manager)을 사용하여 Node-RED를 글로벌로 설치합니다.

sudo npm install -g --unsafe-perm node-red
  • -g 옵션은 전역 설치를 의미하며, --unsafe-perm은 루트 권한으로 설치 시 필요한 옵션입니다.

3. Node-RED 실행

설치 완료 후, 다음 명령어로 Node-RED를 실행합니다.

node-red
  • 기본적으로 로컬 호스트의 1880 포트에서 실행됩니다.
  • 브라우저에서 http://localhost:1880에 접속하여 Node-RED 편집기에 접근할 수 있습니다.

Node-RED 기본 사용법

플로우 만들기

  1. 노드 추가: 좌측 패널에서 원하는 노드를 작업 영역으로 드래그 앤 드롭합니다.
  2. 노드 연결: 노드의 출력 포트와 입력 포트를 연결하여 데이터 흐름을 정의합니다.
  3. 노드 설정: 노드를 더블 클릭하여 상세 설정을 구성합니다.

노드 구성 예시

  • Inject 노드: 일정한 간격으로 메시지를 생성하거나 수동으로 트리거할 수 있습니다.
  • Debug 노드: 메시지의 내용을 디버그 패널에 출력하여 플로우를 확인합니다.
  • MQTT 노드: MQTT 브로커와 연결하여 토픽을 구독하거나 메시지를 발행합니다.

플로우 배포

  • 작업이 완료되면 상단의 Deploy 버튼을 클릭하여 플로우를 실행 상태로 배포합니다.

예제: HTTP 요청을 받아 JSON 데이터 반환하기

Node-RED를 사용하여 간단한 웹 API를 구축합니다. HTTP 요청을 받아 JSON 형태의 데이터를 반환하는 예제입니다.

1. HTTP 입력 노드 추가

  • input 카테고리에서 http in 노드를 작업 영역으로 드래그합니다.
  • 노드를 더블 클릭하여 다음과 같이 설정합니다.
    • Method: GET
    • URL: /get-data

2. 함수 노드 추가 및 설정

  • function 카테고리에서 function 노드를 추가합니다.
  • 노드를 더블 클릭하고 아래 코드를 입력합니다.
    msg.payload = {
        message: "Hello, Node-RED!",
        timestamp: Date.now()
    };
    return msg;
    • msg.payload에 반환할 JSON 데이터를 정의합니다.

3. HTTP 응답 노드 추가

  • output 카테고리에서 http response 노드를 추가합니다.
  • 별도의 설정은 필요하지 않습니다.

4. 노드 연결

  • http in 노드 ➔ function 노드 ➔ http response 노드 순서로 연결합니다.

5. 플로우 배포

  • 상단의 Deploy 버튼을 클릭하여 플로우를 배포합니다.

6. 테스트

  • 브라우저에서 http://localhost:1880/get-data에 접속합니다.
  • 아래와 같은 JSON 응답을 확인할 수 있습니다.
    {
        "message": "Hello, Node-RED!",
        "timestamp": 1633072800000
    }

보안 가이드 및 점검 포인트

Node-RED는 강력한 기능을 제공하지만, 기본 설정으로는 보안이 취약할 수 있습니다. 안전한 운영을 위해 다음의 보안 가이드라인을 준수하시기 바랍니다.

1. 인증 및 인가 설정

  • 사용자 인증 활성화: settings.js 파일에서 adminAuth 옵션을 설정하여 로그인 기능을 활성화합니다.
    adminAuth: {
        type: "credentials",
        users: [{
            username: "admin",
            password: "$2b$08$VhE...hashedpassword...",
            permissions: "*"
        }]
    }
    • 비밀번호는 node-red-admin hash-pw 명령어로 해시화합니다.

2. HTTPS 사용

  • SSL/TLS 인증서 설정: settings.js 파일에서 https 옵션을 설정하여 HTTPS를 활성화합니다.
    https: {
        key: fs.readFileSync('privatekey.pem'),
        cert: fs.readFileSync('certificate.pem')
    }
    • Let’s Encrypt 등에서 인증서를 발급받아 사용합니다.

3. 노드 및 Node-RED 업데이트

  • 정기 업데이트: 보안 패치를 위해 Node-RED와 사용 중인 노드를 정기적으로 업데이트합니다.
    sudo npm update -g --unsafe-perm node-red

4. 사용하지 않는 노드 제거

  • 불필요한 노드 삭제: 공격 표면을 줄이기 위해 사용하지 않는 노드를 제거합니다.
    cd ~/.node-red
    npm uninstall node-red-node-example

5. 환경 설정

  • 방화벽 구성: Node-RED가 동작하는 서버의 포트에 대한 방화벽을 설정하여 불필요한 접근을 차단합니다.
  • VPN 사용: 외부에서 접근이 필요한 경우 VPN을 통해 안전하게 연결합니다.

Node-RED는 IoT 애플리케이션 개발과 데이터 처리에 강력한 기능을 제공하는 유용한 도구입니다. 이 가이드를 통해 설치부터 기본 사용법, 그리고 보안 설정까지 학습하셨을 것입니다. 올바른 보안 설정을 통해 안전하고 효율적인 Node-RED 환경을 구축해 보시기 바랍니다.

 

추가 자료

728x90