« Home / All Guides

Felix's Node.js Convincing the boss guide

이제 우리는 node.js에 대한 요점정리를 모두 마쳤다. 이제 보스를 설득할 시간이다. 나는 다양한 비지니스에서 node.js가 적합한 기술인지 아닌지에 대한 컨설팅을 해왔다. 물론 적합하지 않은 경우도 종종 있다.

이 가이드는 비지니스에 node.js가 적합한지를 따져보거나 윗 사람을 설특하는데 도움이 될 것이다. 이 조언은 전적으로 내 의견이다.

Node.js가 부적합한 유즈케이스

CPU를 많이 쓰는 앱

나는 node.js를 사랑하지만 그냥 보기에도 안 어울리는 유즈 케이스들이 있다. 가장 명백한 예는 CPU를 많이 사용하고 I/O는 별로 없는 앱들이다. 만약 비디오 인코딩, AI와 같이 CPU를 많이 쓰는 소프트웨어를 만들 계획이라면 C나 C++을 사용하는 것이 낫다.

물론 node.js는 C++ addon을 쉽게 사용할수 있다. 그래서 node.js를 슈퍼 울트라 핵심 모듈위에서 사용하는 스크립트 엔진으로 사용할 수 있다.

단순 CRUD / HTML 앱.

node.js는 결국 모든 웹 어플리케이션을 만들 수 있는 도구가 될 것이지만 지금 PHP, Ruby, Python이 하고 있는 것보다 더 나은 것을 제공할 것이라고 기대하지 마라. 사실 node.js를 사용하면 앱은 좀 더 확장하기 쉬워지지만 단지 node.js로 구현했다는 것만으로 트래픽이 나아지는 건 정말 만화같은 이야기다.

NoSQL + Node.js + Buzzword Bullshit

다음 프로젝트에서 NoSQL DB를 사용하려고 준비중이라면 잠깐 멈추고 이 것부터 읽었으면 좋겠다.

Redis, CouchDB, MongoDB,Riak, Casandra등은 정말 매력적이다. 원래 이브는 빨간 사과를 거절하지 못한다. 지금 node.js를 사용하는 기술적 모험을 감행하고 있다면 더 이상의 모험을 하는 것은 좋지 않다. 아직 완전히 이해하지 못하는 기술들은 서로 위험을 증폭 시킨다.

물론 문서 지향 데이터베이스가 적합한 유즈케이스도 있다. 그러나 지금 만드는 소프트웨어로 사업을 할 것이라면 데이터베이스 기술은 보수적으로 가져가는 것이 좋다. 적어도 덕질satisfying your inner nerd보다, 친구들에게 자랑하는 것보다 중요하다.

적합한 유즈케이스

JSON API

REST / JSON api를 사용할 때 node.js가 빛을 낸다. node.js의 non-blocking I/O 모델과 Javascript의 결합은 정말 좋은 선택이다. 데이터베이스나 웹서비스같은 데이터 소스를 사용wrapping하고 JSON 인터페이스 만들어 공개하는 데에 정말 좋다.

페이지가 단 하나인 앱.

gmail같이 페이지가 단 하나이고 AJAX가 난무하는 페이지를 만들려고 한다면 node.js가 탁월하다. 많은 요청을 처리하고 빨리 응답할 수 있을 뿐만 아니라 클라이언트와 서버 사이에서 검증하는 코드같은 것들도 서로 공유할 수 있다. 클라이언트에서 많은 것을 해야 하는 최근의 웹 앱들에는 진짜 좋다.

유닉스 툴을 이용하는 앱.

node.js의 피는 아직 끓고 있기 때문에 온갖 종류의 소프트웨어들이 모두 node.js로 개발될 것만 같다. 하지만 광활한 CLI 도구의 도움을 받는 것이 더 낫다. Node는 수 천개의 자식 프로세스를 만들고 그 결과를 스트림으로 반환한다. 이 것은 기존 소프트웨어를 십분 활용하기 때문에 상당히 좋은 방법인다.

스트리밍

웹은 전통적으로 http 요청과 응답을 최소 단위atomic events로 여겨 왔다. 하지만 이것은 틀렸다. 둘 다 스트림이라는 것이 더 작은 공통 분모가 있다. 주목받고 있는 많은 node.js 어플리케이션은 대부분 이 것을 활용하고 있다. 파일을 실시간으로 업로드하기같은 것이 좋은 예이다. node.js는 다양한 데이터 레이어를 위한 프록시를 만들 때 매우 좋다.

소프트 리얼타임 어플리케이션

twitter, 채팅 소프트웨어, 스포츠 중계 시스템sport bets, 인스턴트 메시징 네트워크에 대한 인터페이스같은 소프트 리얼타임 시스템을 개발할 때에도 node.js의 장점이 잘 발휘된다.

자바스크립트는 동적이고 가비지 컬렉터가 있는 언어이기 때문에 조심해야 한다. 자바스크립트의 응답시간은 전적으로 얼마나 자주, 얼마나 오랬동안 가비지 컬렉터가 동작하는 지에 달려있다. 가비지 컬렉터가 동작하는 동안에는 프로그램이 멈춘다. 그러니까 node는 하드 리얼타임 시스템에는 적합하지 않다. 그러한 시스템을 만드는 경우에는 Erlang이 훨씬 나은 대안이다.

상사를 설득하기

이제 node.js가 딱이라고 생각한다면 다음 차례는 상사를 설득하는 것이다.

프로토타입을 만들자.

시작이 반인 법이다. 아이디어가 담긴 적당한 프로토타입을 1주일 정도의 시간을 들여 만들어라. 관리자는 결정하는데 많은 시간을 들일 수 없기 때문에 보통은 쉽게 동의하는 편이다.

승인을 받은 후에는 빨리 동작하는 시스템을 만들어서 쉽게 node.js가 좋다는 증거와 구체적인 데이터를 얻어야 한다.

개발자를 찾기 쉽다.

당신이 자바스크립트가 필요하다고 생각할때마다 자바스크립트는 컴퓨터 프로그래밍 세계의 lingua franca가 되어 가고 있다. 모든 개인용 컴퓨터에는 자바스크립트 인터프러터(브라우저)가 설치돼있어서 모든 웹 개발자의 경력에 자바스크립트가 한 줄도 들어가지 않는 것은 불가능한 일이다.

왕성한 커뮤니티

현재 node.js 커뮤니티는 업계에서 가장 스마트한 개발자들을 참여하면서 미친듯이 성장하고 있다. node의 생태계는 매일 성장하고 있다. 이 것은 유료든 무료든 지원을 받을 수 있는 경로가 다양하다는 것을 의미한다.

성능

이 주제는 조심스럽게 다뤄야 하지만 성능이 중요한 경우에 node.js가 괜찮은 편이다. Mozilla, Google, Apple, Microsoft, Opera라는 쟁쟁한 회사들이 최고의 자바스크립트 엔진을 만들려고 경쟁하고 있다. node.js가 사용하고 있는 인터프리터는 Google의 V8로 엄청나게 빠르다. 게다가 매일 개선되고 있다.

Node의 기본 모델인 non-blocking I/O와 결합시키면 오히려 후진 앱을 만드는 것이 더 어렵다. 대부분의 Node 앱은 보통의 하드웨어로도 수 천개의 동시 접속을 처리할 수 있도록 쉽게 확장할 수 있다.

기업 후원

저자가 장기적으로 관리하지 못할 수도 있다는 점이 신생 오픈소스 프로젝트의 가장 큰 단점중 하나다. node.js는 이에 해당되지 않는다. Node는 현재, Joyent가 Ryan Dahl과 다른 몇 몇의 개발자를 고용해서 지원하고 있다. 앞으로도 경제적 지원은 계속 유지될 것이다.

이미 Yahoo!나 HP(전엔 Palm)는 충분한 확신을 가지고 있어서 다음 프로젝트에 node.js를 사용할 것 같다. 그러니까 당신은 YH역주 Yahoo와 HP 인증 마크를 보여주고 상사를 안심시킬 수 있다.

고객을 설득하기

계약을 진행중인 프리랜서거나 작은 회사의 경우는 다른 방법으로 고객을 설득해야 한다. 그들은 보통 당신의 판단과 당신이 만든 소프트웨어에 대한 지속적인 지원 유무에 의존하고 있다.

이 문제에 대한 조언은 좀 보수적이다. node.js가 적합한지 반복해서 확인해야 한다. 그리고 앞으로 만드는 앱에 대해 지속적으로 지원해야만 한다. node.js 팀은 빠르게 새 버전을 내놓고 있기 때문에 3~6 개월마다 한 번 새 버전에 맞추는 업데이트 작업이 필요하다.