이 문서는 node.js 를 아주 빠르게 터득하고 실험해보기 위해서 만들어졌다.
본 내용은 'Node.js 프로그래밍 (저자: 변정훈, 출판사:에이콘)' 서적을 이용하여 작성되었다. 극히 일부분만 인용하였으며, 꼭 책을 사서 보기 바란다.
이 후, Node.js 로 트위터봇 만들기 글과 함께 하면 감이 올테다.
Node.js 의 특징
Node.js 를 사용하고 싶은 욕구가 들게 할만한 주요 특징은 다음과 같다.
문법 언어로 자바스크립트를 사용한다. (구글 V8 엔진을 문법 파서 엔진으로 사용한다. )
모든 API 는 이벤트 지향 비동기 API 이다. (심지어 IO도)
비동기 처리 특성에 의한 동시 접속 처리 능력이 월등히 뛰어나다.
오픈소스로써, 모듈에 대한 커뮤니티가 활성화가 잘 되어있다.
인스톨
http://nodejs.org/#download 에서 다운로드하여 설치한다.
윈도우 버젼은 0.6.1 버젼부터 지원한다.
터미널에서 'node --version' 을 실행해서 노드 버젼이 출력되면 성공적으로 설치된 것이다.
노드 명령을 찾을 수 없을 경우
node 명령을 찾을 수 없을 경우 환경변수 'PATH' 에 다음 위치를 추가한다.
디폴트로 32bit 환경일 경우에는C:\Program Files\nodejs
으로 64bit 환경일 경우에는 C:\Program Files (x86)\nodejs
require & module.exports
node.js 에서는 js 파일 하나가 하나의 모듈이 된다.
각각의 모듈은 기본적으로 외부에서 접근할 수 없으나, module.exports 를 통해 외부에 오픈할 변수나 함수를 정의할 수 있다.
반대로 require 는 다른 외부 모듈(js) 를 가져올 수 있으며, 해당 모듈에서 module.exports 로 정의한 변수나 함수를 사용할 수 있다.
// user_module.js
var something = module.exports = {};
// demo.js
var usermodule = require('./user_module');
노드는 다음과 같은 기본 모듈(노드 설치에 포함된 모듈)을 가진다. (추가로 설치해서 사용하는 모듈은 확장 모듈이라한다.)
모듈명 | 설명 |
Process | 프로세스에 대한 정보를 담고 잇는 전역 객체다. |
Utilities | 타입 검사, 포맷팅 등의 유틸리티 함수를 제공한다. |
Events | 이벤트 관련 함수를 제공한다. |
Buffers | 바이너리 데이터의 옥텟 스트림(octet stream)을 다루는 모듈이다. |
Streams | 스트림을 다루기 위한 추상 인터페이스다. |
Crypto | 암호화에 대한 함수를 제공한다. |
TLS/SSL | 공개키/개인키 기반인 TLS/SSL 에 대한 함수를 제공한다. |
File System | 파일을 다루는 함수를 제공한다. |
Path | 파일의 경로를 다루는 함수를 제공한다. |
Net | 비동기 네트워크 통신 기능을 제공한다. |
UDP/Datagram Sockets | UDP의 데이터그램 소켓(Datagram Socket) 통신 기능을 제공한다. |
DNS | 도메인 네임 서버를 다루는 함수를 제공한다. |
HTTP | HTTP 서버와 클라이언트 기능을 제공한다. |
HTTPS | HTTPS 서버와 클라이언트 기능을 제공한다. |
URL | URL을 다루는 함수를 제공한다. |
Query Strings | URL의 쿼리 문자열을 다루는 함수를 제공한다. |
Readline | 스트림에서 라인 단위로 읽는 기능을 제공한다. |
Vm | 자바스크립트를 실행하는 기능을 제공한다. |
Child Processes | 자식 프로세스 생성과 관련된함수를 제공한다. |
Assert | 유닛 테스트를 위한 단언문을 제공한다. |
TTY | 터미널이나 콘솔 관련 기능을 제공한다. |
Zlib | zlib 압축 함수를 제공한다. |
OS | 운영체제에 대한 정보를 제공하는 함수를 제공한다. |
Cluster | 여러 노드 프로세스를 실행하는 클러스터 기능을 제공한다. |
Web Server 예제
// webserver.js
var server = require('http');
server.createServer(function(req, res) {
res.writehead(200, {'Content-Type':'text/plain'});
res.end('Hello World\n');
}).listen(3000, 'localhost');
console.log("server stated at http://localhost:3000");
node js 실행
node.js 실행은 간단하다. node 명령어 뒤에 js 파일명을 입력한다. (.js 는 제외)
>node webserver
npm
npm 은 노드를 위한 패키지 매니저다. 노드를 이용하여 확장 모듈을 만들 경우, 확장모듈을 관리 해준다. Java 에서의 Maven 의 역할과 비슷하다.
Maven 의 Central Repository 와 같이, npm 도 중앙 저장소가 존재한다.
NPM Registry : http://search.npmjs.org
수많은 개발자가 위 리파지터리로 모듈을 등록하고 있으며, 우리는 그저 괜찮은거 가져다 쓰면 된다.
npm 으로 설치는 글로벌 설치와 로컬 설치가 있다.
- 글로벌 설치 : 확장 모듈 중 커맨드라인에서 유틸리티 도구처럼 사용할 수 잇는 모듈이다. 설치시 '-g' 옵션을 부여한다.
- 로컬 설치 : 소스에서 사용해야하는 확장 모듈이 경우 사용한다. 로컬에 설치되는 확장 모듈은 애플리케이션 소스코드와 의존성이 있기 때문에 애플리케이션과 함께 관리되어야한다.
로컬 인스톨 예제)
글로벌 설치 예제)