인도어 스마트팜 서비스 개발에 Node-RED를 선택한 이유

Lee Tae-Sung·2022년 3월 9일
3

Node-RED

목록 보기
1/3

시작하며

우리 팀이 인도어 스마트팜 소프트웨어 개발 계획을 수립하며 설정한 첫번째 목표는 실시간 모니터링 서비스입니다. 이 목표를 이루기 위해 js언어로 만들어진 flow 기반의 Node-RED Iot 프레임워크를 사용하기로 결정했습니다. 이번 포스트에서는 Node-RED가 무엇이며, 어떤 장점들이 있는지 살펴봅니다. 그리고 실시간 모니터링 서비스에 Node-RED를 사용 의사 결정을 하게 된 과정에 대해서 설명하려 합니다.

Node-RED 란?

Node-RED는 하드웨어, API, Online service들을 flow 기반으로 브라우저에서 작동하는 시각화 프로그래밍 툴입니다. IBM으로 개발되었고 현재는 OpenJS Foundation(2016)에 속해있습니다.

Node-RED는 JavaScript function들을 사용하는 flow 기반 편집기를 브라우저에서 제공합니다. 이 어플리케이션의 요소들(flow)을 저장하고 재사용하고 다른 사람들과 공유할 수 있습니다.

Node.js 위에서 Node-RED는 실행하고 Node-RED안에서 flow들을 생성할 수 있다. 그리고 이 flow들은 JSON을 통해 저장되고 활용됩니다.

https://nodered.org/about/

https://ko.wikipedia.org/wiki/Node-RED

Node-RED 를 실제 서비스에 선택한 이유

Node.js 기반, JS로 개발된 프레임워크

팀 구성 처음부터 회사의 모든 프로그램(소프트웨어 및 하드웨어 최대한 모든 부분들)들을 하나의 언어로 개발을 결정했습니다. 이는 적은 인력으로 최고의 개발 효율을 내기 위해, 재배사들을 대상으로하는 적은 트래픽이 예상되는 또 애자일 개발론을 표방하는 우리에게 최적의 결정이었습니다. 그리고 그 언어는 바로 JavaScript이었습니다.(js 결정 이유는 다음에 시간 있으면...)


(물론 단점도 많지만 ...)

그래서 JS로 개발된 그리고 Node.js가 기반이 되는 Node-RED를 개발 프레임워크로 결정할 수 있었습니다. 다만, 앞으로의 확장성, 활용성, 조직의 성장 등을 고려해 보편적으로 벡엔드와 프론트엔드로 나눠지는 MVN(MongoDB, Vue.js, Node.js)을 처음부터 진행할지는 논의가 필요했습니다.

Node-RED vs MVN(MongoDB, Vue.js, Node.js)

사실 처음 계획은 MVN이었습니다. 왜냐하면 Node-RED의 존재를 몰랐었고 알게되었을 때도 서비스 일부에 활용이 가능한 라이브러리 정도라고 생각했습니다. 하지만 Node-RED를 공부할수록 실제 실시간 모니터링 서비스 활용에 적합하다는 결론을 내릴 수 있었습니다.

그리고 이 결정에 가장 큰 이유는 개발 인력 부족에 따른 현실적인 이유가 결정적이었습니다. 초기 MVN을 개발 계획으로 설정했을 때, 실시간 모니터링 서비스 개발 완성 기간은 약 3개월 잡았습니다.(여유 기간 포함, 포괄적 개념으로 데이터 구성 및 관리 제외)

왜냐하면 실질적인 개발 인력이 주니어 개발자 1인 나 혼자였기 때문이었습니다. (물론, 큰 틀에서의 설계와 도움을 주시며 결정을 하는 리더가 계십니다)

제가 아무리 해보긴 했다고 하지만 벡엔드, 프론트를 전부를 하여 목표한 서비스를 만들어야했습니다. 그래서 3개월이란 기간이 필요했습니다. 그러나 Node-RED를 활용하면서 이 기간을 충격적으로 줄일 수 있었습니다. (실제로 Node-RED를 통해 3개월로 잡았던 개발 기간이 1주일로 줄었다.)

주니어 개발자의 욕심과의 괴리...

물론, 내심 불만은 없었던 것은 아닙니다. 제 스스로 Node-RED의 블럭(Node)과 와이어(flow)로된 개발 툴이 도저히 개발이라고 받아들여지지 않았습니다.

나와 같이 개발 공부를 했던 친구들은 React, Node.js 등을 다루며 엄청나게 성장해나가고 있는데 반해 이 단순한 툴을 투닥이고 있으려니 뒤쳐지고 있다는 생각이 들었습니다. (실제로 ssafy 초기에 이러한 UI를 가진 초등학생용 코딩 교육 서비스를 경험한 적이 있다.)

그러나 이런 고민을 내가 갖고 있다는 걸 눈치 채신 이사님은 내게 참으라는 말 대신 이번 개발이 개발자 성장으로서 얼마나 좋은 기회인지를 차분히 설명하고 설득하셨습니다. 그리고 그 과정에서 신입 개발자 존중하고 이해해주시는 이 대화법은 정말 감명 깊었고 또 내가 가르침을 줬습니다.

아 ... 팔불출... 다시 본론으로 돌아가서..;;

Node-RED에 있는 dashboard라는 라이브러리의 존재

https://flows.nodered.org/node/node-red-dashboard

Node-RED를 활용한 Iot 서비스의 대부분은 필수적으로 해당 라이브러리를 사용합니다. Node-RED 관련된 유튜브 영상을 검색해보면 일단 dashboard는 깔고 가는 영상이 대부분입니다.

그만큼 해당 라이브러리는 다양한 Iot의 수치를 표시하는데 파워풀 합니다. 원래 일일히 js를 통해 애니메이션과 조건문들을 걸어 만들어야하는 게이지, 차트 등을 블럭(노드)을 잡아 당기는 것만으로 구현을 끝내버립니다.

거기다 기대 이상으로 예쁩니다..

만약 dashboard라는 라이브러리가 없어 여러 라이브러리들을 조합하고 편집해야했다면 차라리 그냥 내가 만들어?! 라는 생각이 조금(?)이라도 들었을지도 모르겠습니다.

쉬운 진입 장벽

앞에서 언급했듯이 Node-RED 프로그래밍 방식인 끌어놓기(?) 연결시키기(?)는 초등학생들에게 코딩 교육을 시작하는 방법으로 활용될 정도로 직관적이고 간단합니다.

이는 코딩을 별도로 배우지 않은 일반인도 이해하기 쉬우며 간단한 명령어 만으로도 프로토 타입의 로컬 서버를 작동시킬 수 있습니다.

물론, 이마저도 코딩의 ㅋ 자도 관심 없는 일반인에게 하라고 한다면 질색팔색할테지만 어느정도의 지식과 관심이 있는 인력들에겐 충분히 뛰어넘을 수 있는 허들 정도가 될 것입니다.

하물며 하드웨어 엔지니어나 신입 개발자가 활용하기엔 몹시 충분합니다. 인력 보강을 추진 중인 우리 조직에게 이 점 또한 큰 메리트입니다.

생각보다 큰 규모의 커뮤니티와 생각만큼 있는 자료들.

Node-RED를 처음 활용을 고려 했을 때, 가장 큰 걱정은 Node-RED의 생태계의 규모였습니다. 그렇지 않아도 정보의 접근이 상대적으로 어려운 Iot를 다루는데 또 그 안의 Node-RED라는 라이브러리에 온전히 의존하게 된다면 만에하나 해결 불가한 문제가 발생한다면 전체 프로젝트가 엎어질 수 있기 때문입니다. 이 Node-RED라는 정원 안에서도 예쁜 꽃이 자랄 수 있는 생태계가 조성되어 있어야 했습니다.

🔽 Node-RED 커뮤니티

https://discourse.nodered.org/

🔽 Node-RED github

https://github.com/node-red/node-red

하지만 우리에겐 엄청나게 큰 규모의 커뮤니티가 필요했던 건 아니였습니다. 질문과 답변을 받을 수 있는 살아있는 생태계 정도만 있어도 충분 했습니다.

해당 커뮤니티들을 보면 여전히 다양한 질의응답들이 오가며 github의 업데이트도 지속적으로 진행되고 있습니다. 특히, 몇몇 네임드들이 적극적으로 답변을 다는 점은 인상적이였습니다.

또한, 충분한 도큐먼트들과 유튜브 영상들이 있었습니다. 한국말로 된 Node-RED의 수준높은 자료와 영상들은 부족하지만 영어로 된 자료들은 상당히 있었습니다. 예를 들어, 토글과 비슷한 기능을 만드는데에도 영어 유튜브 영상을 참고 해 만들 수 있었습니다.

🔽 Node-RED 유튜브 튜토리얼

https://www.youtube.com/playlist?list=PLyNBB9VCLmo1hyO-4fIZ08gqFcXBkHy-6

flow 형식의 개발

하드웨어들(센서 등)을 통해 이동하는 데이터들의 움직임들은 flow 형식을 따른다고 합니다. 그에 반해 일반적인 소프트웨어 개발자들은 function, class 등을 이용한 개발(함수형, 객체지향형 등)을 하곤 합니다.

이 Node-RED는 하드웨어들의 데이터가 이동하는 형식과 동일한 flow 형식의 개발이 진행됩니다. 데이터를 받아와 와이어들을 통해 노드들을 거칩니다. 물론 function을 통해 js 코드들을 넣을 수 있습니다.

하지만 flow 형식의 코딩. 이 Node-RED에서는 이러한 data에 직접적으로 관여하는 function들을 지양하고 환경변수 등의 활용을 지향하려 합니다.

마치 지금까지 저 같이 일반적인 소프트웨어 개발자가 강이라는 데이터를 목적지를 향해 그리고 원하는 성분을 만들기 위해서라면, 흘러가는 강(데이터)에 댐이나 둑을 만들었다면 Node-RED에선 하드웨어 방식처럼 흐르는 강 주변 환경을 바꿔주는 것입니다.

Iot 하드웨어들과 연결되는 소프트웨어 개발에 이러한 동일한 프로그래밍 철학을 가지고 간다는 점이 Node-RED 개발자가 의도한 건지는 모르겠지만 장기적으로 가치있고 스마트팜의 소프트웨어 개발이란 필연적으로 하드웨어 기술이 관여되어 있는 점을 생각했을때 충분히 의미 있으리라 생각합니다.

api, tensorflow.js 활용성

https://www.youtube.com/watch?v=bOdlPwWej98&t=195s

(IBM 유튜브 채널의 유일한 node-red 관련 영상....)

Node-RED의 상당히 직관적이고 단순합니다. 그래서 다양하게 활용할 수 있다는 생각을 하지 못 했었습니다. 하지만 Node-RED는 활용하기에 따라 tensorflow.js까지도 적용이 가능합니다. 물론, 해당 기술들의 적용이 활발히 발전하고 있는 것 같지는 않습니다.

우리의 근본적인 목적은 AI로 실내 공장에서 성장하는 식물들을 돕는 것입니다. 실시간 모니터링 서비스도 이를 위한 기반 중 하나입니다. 그렇기 때문에 해당 프레임워크에서 다양한 api와 tensorflow.js를 활용할 수 있다는 점은 Node-RED 선택에 결정적인 요인이었습니다.

기대보다 아쉬운 응용 그러나 가능

Node-RED를 알면 알수록 활용에 대한 기대감이 커졌습니다. 회사의 서비스 전체를 Node-RED를 가지고 가자는 생각도 들었습니다. 그러나 다른 프레임워크들과의 응용. 즉, 유연성은 너무 아쉬웠습니다. 특히, Node-RED의 프론트 프레임워크인 Angular.js가 EOL을 선언한 상황이라 더 아쉬웠습니다.

위 스샷의 Node-RED에서 기본적으로 제공하는 template 에디터는 자동완성 및 파일 관리 등 개발자들이 사용하는 vscode, intellij 등과 비교해 너무 불편했습니다. 위의 에디터들에서 당연한듯 여러 패키지들을 불러오고 관리하는 등의 성능들을 Node-RED 내부 template에서는 어려웠습니다.(현재로서는 불가능하다고 판단됨..)

그래서 다른 라이브러리들을 활용해야하는데 이러한 라이브러리들의 활용이 쉽지는 않았습니다.

🔽Vue.js를 연동시키는 라이브러리로 활용되는 uibuilder
https://flows.nodered.org/node/node-red-contrib-uibuilder

한마디로 dashboard와 달리 다양한 다른 라이브러리들의 활용이 쉽지는 않았습니다. 또한, 라이브러리들은 애초에 정보가 부족하거나 없는 경우들이 많았습니다. 하지만 여러 다양한 라이브러리가 존재한다는 자체만으로도 가능성이 열려있는 상황이라 긍정적으로 판단했습니다.

사실. 왜냐하면, Node-RED로 일단 개발할 실시간 모니터링 서비스는 dashboard로 일단 충분하기 때문입니다. 해당 내용에 대한 응용은 열려있음 정도로도 충분했습니다.

마치며

이러한 이유들로 우리는 실시간 모니터링 서비스에 Node-RED 사용을 결정했습니다. 앞으로 프로젝트들이 어떤 과정을 거칠지 장담할 수는 없습니다. 특히, 우리 같이 작은 개발 조직에서의 목적지를 향한 방법은 순식간에 바뀝니다. 하지만 고민 끝에 결정한 만큼 Node-RED의 장점들을 적절히 활용하여 멋진 서비스를 만들어나가겠습니다.

profile
긍정적인 에너지를 가진 개발자, 이태성입니다.

4개의 댓글

comment-user-thumbnail
2022년 4월 25일

개발자 이태성 화이팅!!

1개의 답글
comment-user-thumbnail
2022년 12월 22일

node-red 사용해봤는데도 놓친부분이 많았네요ㅎㅎ꼼꼼하신거같아요! 화이팅입니다

1개의 답글