node.js..
on
node.js..
node.js에 대해서 알고 있었지만 실제로 사용한 것은 두어번 정도였다. 실제로 개발자가 하는 일은 별로 없는 것 같은데 작업 결과물은 들인 시간과 공에 비해 무척 세련되고 컴팩트했다고나 할까? 실제로 node.js로 만들어진 어떤 웹 앱을 설치하려고 받으면 그 양이 엄청나게 작아서 이게 도대체 뭘 하는 것인가 싶으면 npm으로 어디에선가 무엇을 잔뜩 가져다가 설치를 완료하고나면 필요이상으로 너무 근사한 결과물이 나왔던 것이다.
동작하는 것을 보면 별도로 웹서버를 설치한 적도 없는데 웹서버의 역할을 하고 db 작업도 하면서 그래프도 잘 그려내고 있기에, 이미 컴파일된 어떤 컴포넌트를 설치하는 중에 가져온 것인가 싶은데, 그런 것 같지도 않고 말이다. 여기에 비해서 C/C++로 작성된 앱들은 별 대단하지 않은 기능을 구현했다고 하더라도 대부분 한바탕 configure/make/gcc/g++ 쑈를 봐야되고, /etc와 /var/log를 오가며 한참 헤딩을 해야 제 구실을 하게 만들 수 있는 것이 보통이었기에 npm 이라고 하는 것은 요술을 부리는 놈이로구나 했던 기억도 있다.
막상 동작을 시키면 너무나도 부드럽게 잘 돌아가면서도 서버와 클라이언트가 동작 중에도 계속해서 연결이 유지되고 있어서인지 브라우저로 바라보는 상황이 계속해서 (서버에 의해서) 업데이트되고 있다는 것에 또 놀라곤 했었다.
node.js가 소개된지 한참인데 이 이야기를 하는 것은, 내가 집에서 사용하고 있는 몇 가지 앱들을 node.js로 관리해보니 그렇게 편리할 수 없었기 때문이다.
대개 외부에서 집안과 같은 홈네트워크 혹은 소규모 작업장의 네트워크를 관리하려고 하면, 대개 비용을 줄이기 위해 값비싼 S/W를 사용하지 않기 때문에 관리할 분량이 작으면 가끔씩 ssh로 들어가서 관리를 해준다거나, crontab을 이용해서 현재 상황을 요약해서 주기적으로 메일을 보내게 만든다거나 하는 수준에서 머물게 되다가, 관리해야 될 내용들이 많아져서 db를 써야될 것 같다 싶으면 리눅스에서 가장 고전적인(?) 조합인 APM (apache + php + mysql)을 써야 할 것 같고, 그 과정 자체가 예전보단 많이 세련되어졌지만 여전히 이곳 저곳 손 봐주어야 하고, 내가 관리해야 할 것들을 php, html, java script같은 것들을 복합적으로 써줘야 간신히 간신히 외부에서 관리가 가능하겠지 했다. 사실 관리 해야 하는 데이터가 php 같은 것들로 가져다가 읽기 불편하거나 C/C++로 작업하기 곤란하고 (API/library 등등이 다양해서) 하면 매번 ssh로 들어가서 복잡한 과정을 그대로 반복해왔다. 사실 이게 익숙해지면 아무렇지 않다고 느낄 수 있는데, 이게 어떤 수준을 넘어서게 되면 하나로 정리해서 쉽게 만들지 않은 스스로의 게으름을 탓하게 된다.
이야기가 밖으로 빠졌는데, node.js를 쓰면 편한점이 매우 많다. 스스로 복잡하지 않게 web socket을 만들어서 쓸 수 있고, 다른 tcp socket도 쉽게 쉽게 java script로 불러 쓸 수 있다. C/C++로 한다거나 perl을 쓴다고 하면 html, php, javascript까지 해서 작성과정이 일관되지 못하고 개념상으로는 같은 api라고 해도 C에서 붙이기도 하고 php에서 붙이기도 하고 여간 번거로운게 아니다. node.js로 하면 javascript로 모두 일관되게 작업할 수 있다. 여기에! node.js로 구현하는 기능들은 아주 작은 기능들부터 해서 그게 모두 library화 되어서 공개되고 있고, 인터넷만 연결되어있으면 설치시에 언제든 불러다가 쓸 수 있다는 것이다.
C/C++로 작업한다고 하면 내 목적에 맞는 library가 무엇인지 찾아서 설치하고(configure/make/gcc 한바탕 쑈, 요샌 rpm, apt, pacman으로 끝나니 다행이지만) api로 연결하는 방법을 알아내고 컴파일하고 디버그하고 몹시 불편한데, node.js는 javascript라 perl 다루듯 쉽게 할 수 있고 perl이 cpan에서 기능 개체들을 불러오듯이 npm으로 불러다 할 수 있다는 장점이 있다.
정말 장황하게 적어놨는데, 그것들은 node.js의 장점을 부각하기 위해 그런 것이고 요약만하면
-
웹서버를 따로 설치할 필요가 없다.
-
java script로 일관되게 복잡한 기능을 구현할 수 있다.
-
구현하려고 하는 기능을 아주 작은 기능들로 분할해 보고 그 각각의 기능을 npm package에서 검색해서 연결하는 script를 작성한다.
-
나머지는 npm과 node가 전부 다 해준다.
따라서, 내가 서버를 설치하고 api를 만들고 사용자 인터페이스를 깔끔하게 꾸리기 위해 노가다를 하지 않아도 훨씬 더 좋은 양질의 결과물을 매우 컴팩트하게 얻어낼 수 있다. 이것을 구태여 끄집어내어 떠드는 이유는 IoT에 활용하기에도 더 없이 유리하기 때문이다. 개개의 IoT 기기가 어떤 거대한 서버에 묶인 클라이언트가 될 수도 있지만, 스스로가 host/server가 되어 자신의 상태를 요구가 있을때 마다 알려주는 방법으로도 활용이 되기 때문이다. 무슨 말이냐면 개개의 node가 자신의 상황을 주기적으로 서버에 보고를 하는 식으로 구현할 수도 있고, 아니면 그 자신이 작은 웹서버가 되어 관리 서버가 클라이언트가 되어 각각의 node에게 현재 상태를 보고하도록 요청하는 식으로 구현될 수도 있단 말이다.