Node.js?

Node.js?

Node.js는 구글의 V8 자바스크립트 엔진을 기본으로 하며 이를 실행시키는 개발 프레임워크다. 자바 스크립트로 Node.js 코드를 작성하고 나면, 이 코드가 실행될 수 있게 V8이 기계어로 컴파일 한다.

웹 서버와 서버 측 스크립트, 그리고 지원하는 모든 웹 애플리케이션 기능을 포함한 서버 측 코드의 대부분을 Node.js로 작성할 수 있다. 웹 서버와, 웹 서버가 지원하는 웹 애플리케이션 스크립트가 동일한 서버 측 애플리케이션에서 같이 실행되므로 웹 서버와 스크립트를 훨씬 더 견고하게 통합할 수 있다.

또한, 웹 서버는 Node.js 플랫폼에서 Node.js 모듈로써 바로 실행될 수 있는데, 이는 새로운 서비스나 서버 측 스크립트를 추가하기 위해 아파치를 사용하는 것보다 훨씬 더 쉬움을 의미한다.

아래는 Node.js의 장점들이다.

  • 단대단 자바스크립트
    자바스크립트로 서버 측 스크립트와 클라이언트 측 스크립트를 둘 다 작성할 수 있음. 따라서 클라이언트 개발자와 서버 개발자가 같은 언어를 사용할 수 있다.
  • 이벤트 기반 규모 조절성
    Node.js는 웹 요청을 처리하기 위해 여러 스레드가 기다리게 하는 대신, 기본 이벤트 모델을 이용해서 웹 요청을 동일한 스레드에서 처리한다.
  • 기능 확장성
    여러 커뮤니티를 통해, Node.js에 새로운 기능을 추가할 수 있다.
  • 빠른 구현


Node Package Manager

Node Package Manager의 약자로 Command Line 도구이다. 이 도구를 통해 NPMs과 관련된 검색, 설치, 삭제, 발행 등 많은 작업을 할 수 있다. NPMNode Package Registry라고 불리는 노드 패키지 저장소와 개발 환경 사이에 연결고리 역할을 한다.

명령은 npm이라는 키워드를 이용해 내릴 수 있다.

1
2
 npm search openssl		// openssl 이라는 모듈을 검색
 npm install express		//express라는 이름의 모듈을 설치


Node Package Module 설치

애플리케이션에서 노드 모듈을 사용하려면 노드가 찾을 수 있는 위치에 해당 모듈을 설치해야 한다. 노드 모듈을 설치하려면 npm install <모듈 이름> 형식에 맞는 명령을 수행해 해당 모듈을 개발 환경 내에 다운로드하고 install 명령이 실행된 곳의 node_modules 폴더에 위치시켜야 한다.


package.json

모든 노드 모듈의 최상위 디렉토리에는 반드시 package.json 파일이 놓인다. package.json은 노드 패키지 관리자에 제공할 해당 모듈 및 의존 모듈의 정보가 들어 있는, JSON 형식으로 된 텍스트 파일이다.

가장 좋은 사용 방법은 package.json파일에 필요한 종속 모듈 명세만을 추가하면 이를 자동으로 내려받아 설치하는 방법이다. 따라서 package.json파일을 프로젝트 최상위 폴더에 만드는 것이다. 명세를 추가한 이후에 npm install 명령어를 이용해 명세에 추가된 모듈들을 자동으로 설치한다. 설치 이후에 추가 모듈이 필요한 경우는 dependencies에 추가로 설치할 모듈의 정보를 입력하고 npm install을 재수행 해주면 된다.

아래와 같은 형식으로 구성되어있다.

1
2
3
4
5
6
7
8
{
	"name":  "my_module",
    	"version":  "0.1.0",
    	"description":  "a simple node.js module",
    	"dependencies":  {
    		"express":  "latest"
    	}
}

아래는 package.json파일에 사용되는 키워드의 설명이다.

Keyword Description
name 패키지의 고유 이름
preferGlobal 모듈의 전역 설치 선호 표시(true, false로 설정)
version 모듈 버전 정보
author 프로젝트 작성자명
description 모듈에 대한 설명
contributors 모듈에 공헌한 사람들
bin 프로젝트와 같이 설치될 바이너리
scripts node 런치 시 사용한 console app 전달인자
main 바이너리나 .js파일로 구성되는 애플리케이션 메인 진입점
repository 저장소 형식과 패키지 위치
keywords npm 검색 시 사용될 키워드
dependencies 종속성이 있는 모듈과 버전(x를 와일드카드로 사용)
engines 패키지에 사용된 node 버전


Node.js 모듈 생성

패키지로 묶은 Node.js 모듈을 생성하려면 자바스크립트로 필요한 기능을 정의하고 package.json파일에 패키지 정의를 추가해주어야 한다. 아래는 Node.js 모듈을 생성하는 과정이다.

  1. 프로젝트의 Root가 되는 폴더를 하나 생성한다.
  2. 생성한 폴더에 필요한 기능을하는 자바스크립트 파일을 생성한다.
  3. package.json파일을 생성해 관련된 정보를 작성한다. (name, version, main은 반드시 추가한다. main은 메인 자바스크립트 모듈의 이름을 의미한다. 또한 자동으로 .js 확장자를 포함하기 때문에 이름에 .js를 붙일 필요가 없다.)
  4. README.md 파일을 생성해 필요한 내용을 추가한다.
  5. console창을 열어 Root가 되는 폴더로 이동 후 npm pack 명령어를 실행시킨다.
  6. Root 폴더 내에 [폴더이름]-[version].tgz라는 이름의 패키지 모듈이 생성됫다.


Node Pacakge Registry에 모듈을 올려보자

npm pack명령어로 생성된 패키지 모듈을 공개적으로 다운받고 사용할 수 있도록 패키지 저장소에 올려보자.

  1. github와 같은 공개저장소를 생성하고 Root폴더의 내용을 해당 저장소에 업로드한다.
  2. https://npmjs.org 에서 계정을 생성한다.
  3. 명령 창에서 npm adduser 명령어를 이용해 사용자 정보를 추가한다. (계정 생성 시의 정보를 입력한다)
  4. package.json파일의 내용에 public 저장소의 정보와 레지스트리 검색 시 사용할 키워드 정보를 추가한다.
1
2
3
4
5
6
7
8
9
10
	...
	"repository" : {
	    	"type": "git",
	        "url":  "http://github.com/plus4070/NPR_Test/"
	    },
	    "keyword": [
	    	"censor",
	        "words"
	    ],
	    ...
  1. Root 폴더로 이동 후 npm publish 명령어를 통해 NPR에 모듈을 업로드한다. 이제 npm install [모듈이름]으로 업로드한 모듈을 다운로드받아 require() 함수를 사용해 모듈을 로딩하고 사용할 수 있다. (업로드된 모듈을 삭제할 경우에는 npm unpublish명령어를 사용할 수 있다)
모듈의 사용

모듈은 require()함수를 이용해 로드하고 사용할 수 있는데, 인자값으로 설치된 모듈의 이름이나 .js파일이 위치한 경로를 넘겨줄 수 있다.

1
2
3
require("censorify");
require("./lib/utils.js");

이렇게 로드한 .js파일을 변수에 넣어주고, .js에 구현되어있는 함수들을 사용할 수 있다.

1
2
3
4
5
6
var censor = require("censorify");
console.log(censor.getCensoredWords());
console.log(censor.censor("Some very sad, bad and mad text."));
censor.addCensoredWord("gloomy");
console.log(censor.getCensoredWords());
console.log(censor.censor("A very gloomy day."));