interest/etc..

he Node Ahead: JavaScript leaps from browser into future Node가 간다: 자바스크립트, 브라우저를 넘어 미래로 Google V8 엔진, 서버 세계의 도플갱어로 급부상

ciuciu 2011. 3. 30. 11:50
http://gc8134.tistory.com/43

Voxer는 현대판 워키토키 iPhone 앱으로, 이 프로그램을 사용하면 당신이 원하는 만큼 실컷 인터넷을 통해 이야기를 하고, 동시에 듣고, 반대편에 아무도 없으면 음성 메세지를 남기고, 동시에 여러명과 채팅을 나누고, 텍스트와 음성을 전환할 수도 있다. 이것은 극도로 실시간적인 인터넷 앱이고, 이것이 바로 이 프로그램이 세상 대부분의 사람이 들어보지 못한 개발 플랫폼으로 만들어진 이유다.

Matt Ranney의 팀은 원래 Voxer를 군용 쌍방향 VoIP 라디오로 착안하고, 좋은 구식의 C++로 코드를 작성하기 시작했다. "중요한 상활에 사용될, 고성능 군용 어플리케이션이다."라고 그는 말했다. 그런데 C++은 당장 그 프로젝트에 쓰기에는 너무 복잡하고 엄격했다. 그래서 Google, Yahoo!, NASA 등의 서비스를 훌륭하고 운영하고 있는 고수준 언어 파이썬으로 옮겨간다. 그러나 파이썬은 저지연 VoIP 앱에는 너무 느려서, 다시 Node로 변경했다.

Node는 개발자들이 Node.js를 부르는 말로, 동적인 넷 어플리케이션 작성에 특화된 2년 밖에 되지 않은 개발 플랫폼이다. "js"는 JavaScript를 의미한다. Node는 Google Chrome 브라우저의 심장인 오픈소스 자바스크립트 엔진, V8을 기반으로 그 위에 만들어졌다. 그러나 Node는 브라우저 기술은 아니다. Node는 V8을 클라이언트에서 서버로 옮겨놓음으로서, 개발자들이 자바스크립트 프론트 엔드를 개발하는 것과 매우 유사한 방식으로 어플리케이션의 백 엔드를 개발할 수 있게 해줬다.

하지만 이것은 Node를 추천하는 이유의 절반에 불과하다. Node는 쓰레드나 데이터가 아닌, 다른 프로그램으로부터의 메세지나 사용자로부터의 입력이 중심이 되어 만들어진 "event-driven" 시스템의 최고의 예제이다. 즉, Node는 다음으로 넘어가기 위해서 어떤 것이 발생하기를 기다리지 않는다. 예를들어 데이터베이스에 자료를 요청하면, 데이터베이스로부터 응답이 오기전에 다음 태스크를 호출할 수 있다. 기존의 멀티쓰레드 시스템이 CPU 작업량이 매우 많았다면, event-driven 시스템은 많은 I/O 작업량을 포함한 네트워크 어플리케이션에 어울린다고 할 수 있다.

사용자가 네트워크 상으로 연결하면, 다음에 무슨 상황이 일어나든 Node의 "event loop"는 대규모의 메모리를 미리 할당하지 않는다. -커넥션을 구분하기 위한, 말하자면 플레이스 홀더 같은-작은 크기의 메모리만을 할당하고 필요에 따라 추가 메모리를 확보한다.

Mat Ranney는 이러한 구성이 제법 많은 수의 연결을 필요로하는 Voxer와 같은 앱에는 이상적이라는 것을 알게되었다. "사용자가 어떤 것의 실시간 스트림 업데이트를 할 수 있는 무엇인가를 만들려고 한다면, 서버로 몇 개의 연결을 유지하고 있어야 한다. PHP 아키텍처에서는 그건 매우 비용이 비싼 방법이다. 하지만 Node는 거의 공짜이다. 아주 오랫동안 연결을 유지하고 있을 수 있고, 연결마다 증가하는 비용도 매우 저렴하다."라고 Voxer의 CTO인 Ranny가 말했다. 

"Noe는 두 가지의 세상에서 모두 최고이다. 우리는 이벤트 프로그래밍 등에 특히 적합한 자바스크립트를 사용하고, 또한 성능도 놓치지 않았다."

Voxer를 처음 만들었을때, Ranney는 단일 서버에 얼마나 많은 연결을 오픈할 수 있는지 테스트를 실시했었다. "어느 정도에서 다운되는지 보기 위해서 가능한 많은 연결을 오픈하기로 마음 먹었었다." Ranney가 말했다. "Node를 쓰면, 거의 모두를 오픈할 수 있다. 내 테스트 머신에 IP 주소를 더 얻어오지 않고서는 더 이상 연결을 오픈할 수 없었다. Node는 그렇게 작은 메모리를 사용한다. 놀라운 일이었다. 난 포트 번호가 부족했다."



모든 것이 새로움(The New Everything)

실리콘 밸리의 일부에서는, Node가 새로운 PHP, 새로운 Ruby on Rails 또는 새로운 Black으로 알려져있다. Node를 써본 사람들에 따르자면, 그것은 거대한 차세대의 그 무엇인가다. 발간을 앞둔 O'Reilly의 책, "Up and Running with Node.js"의 저자이자 Node를 최초로 사용한 클라우드 컴퓨팅 팀 Joyent의 최고 전도사인 Tom Hughes-Croucher는 "잠시동안은 Node를 새로운 Rails로 불렀었다. 하지만 GitHub에 레일즈보다 더 많은 뷰를 유도하는 것을 깨닫고는, 새로운 PHP라고 부른다."라고 말했다.

Ruby on Rails는 인기있는 오픈 소스 저장소인 GitHub에 사용된 첫 주요 프로젝트였다. 아직은 Rails가 Node보다 -대략 7,000 대 5,000 정도로 - 더 많은 "follower"를 가지고 있지만, Node는 정말 더 많은 뷰를 모으고 있다. 그리고 Rails가 약 7년 동안의 좋은 개발 시간을 거친 성숙한 언어인반면에, Node는 2009년에 데뷔했을 뿐이다. 우리는 아직 1.0 버전의 릴리즈에도 미치지 못하고 있고, 지난달 막 0.4 버전이 릴리즈 되었다.

Joyent는 Node 오픈 소스 프로젝트에 스폰서로 참여하고 있을 뿐만 아니라, 플랫폼의 호스팅 버전, 개발자들의 빌드를 도와주는 온라은 서비스, 브라우저 상의 실행 프로그램을 제공하고 있다. no.de라고 알려진 서비스는 아직 베타 버전에 있기는 하지만 몇몇 알만한 곳에서 흥미를 불러일으켰다. 구글 앱 엔지니어인 Ikai Lan은 2월 중순 "오~예!, Joynet node.js 호스팅에 초대받았어!"라고 트위터에 글을 올렸다.

지난 여름 첫번째 Node 해커톤(해킹+마라톤, 역자주)인 Node Knockout을 주최한 Gerad Suyderhoud에게는 Node 플랫폼은 웹 개발의 지속적이고 급속한 진화의 차세대 주요 단계였다. 그는 "처음에는 아마존을 작성하는데 쓴 C가 있었고, 그 뒤는 Perl이었는데, Craigslist가 Perl로 작성되었다. 그러곤 PHP와 Facebook이 생겨났고, 또 Rails와 Twitter가 나타났다. 이 모든 것들을 보면, 많은 양의 고난이도 문제를 해결하면 새로운 문제가 나타나는 식이었다. Nobe는 실시간성과 관련해서 발생한 다음 번의 어려운 문제들을 풀고 있다."

웹 사이트의 와이어프레임(구조)를 보여주는 웹 어플리케이션은 Mockingbird나 학교 성적부 서비스인 LearnBoost 및 Voxer와 같은 몇몇 어플리케이션이 Node에 의해서 운영되고 있지만, 아직 Facebook같은 큰 사이트를 지원할 수 있는 정도는 아니다. 하지만 다른 사람과 마찬가지로 Suyderhoud는 그렇게 될 것이라고 확신한다. 지난 8월 Joyent's의 사무실에서 열린 Node Knockout 대회는 500명의 개발자가 참여했으며, 이 대회를 통해 Scarabble의 대규모 멀티사용자 버전인 Word2라는 상용 어플리케이션이 탄생하였다. 

하지만 Nodes가 단순히 웹 사이트나 어플리케이션을 만드는 도구인 것만은 아니다. Node는 차세대 어플리케이션이나 웹사이트를 가능하게 하기 위해 고안된 백앤드 서비스와 같은 클라우드 서비스를 가능하게 하는 도구이기도 하다. Joyent는 Node를 즉시 조절이 용이한 프로세스 능력과 저장 공간에 대한 실시간 접근성을 제공하는 Amazon EC2 유사 인프라스트럭쳐 클라우드 서비스를 보강하는데 이용하기도 한다. Rackspace가 최근 구매한 클라우드 관리 스타트업인 Cloudkick은 Node 상위에 일련의 서버-관리 툴을 만들어준다. 또한 현재 VMWare가 보유하고 있는 클라우드-메세징 장비인 Rabbit Technologies는 Node에 기반한 RabbitMQ 오픈 소스 메세징 플랫폼의 확장형인 rabbit.js를 제공한다.

프리렌서 개발자로서 Node를 개발하고 지금은 Joyent에서 일하고 있는 Ryan Dahl은 "클라우드 관리 요소들 덕분에 우리는 어디서든 이 모든 에이전트들을 사용할 수 있으며, 이들은 많은 양의 데이터를 처리할 필요는 없다. 이러한 작은 것들을 작성하는 것이 [이벤트-기반] 영역에서는 매우 그럴싸한 결과를 낳는다. 여러개의 쓰레드를 관리할 필요없이, 메세지를 받고 메세지를 보내기만 하면 된다."라고 말한다.

동시에 Node는 서버측에서 클라이언트측으로 다시 이동하고 있다. HP는 Palm WebOS 휴대폰과, 곧 나올 터치패드 태블릿에서 디바이스 자체적으로 백그라운드 서비스를 운영하는 것에 Node를 사용하고 있다. 이것은 이 플랫폼이 얼마나 효율적인가를 나타내는 또 하나의 표시에 지나지 않는다. Dahl는 "스케일을 실제로 줄일 수 있다는 것을 알게 될 것이다. 몇 기가의 메모리를 할당할 필요도 없다. 아주 빠른 시동 시간을 가지고 있으며, 메모리 사용량도 적다... 임베디드 장치에서 실행되기에는 충분히 작은 것이다."라고 말한다.



구식 비블락형 버리기(Chip off the old non-block)

Ryan Dahl은 원래 빠른 웹 서버, 최신 웹 어플리케이션에 적합한 웹서버를 위해 Node를 개발했다. 과거 수학을 전공한 그는 프리랜서 프로그래머로 직업을 바꾸고, "비블락형 IO"라고 부르는 흥미로운 이벤트-기반 시스템을 개발했다. 또한 그는 Ebb로 알려진 이벤트-기반 Ruby 웹서버도 만들었다. 하지만 Ruby로는 그가 원하는 성능의 해법을 찾을 수 없었다.

서버는 이벤트-기반이었지만, 시스템이 전통적인 멀티스레드나 "블락형" 시스템과 상호작용을 해야했기 때문에 성능은 최소화될 수 밖에 없었다. Dahl은 다음과 같이 말했다. "[Ebb]를 빠르게 만드는 작업에서 실패를 했었다. 하지만 모두 비블락형 I/O로 한다면 아주 좋은 성능을 얻을 수 있다는 점을 알아냈다. 실제 문제는 이것이 양자택일성의 일이라는 점이었다. 모두 비블락형으로 할 수도 있고, 모두 블락형으로하고 쓰레드를 사용할 수도 있다. 비블락형 I/O를 사용하려고 하면 비블락형 인터페이스가 없는 다른 시스템과의 상호작용을 해야되는 점때문에 매우 어려웠다."

결국 그는 완전히 새로운 플랫폼을 만들기 시작했고, 그 플랫폼은 어플리케이션을 작성하는 방법을 재정의했다. 그는 처음에 C 라이브러리로 시작했다. 하지만 C가 예전만큼 인기있는 것이 아니라는 것을 깨닫고, Lua를 이용했다. 하지만 그것도 문제가 있기는 마찬가지였다. Lua는 모든 종류의 "블락형" 라이브러리 있어서 모두 매우 무겁게 동작했다.

"블럭형쪽으로는 이미 Lua 방식이 있었다. 내가 정말 찾았던 것은 깨끗한 슬레이트 같은 것이었다. 새로운 플랫폼을 만들려고 할때, 아마 모든 방법을 다 해볼 것이다. 어떻든 Lua는 블록형 라이브러리가 이미 많이 있어서 전혀 흥미롭지 않았다."라고 Dahl은 말했다.

프로젝트가 시작된지 6개월이 지나서야, JavaScript에 대한 깨달음을 얻을 수 있었다. 그때 Wikipedia에서 100개의 흥미로운 JavaScript 서버측 프로젝트를 공개했는데, 그 중에 아무것도 인기를 얻지 못했다. 어떻게 서버를 열고,소켓을 생성하고, 사용자와 연결하고, DNS 주소를 해독하고, 사용자와 통신하고, 파일을 열고 같은 것에 대한 선행적인 것들이 전혀 없었다. Dahl는 "그것과 관련해서는 제반 분위기가 전혀 형성되지 않았었다. 그것이 어떻게 보여져야 하는지에 대한 생각도 없었다. 그래서 단지 비블럭형으로 정의하고 사람들에게 전달하면, 사람들은 '아, 알겠어'라고 말할 뿐이었다."

JavaScript는 여전히 엄청난 수의 클라이언트측 개발자들에게 친숙하 존재다. 전혀 새로운 언어가 아닌 것이다. "클라이언트 작업을 할 때의 사고 방식을 서버 작업을 위해서 전환할 필요는 없다."라고 Voxer의 CTO인 Ranney는 말한다. 그리고 Dahl과 Ranney 모두 현존하는 클라이언트측 개발 언어들은 이벤트-기반 프로그래밍에도 적합하다는 점을 강조한다. JavaScript는 이벤트 기반 시스템에서의 사용할 콜백으로 꽤 사용하기 쉬운 편인 closures를 포함한 높은 수준의 추상화를 제공한다.

"[Node]는 [클라이언트측 JavaScript 어플리케이션을 작성하는] 개발자들에게는 매우 친숙한 것이어야 한다. 클라이언트측 개발자가 웹 사이트의 버튼 콜백을 만드는 것과 같은 방법으로 - '여기에 버튼을 두고, 이것을 클릭하면, 이 함수를 부르고' - Node 프로그래머는 서버를 셋업한다. 버튼을 클릭하는 누군가 대신에, 서버에 연결하는 누군가가 되는 것이다. '서버에 연결을 하면, 이 함수를 실행해라.'

이벤트 기반 시스템은 결코 새로운 아이디어가 아니다. 비슷한 플랫폼이 이미 Ruby와 Python에서 -각각 EventMachine과 Twisted로- 사용 가능했다. 단지 JavaScript에서 선택을 함에 있어서 Dahl은 그 아이디어를 새로움의 극치로 만들었다. 이 모든 것들을 기반으로 거대 브라우저 제조사들은 JavaScript를 최대한 빠르게 하기 위한 끝없는 군비 경쟁을 벌이고 있다. - 그 중 Google이 가장 앞서있다. "Node를 찾았을 땐, 완벽하다고 생각했다." Ranney가 말했다

"고성능 서버를 만들기 적합한 이벤트 루프이다. 고급 언어인 JavaScript이다. 이벤트 기반 시스템에서의 콜백 지원을 위해 필요한 closure에 대한 훌륭한 지원도 있다. 그리고 JavaScript 경쟁에서 V8을 내세운 Google도 있다."



V8 한번 써볼래?(Would you like to touch my V8?)

Ryan Dahl은 그의 JAvaScript 플랫폼을 FireFox의 가장 핵심 엔진인 Mozilla의 SpiderMoney에 올리려고 했다. 하지만 채 이틀도 되지 않아 Google의 V8로 변경하곤 지금까지 계속해오고 있다. "V8은 정말 멋지고, 깔끔한 라이브러리이다. 매우 간소한 라이브러리로 Chrome에서 분리된 것이다. 단일 패키지 형태로 배포되는데, 빌드하기 쉽고, 잘 정리된 문서화 헤더 파일을 제공한다. 마치 사용을 강요하는 것 같다. 다른 어떤 것에 대한 의존성도 없다. Mozilla의 것보다는 훨씬 더 진보한 방법인 것 같다."라고 Dahl은 설명했다.

Google이 공식적으로 이 프로젝트에 참여하는 것은 아니지만, Dhal을 비롯한 다른 Node 개발자들에 따르면, Google은 프로젝트 진행 중 V8 버그 수정이나 추가 내부 분석이 필요할 때는 계속 협조적이었다고 한다. Google V8 팀원인 Erik Corry는 The Reg와의 인터뷰에서 다음과 같이 말했다. "매우 흥미로운 프로젝트다. 지난 해 Berlin에서 열린 jsconf.eu 컨퍼런스에 참석했었는데, Node 주변으로 많은 사람들이 모여 있었다. V8을 아주 멋지게 사용하고 있었고, 최초 작성자가 기대했던 것은 아니었지만, 오픈 소스 프로젝트를 새로운 방법을 통해 병합할때 무엇을 해 낼 수 있는 지를 보여준다." 

처음에 Dahl은 그 프로젝트를 web.js로 불렀다. 그 프로젝트는 Apache나 다른 "블럭형" 서버를 대체하는 웹서버에 지나지 않았다. 하지만 프로젝트는 이내 최초 웹서버 라이브러리 이상으로 성장했고, 거의 모든 것을 만드는데 사용되는 프레임워크로 확장되었다. 결국 node.js라는 새로운 이름을 가지게 됐다.

2009년 6월에 플랫폼 최초 버전을 공개했지만, 작년 jsconf에서 데모를 시연하기 전까지는 거의 관심을 받지 못했다. 그의 45분 동안의 발표는 기립 박수를 이끌어냈고, 그의 프로젝트는 어플리케이션 개발자들에게 뿐만 아니라 유명한 클라우스 제공회사에서도 사용되기 시작했다.

"[Ryan Dahl]은 확실히 [실시간] 세계가 의미하는 것을 이해하는 것에 가장 앞서 있었다. 그가 Node를 발표할때, 나는 깊은 인상을 받았다." RabbitEM을 보유한 Rabiit Technologies의 전 CEO이자 VMware의 수석 이사인 Alexis Richardson이 Node가 발표되기 전 Dahl의 블로그를 읽은 후 말했다. 

한달 후, Dahl은 Joyent에 입사했다.



천국에서의 Node(Node in the heavens)

Joyent에서는 이미 JavaScript를 서버측에서 사용하는 방법에 대한 연구가 진행되고 있었고, Node가 그 아이디어에 맞아떨어질 것이라 생각했다. Dahl은 Joyent의 내부 기반 클라우드 서비스를 위한 코드를 작성하기 시작했고, 2년이 지나, Node는 Joyent의 서비스에서 매우 비중있게 사용되고 있다. Node는 Joyent의 SDC6 소프트웨어의 일부이기도 한다. SDC6를 이용하면 IPS나 다른 회사들이 독자적인 내부 기반 클라우스 서비스를 만들 수 있다.

Joyent에서는 Node를 클라우드 서비스에서 데이터 전송을 위한 오픈 소스 메세지 플랫폼인 RabbitMQ와 함께 사용한다. VMware에서는 Alexis Richardson과 팀원들은 개발자들이 비슷한 일을 할 수 있는 소프트웨어를 개발했는데, 그들은 이것을 rabbit.js라고 부른다.

RabbitMQ는 이미 Spring Integration, EventMachine, Twisted를 포함한 Java/Ruby/Python 이벤트 기반 시스템과의 통합 작업을 완료했고, Node는 자연스레 다음 차례가 될 것이다.Richardson은 "Node와 Rabiit의 조합은 data의 이동을 간소화한다. Rabbit은 데이터베이스과 같은 저장 장치 기술과는 다른 이동성 데이터 기술이고, Node는 그 부분이 어플리케이션과 상호작용하는 것을 위한 간단한 툴킷을 제공할 것이다. Rabiit은 데이터의 이동을 가능하게 한다. Node는 Javscript user들이 그 스타일대로 프로그래밍을 하는 것을 가능하게 해준다."하고 말한다.

동시에 rabbit.js는 클라이언트에 데이터를 즉시 보내기 위한 Node 기술을 Socket I/O 위에 구현하고 있다. LearnBoost의 CTO인 Cuillermo Rauch에 의해 고안된 Socket I/O는 상대적으로 새로운 push 표준을 지원하지 않는 브라우저 뿐만 아니라 웹소켓 지원 브라우저로 정보를 전달하는 단일 인터페이스를 개발자에게 제공한다. 

"Socket I/O는 이중 채널을 지원하는데, 대신 채널을 통해 어떤 정보를 주고 받을지는 정의하지 않는다.RabbitMQ는 메세징을 어떻게 할지에 대한 의미론적인 것을 가지고 있기 때문에 [RabbitMQ와 Node의 조합]은 아마 스위트 스팟일지도 모른다."라고 rabbit.js를 작성한 VMware 수석 엔지니어인 Michael Bridgen은 말한다. 
이 아이디어는 메세징을 클라우드에서 브라우저까지 확장시킬 것이다. 백앤드에서는 RabbitMQ가 개발자들이 데이터베이스 없이 데이터를 넘기는 것을 가능하게 해준다. Rabbit.js와 Socket I/O를 이용해서 Bridgen과 VMware는 웹 상에서 어플리케이션이 클라이언트와 대화할 때 위와 유사하게 동작할 수 있게 했다. 이것은 단지 Node가 해야하는 특징일 뿐이다.

Bridgen은 "Node는 스스로 웹 프로그래밍이 데이터베이스에 관한 것이 아니라 네트워크 프로그래밍에 관한 것이라는 걸 알고 있는 듯 하다. Node는 어떤 데이터를 선택하고, 특정한 곳으로 전송하고, 응답을 받고 다시 응답을 보내는 것, 여기저기 데이터들을 보내는 것에 대한 것이다. Node가 성공한 이유 중의 하나는 위와 같은 방식의 비동기식 데이터 전송을 사용자들이 JavaScript 안에서 사용할 수 있게 했다는 점이다."

Rauch도 같은 생각이다. Node는 LearnBoost 앱의 영역을 확장시켰다. Node를 사용하면 프론트 앤드와 백 앤드에서 동일한 언어를 사용할 수 있다는 점을 언급한다. "그것이 매우 매력적인 점이다. 어플리케이션을 JavaScript로 작성할 수도 있고, 모든 백 앤드 하부 구조도 JavaScript로 작성할 수 있으며, 클라이언트용 웹 어플리케이션도 JavaScript로 작성할 수 있다. 이것이 진정 싱글-스택 환경이다.



저 끝까지(All the way to the end)

처음에 Rayn Dahl은 Node를 최종 사용자용 어플리케이션을 개발하는 "최종" 개발자를 위한 플랫폼으로 생각하지 않았다. 하지만 곧 그의 생각이 잘못 되었음을 깨달았다. "Node를 단지 TCP 연결 오픈하는 것, 하위 레벨을 위한 것, 운영 체제 하부에서 하는 것이라 생각했다. 하지만 사람들이 Node를 이용해서 웹 사이트를 개발하기 시작했다."

이러한 관심때문에 Joyent은 Node를 웹 브라우저를 통해 서비스로 사용할 수 있게 해주는 no.de를 만들었다. LearnBoost의 Rauch에게 Node는 -다른 어떤 시스템보다- 서비스로서의 플랫폼(PaaS) 같은 것을 위한 맞춤 도구였다. Node는 그 클라우스 서비스에 정말 딱 맞았다. Node 서버를 운영하는 것은 리소르를 거의 쓰지 않았지만, 정말 많은 수의 사용자들을 관리할 수 있었다."

no.de를 이용하여 Node서버에 Git 저장소를 일단 만들고, 이것을 Joyent 하부 클라우드 위에서 동작하는 가상 머신에 넣는다. 그럼 데몬이 지속적으로 실행된다. 서비스 기반 사항들도 SDC6에 포함되어 있으므로, 써트 파티 업테들은 그들의 no.de를 운영할 수 있다.

Joyent의 Tom Hughes-Croucher에 따르면, Node 셋업을 벤치마킹할 때, Joyent은 단일 CPU 코어에서 초당 8,000개의 요구를 처리할 수 있는 'hello world' 서버를 만들었다. "단지 'hello world'라고 말하는 것이었는데, 아직도 그러고 있다. 일부 어플리케이션은 단일 서버에서 15,000명의 동시 접속자를 처리할 수 있다고 한다.

Hughes-Croucher는 이러한 효율성덕에 Node가 최종 개발자들 사이에서의 인기가 하늘을 찌를 것이라 믿고 있다. 히지만 Ryan Dahl이 지적했듯이, Node는 아직 틈새 플랫폼에 불과하다. "대부분의 사람들은 ASP, Java, PHP 등을 이용해 작업하고 있으며, 새로운 플랫폼을 찾으려하지 않는다. 그들은 고객이 있다. 그래서 그들은 Microsoft의 다음 제품을 사용하지, 새로운 런타임을 찾지는 않는다."

게다가, 개발자들이 멀티스레드 개발에서 기대하는 것과는 컨셉적으로 많은 차이가 있다. Dahl은 "이 비블락형 방식을 사용하도록 강요를 받았다. 원격 백 앤드 같은 것에게 정보를 보내려고 할때마다, 콜백을 설정해줘야 한다. '데이터베이스로부터 결과를 받고, 다음 줄에서 그 결과를 사용한다.'하고 할수는 없다. 콜백을 설정해야 무엇을 전달받든 다른 함수로 이동할 수 있다.

"a하고, b하고, c하고, d하고처럼- 순차적으로 많은 작업을 해야된다는 것은 매우 힘든 일이 될 수도 있다. 일반적인 블락형 언어에서는, 단순하게 한줄 한줄 있는 a, b, c, d를 차례로 할 수 있다. Node에서는 각각의 함수로 점프해야한다. 데이터베이스가 데이터를 보내도록 요청을 하고 이벤트 루프로 돌아가서 다른 요청을 처리한다. 응답을 받으면 다음 요청을 보내는 함수를 호출한다. 다시 이벤트 루프로 돌아가고 더 많은 요청을 처리한다."

또 다른 면을 보면, 서버쪽 작업을 해보지 않고 프론트 앤드에서 JavaScript를 사용하는 사람들에게는 이 플랫폼이 편할지도 모른다. "클라이언트측 개발자들에게는 비블락형 방식이 꽤나 자연스럽다. 그들은 다른 방식은 생각하지 않을 것이다."


하지만 무엇보다 중요한 점은 Node가 실시간 웹앱의 새로운 태동에 적합하다는 것이다. 실시간 툴을 작성하는 많은 방법들이 있지만, Node는 사이트의 다른 부분을 운영하는 같은 플랫폼에서 개발을 가능하게 해준다. 훌륭하게도, Facebook의 채팅 서버는 Erlang으로 개발되었지만, Guillermo Rauch가 지적했듯이, Facebook의 나머지 부분은 그렇지 않다.

Rauch는 다음과 같이 말했다. "PHP와 Apache의 전통 구조를 가지고 있다면, 실시간으로 무엇을 한다는 것은 거의 불가능하다. 항상 실시간 통신은 다른 웹서버나 직접 작성한 특수 서버로 옮겨야한다. Facebook은 Facebook 채팅 만을 위해서 Erlang 서버를 만들었고, 그것이 PHP 스택과 통신하도록 했다. Node를 이용하면 이 모든 하부구조 구성요소의 복잡성이 완전히 제거된다. 실시간 스택을 일단 웹 어플리케이션, DBMS 레이어, 또 다른 것에 사용한 동일한 코드를 이용해 작성할 수 있다."

그래서 Node는 새로운 Rails도 새로운 PHP도 아닌 것이다. 그것은 완전히 다른 무언가이다.

'interest > etc..' 카테고리의 다른 글

발차기 우와....  (1) 2011.04.23
(펌) Android Push와 카카오톡  (1) 2011.04.04
오호  (1) 2011.03.30
우리시대의 역설  (1) 2010.09.14
유용한 한글단축키  (1) 2010.09.13