About Author

Rhio Kim
blog: http://nodejs.kr
twitter: @rhiokim
github: rhiokim

JavaScript Hacker

About this Article

Date Released:
Wednesday, June 27 2012 11:49 AM

노드에서 모듈은 굉장히 중요한 역할을 하고 NPM은 에코 시스템으로 노드가 탄생한 이후 노드 플랫폼의 성장에 가장 큰 영향을 주었습니다. 다른 오픈 소스 프로젝트에 비해 급속도로 발전하였고 이 글을 작성하는 시점에서 노드 모듈은 114,000 여개가 등록되고 있습니다.

잘 만들어진 모듈든은 노드 프로젝트에서 굉장히 유용하게 사용되고 또한 새로운 모듈을 만드는데 중요한 역할을 하는 모듈들이 굉장히 많습니다. 이 글에서는 모듈의 의존성이 가장 높은 Top 10 에 대한 소개를 합니다.

(아래 모듈 의존성 정보는 글을 작성하는 시점을 기준으로 하기 때문에 언제든지 변할 수 있습니다. 정확한 정보는 여기 에서 확인하세요.)

underscore

underscore

  • 의존성 : 1035
  • 사이트 : http://documentcloud.github.com/underscore/
  • 소개 : underscore 는 자바스크립트 MVC 프레임웍으로 잘 알려진 백본(backbone.js) 의 코어 라이브러리입니다. 객체 지향 자바스크립트를 위한 핵심중의 핵심만을 잘 추려 구현되어 노드에서 뿐만아니라 클라이언트측 자바스크립트 라이브러리로도 굉장히 잘 알려져 있습니다.

coffee-script

coffeescript

  • 의존성 : 669
  • 사이트 : http://coffeescript.org/
  • 소개 : 커피스크립트는 차세대 자바스크립트에 가장 큰 영향을 준 트랜스 컴파일 언어로 자바스크립트에서 루비 표현식을 사용할 수 있도록 해주는 스크립트 언어입니다. 이 언어는 특히 서버측 자바스크립트인 노드가 이슈화되면서 서버측 언어인 루비 개발자들에 의해서 큰 학습 요소없이 노드 플랫폼을 이용할 수 있게되면서 크게 인기를 끌면서 세계적으로 이슈가 되었고 노드 모듈도 루비 개발자들에 의해서 많들어 지고 있는 모듈이 그만큼 많다는 의미도 찾아 볼 수 있습니다.

request

  • 의존성 : 586
  • 사이트 : https://github.com/mikeal/request
  • 소개 : nodeconf 컨퍼런스를 만든 mekeal 에 의해서 만들어진 심플한 HTTP 요청 모듈로 브라우저에서 특정 URL 로 요청하듯이 HTTP 요청을 자유자재로 조작하여 만들 수 있는 웹 애플리케이션 구축 시 필수적이며 유용한 모듈입니다. 예를 들어 oAuth 인증이 필요한 기능에서도 request 모듈을 통해 브라우저에서 oAuth 인증 절차를 손쉽게 흉내낼 수 있게 됩니다.( 근데 high 클래스 oAuth 인증 모듈도 이미 많이 있습니다. )

async

  • 의존성 : 558
  • 사이트 : https://github.com/caolan/async/
  • 소개 : 이 모듈은 그간 서버에서는 대부분의 절차적 프로그래밍이 주를 이뤘으나 자바스크립트의 비절차적인 비동기 이벤트 모델의 특징이 노드와 함께 서버로 넘어오면서 많은 이슈와 논의가 있었습니다. 이 이슈를 해소하기 위한 모듈입니다.

express

  • 의존성 : 518
  • 사이트 : http://expressjs.com/
  • 소개 : 이것은 모듈이라고 하기보다 프레임워크입니다. 웹 애플리케이션 구축을 위한 high 클래스 API 들을 제공함으로써 이름에 걸맞게 빠른 웹 애플리케이션 구축에 필수적인 요소라 할 수 있습니다. express.js 는 Ruby 의 sinatra 프레임워크의 영향을 받아 그 구조와 특징이 매우 유사합니다.

optimist

  • 의존성 : 494
  • 사이트 : https://github.com/substack/node-optimist
  • 소개 : 노드는 서버측에서 파이썬, 루비, 펄 등과 같이 CLI(Command Line Interface) 를 제공하여 쉘 스크립트로도 사용됩니다. 옵티미스트는 콘솔에서 수행되는 명령행 옵션을 코드에서 손쉽게 접근할 수 있도록 파싱해주는 유용한 모듈입니다. (예를 들어 $ node_script.js -x 10 -y 15 라면 node_script.js 내부에서는 { x: 10, y: 15 } 형태로 손쉽게 접근할 수 있게 됩니다.)

colors

  • 의존성 : 351
  • 사이트 : https://github.com/Marak/colors.js
  • 소개 : 이 모듈은 옵티미스트와 동일하게 콘솔상에 처리를 위한 유틸성 모듈로 출력되는 텍스트의 색상을 손쉽게 설정할 수 있도록 해줍니다.

connect

  • 의존성 : 321
  • 사이트 : https://github.com/senchalabs/connect
  • 소개 : 이 모듈은 Sencha Lab 에서 개발한 HTTP 를 확장한 서버 프레임워크를 입니다. 노드 서버를 구현하기 위한 20 여개의 미들웨어(로깅, 세션, 쿠키, 멀티파트, 압축, 가상호스트, 서브도메인 등)가 탑재되어 있습니다. 이 모듈은 express.js 에서도 기본 모듈로 사용되고 있기 때문에 실상 express.js 가 갖은 의존성 만큼 connect 모듈의 의존성도 높다고 할 수 있습니다. 만약 HTTP 서버의 동작 원리를 이해하고 싶다면 이 모듈을 분석해보는 것도 좋습니다.

commander

uglify-js

  • 의존성 : 304
  • 사이트 : https://github.com/mishoo/UglifyJS/]
  • 소개 : 본래 uglify-js 는 커뮤니티에 의해 클라이언트 측 자바스크립트 압축을 위한 도구로 만들어진 라이브러리입니다. 이 모듈은 단순히 압축뿐만 아니라 압축된 자바스크립트를 보기 좋게 출력하기 위한 용도와 AST(Abstract Syntax tree) 분석을 위한 도구로도 활용됩니다.

요약

의존성 탑 모듈들을 살펴보면 참 재미있는 사실을 발견할 수 있습니다. (노드에 관심있는 개발자만 재미있을 수도 있음)

1위를 하고 있는 underscore 모듈은 브라우저에서 UI 개발에서 사용되던 prototype.js, jquery, extjs core 들과 그 용도가 같습니다. 그런데 서버측에서도 인기가 만만치 않습니다. 2위를 차지한 모듈은 자바스크립트라고 하기보다 루비 구문을 자바스크립에서 사용할 수 있는 트랜스 파일링되는 언어입니다. 3위를 차지한 모듈은 Ajax 에 의존해 오던 자바스크립트가 HTTP 프로토콜을 이용해 저레벨 요청을 제어할 수 있게 해줍니다. 4위를 차지한 async 모듈은 자바스크립트의 특징 중 비동기 절차를 절차 지향으로 변환해주는 녀석입니다. 마지막 5위를 차지한 express.js 는 서버 프레임워크로 웹 서비스를 구축하는데 동일한 언어로 동형의 프로그래밍(Isomorphic Programming) 이 가능하도록 하였습니다.

이런 모듈의 아이디어를 보면 서버측의 사상은 물론이고 브라우저 영역의 기술과 아이디어를 그대로 활용할 수 있기 때문에 다른 서버측 언어들에 비해 톡톡 튀는 아이디어가 많을 수 밖에 없습니다.

top 11~20

이하 모듈도 의존성 100 이상의 모듈들로 그 인기와 사용성이 높기 때문에 시간이 된다면 함께 살펴보면 좋습니다.

  • socket.io : 웹 소켓 모듈
  • redis : redis 클라이언트 모듈
  • jade : 템플릿 엔진 모듈
  • mime : mime 타입 모듈
  • mkdirp : mkdir 확장 모듈
  • jsdom : 서버측 DOM 모듈
  • node-uuid : 유니크 아이디 생성 모듈
  • mongodb : mongoDB 클라이언트 모듈
  • stylus : 다이나믹 스타일시트 언어 파싱 모듈
  • pkginfo : 노드 모듈 정보를 확인하기 위한 모듈
  • ejs : 템플릿 엔진 모듈
  • less : 다이나믹 스타일시트 언어 파싱 모듈
  • winston : 비동기 로깅 모듈
  • mongoose : mongoDB 클라이언트 모듈
  • xml2js : XML/JSON 변환 모듈

blog comments powered by Disqus