debug 노드를 두지 않고 플로우를 debug하는 방법

이 기사는 Node-RED Advent Calendar 2019 여섯째 날 기사입니다. .

본 기사에서는, Node-RED Desktop Ver.1.0 에 추가된 올 디버그 기능을,
Node-RED Desktop 이외에도 사용하는 방법을 설명합니다.

이전 쓰기: 표준 디버깅 기능의 과제



Node-RED에서 플로우를 디버깅하려면 debug 노드를 플로우에 두어야 합니다.
그러나 이것에는 다음과 같은 문제가 있습니다.
  • 대상 흐름을 직접 수정해야하며 의도하지 않게 원래 흐름을 손상시킬 수 있습니다.

  • 디버그 노드가 많을수록 흐름의 이해가 쉬워집니다
  • 레이아웃 조정 및 사용 후 삭제도 번거로움


  • 올 디버그 기능이란?



    debug 노드를 두지 않고 debug가 할 수 있는 기능입니다.

    구체적으로는
    debug 노드의 유무에 관계없이,
    모든 노드의 출력을 통과하는 msg(그림의 빨간색 원을 통과하는 msg)가 디버그 창으로 출력될 수 있습니다.



    이것은 모든 노드에 debug 노드를 매달린 것과 같은 상태입니다.
    즉, 올 디버그 기능을 사용하면 더 이상 개별적으로 debug 노드를 두지 않아도 됩니다.

    기능 추가는 단 22줄에



    Node-RED 시작 파일 ( node_modules/node-red/red.js )에 22 줄을 추가하기 만하면됩니다. ( ver.1.0.3 에서 해설하고 있습니다)

    아래에서는 절차를 설명합니다.

    0. node-red 설치
    $ mkdir sagyou
    $ cd sagyou
    $ npm install node-red
    

    1. red.js 파일을 red2.js에 복사하고 red2.js를 편집합니다.
    $ cp node_modules/node-red/red.js node_modules/node-red/red2.js
    $ vi node_modules/node-red/red2.js
    

    2. 차이가 다음과 같이 편집합니다.
    $ diff -c node_modules/node-red/red*.js
    *** node_modules/node-red/red.js       2019-11-02 10:44:27.536891600 +0900
    --- node_modules/node-red/red2.js      2019-12-01 09:37:25.653174800 +0900
    ***************
    *** 24,29 ****
    --- 24,30 ----
      var nopt = require("nopt");
      var path = require("path");
      var fs = require("fs-extra");
    + var Node = require('@node-red/runtime/lib/nodes/Node')
      var RED = require("./lib/red.js");
    
      var server;
    ***************
    *** 198,205 ****
    --- 199,228 ----
          settings.userDir = parsedArgs.userDir;
      }
    
    + function allDebugOut() {
    +     Node.prototype._send = Node.prototype.send
    +     Node.prototype.send = function(msg) {
    +         Node.prototype._send.call(this, msg)
    +         var _data = {
    +             id: this.id,
    +             z: this.z,
    +             name: this.name,
    +             topic: msg.topic,
    +             msg: msg,
    +             _path: msg._path
    +         }
    +         var data = RED.runtime.util.encodeObject(_data);
    +         RED.runtime.events.emit("comms", {
    +             topic: "debug",
    +             data: data,
    +             retain: false
    +         })
    +     }
    + }
    +
      try {
          RED.init(server,settings);
    +     allDebugOut();
      } catch(err) {
          if (err.code == "unsupported_version") {
              console.log("Unsupported version of Node.js:",process.version);
    $
    

    이것으로 올 디버그 기능 추가가 완료되었습니다.

    3. 올 디버그 기능을 사용하고 싶을 때는 red.js 대신 red2.js를 사용하여 Node-RED를 시작합니다.
    $ node node_modules/node-red/red2.js
    

    이제 Nod-RED의 깔끔하고 심플하고 알기 쉬운 흐름을 되찾을 수 있군요!

    그럼, 즐거운 Node-RED 라이프를! !

    결론



    Node-RED-Desktop Ver.1.0 에서는, 이 올 디버그 기능을 메뉴의 ON/OFF 로 이용할 수 있습니다.



    또, 작년의 어드벤트 캘린더에서 소개된 세로 흐름 을 사용할 수 있거나, ngrok나 node-generator가 통합되고 있어 편리한 툴로 완성되고 있다고 생각합니다.

    흥미를 가진 분은, 꼭 인스톨 해 봐 주세요.
    다운로드 는 여기에서 할 수 있습니다

    Appendix


  • Node-RED Desktop
  • Node-RED UG 연구회 2019 연말 LT 파티 발표 자료: Node-RED Desktop Ver. 1.0 새로운 기능 소개
  • 좋은 웹페이지 즐겨찾기