Node.js의 도입 전 리서치 결과

-- NODE.JS 2013. 10. 16. 13:14
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

NODE.JS를 배워봐야지 하면서 딱히 현업에서 사용할 필요성을 못느껴서 미루고 있다가 이번 기회에 배워보려고 정리중이다. 여기저기 서치하던 중에 본 글을 발견하여 막연했던 NODE.JS에 대해 미리 고민해주신 블로거님의 도입 시의 고려사항을 정리해둔다.

-------------------------------------------------------------------------------------------------------------------------
Node.js는 자바스크립트 엔진으로 구동되는 이벤트 기반 I/O 프레임워크입니다. 주로 웹 서버를 구축하는데 많이 이용되는데요. 이 때문에 클라이언트에서만 사용되던 자바스크립트가 서버 제작에 사용되어 업계를 깜짝 놀라게 만들었죠. 기능적인 부분은 쉽게 말해, boost의 asio와 비슷하다고 볼 수 있겠습니다.

 

이 기술을 사용해볼까 고민하면서 이것저것 돌아다니는 자료를 모아봤습니다. 그리고 혹시 같은 고민을 하고 계신 분들이 있을까 싶어 공유합니다.
 

구글은 V8이라는 자바스크립트 엔진을 오픈소스로 개발하여 크롬브라우저에 탑재하였습니다. 라이언 달이라는 개발자는 이 엔진을 떼어다가 서버로 옮겨놓고 서버프로그램으로 제작하기 위한 프레임워크를 개발했죠. 덕분에 자바스크립트언어를 서버에서 돌리는 재미있는 기술이 탄생했습니다.

 

라이언 달은 Node.js를 만들며 잡은 목표는 사실 간단했습니다. 'Gmail처럼 푸쉬(Push) 기능이 되는 웹 사이트를 만드는 기반 시스템'을 만들어보자.

 

결국 개발 한 결과물은 이런 특징들을 갖게 되었습니다:

  • 단 하나의 쓰레드가 이벤트 룹을 구동
  • V8 엔진 내부적으로 코드를 컴파일하여 구동
  • 이벤트 구동형 프로그래밍(Event-driven Programming)으로 비동기 I/O를 구현
  • 익명의 함수(Anonymous function)와 클로져(Closure)를 사용
  • HTML5 표준 중 하나인 WebSockets를 라이브러리 형태로 지원

 

이런 특징이 Node.js에게 이런 장점 안겼습니다:

  • 기존 스크립트 언어는 인터프리터 언어로서 파싱하며 구동하기 때문에 속도가 느리지만, Node는 내부적으로 컴파일 된 바이너리 형태로 구동하므로 속도가 빠르다.
  • 웹 클라이언트에서 자바스크립트를 이용한다면 서버와 클라이언트가 언어가 통일되고, 주요 로직이 쉽게 공유 될 수 있다.
  • 기존 웹 서버들이 컨넥션당 쓰레드(혹은 프로세스)를 할당하는 것과 달리, 단일 쓰레드를 이용하므로 데드락에서 자유롭다.
  • 쓰레드(혹은 프로세스)의 소비가 없기 때문에 메모리 과다 할당 문제가 없다. 따라서, 같은 메모리 크기로 더 많은 동시 접속을 받을 수 있다.
  • WebSockets을 라이브러리 형태로 지원하므로 TCP/UDP 연결도 가능하다. (내부적으로는 Flash Socket, JSONP Polling, AJAX Long Polling 등으로 Fallback 지원)
  • 컴파일이 필요없기 때문에 코드의 수정과 테스트가 편리하다.

 

하지만 그에 비해 이런 문제점들도 있을 있습니다:

  • 쉽게 구현되는 JSON 프로토콜을 이용하면 바이너리 데이터에 비해서 크기느 엔코딩/디코딩에서 느릴 수 있다.
  • 이벤트 구동 방식 프로그래밍은 기존의 제작 방식에 비해 학습이 어려울 수 있다.
  • 실수로 동기적 코드를 이용하는 경우 치명적인 성능 저하를 유발 할 수 있다.

 

위를 검증하는 몇몇 테스트 결과 추가합니다:



출처 : http://resoneit.blogspot.kr/2012/09/nodejs.html

'-- NODE.JS' 카테고리의 다른 글

이클립스에서 Node.js 설정  (0) 2017.02.01
Express Web Framework  (0) 2013.10.16
Node.js Preview  (0) 2013.10.16
posted by 어린왕자악꿍