공장 자동화의 세대교체(2)-Node.js 기반의 자동화 샘플

[이 글과 관련된 글]

2025.12.23 - [AI & Software] - 공장 자동화의 세대교체-Node.js와 오픈소스로 만드는 스마트 팩토리 실전 가이드

0. 환경 설정 및 실전 도입 가이드

현업에서 바로 사용할 수 있도록 환경을 세팅하는 방법입니다.

[1단계: Node.js 설치]

  • LTS 버전 권장: 공장 현장에서는 안정성이 최우선입니다. Node.js 공식 홈페이지에서 LTS 버전을 설치하세요.

[2단계: 핵심 도구 설치]

터미널(CMD)에서 아래 명령어를 순차적으로 입력합니다.

# Node-RED 전역 설치
npm install -g --unsafe-perm node-red

# 프로젝트 폴더 생성 및 산업용 라이브러리 설치
mkdir smart-factory && cd smart-factory
npm init -y
npm install node-opcua node-modbus-serial axios

[3단계: 현장 운용 꿀팁 (PM2)]

프로그램이 갑자기 꺼지면 안 되기에, 재부팅 시 자동 실행을 도와주는 PM2 설치가 필수입니다. (Process manager)

npm install -g pm2
pm2 start node-red
pm2 save

1. Node-RED: 대시보드 및 알림 자동화 샘플

Node-RED는 코드를 직접 짜기보다 '노드'라는 블록을 연결하는 방식입니다. 아래는 특정 센서 데이터(온도)가 기준치를 넘었을 때 경고를 보내는 로직의 JSON 샘플입니다.

[코드 샘플 (Flow JSON)]

JSON

[
    { "id": "n1", "type": "inject", "topic": "temp", "payload": "25", "name": "가상 온도 발생" },
    { "id": "n2", "type": "function", "name": "임계값 체크", "func": "if(msg.payload > 30) { return msg; } else { return null; }" },
    { "id": "n3", "type": "debug", "name": "경고 알림", "active": true }
]
  • 작동 원리: 가상의 온도 데이터(25도)가 들어오면 '임계값 체크' 노드에서 30도가 넘는지 확인합니다. 조건이 맞으면 우측 디버그 창에 경고를 출력합니다.

[참고 사이트]

  • 공식 홈페이지: nodered.org
  • GitHub Repository: github.com/node-red/node-red
  • 특징: 수천 개의 라이브러리(Nodes)를 검색하여 설치할 수 있는 생태계가 매우 강력합니다.

2. Node-OPCUA: PLC 데이터 수집 클라이언트 샘플

산업용 표준인 OPC-UA 서버(PLC 등)에 접속하여 특정 태그의 데이터를 읽어오는 가장 기초적인 Node.js 코드입니다.

[코드 샘플 (JavaScript)]

JavaScript

const { OPCUAClient, AttributeIds } = require("node-opcua");

const endpointUrl = "opc.tcp://localhost:4840"; // PLC 또는 서버 주소

async function main() {
    const client = OPCUAClient.create({ endpointMustExist: false });
    await client.connect(endpointUrl);
    const session = await client.createSession();

    // 특정 주소(NodeId)의 데이터 읽기 (예: 온도 센서)
    const dataValue = await session.read({
        nodeId: "ns=1;s=TemperatureSensor",
        attributeId: AttributeIds.Value
    });

    console.log("현재 온도:", dataValue.value.value);

    await session.close();
    await client.disconnect();
}

main();
  • 작동 원리: 지정된 PLC IP주소로 접속하여 TemperatureSensor라는 이름의 변수값을 비동기로 읽어옵니다.

[참고 사이트]


3. 관련 오픈소스 프로젝트 추천 사이트 리스트

위 예제들을 더 깊게 공부하거나 실제 현장에 적용할 때 참고하기 좋은 사이트들입니다.

프로젝트명 주요 용도 관련 URL
Awesome IoT IoT 관련 모든 오픈소스 큐레이션 GitHub 바로가기
Modbus-Serial 구형 장비(Modbus) 통신 라이브러리 GitHub 바로가기
Johnny-Five 로봇 제어 및 아두이노 연동 johnny-five.io

전문가 팁: 처음 시작하신다면 Node-RED를 먼저 설치해서 GUI 환경에서 감을 익히신 후, 복잡한 비즈니스 로직이나 보안이 필요한 시점에 Node-OPCUA나 직접 코딩 방식으로 넘어가는 것을 추천 드립니다.