NODE.JS 해보자

2013. 6. 27. 17:51JS&FRONT/NodeJs

 

 우선  NODE.JS 를 설치해야 한단다... 우헹..
전반적으로 번역도 해봤는데.. 그리 어렵지 않은 소개 페이지 였다.
잘 읽었다..

http://nodejs.org/ 에서 Download

To provide a purely evented,

non-blocking infrastructure to

script highly concurrent programs.
Node.js is a platform built on Chrome’s Javascript runtime for easily building fast, scalable network applications. Node.js uses an event-driven, non-blocking I/O model that makes it lightweight and efficient, perfect for data-intensive real-time applications that run across distributed devices.

This simple web server written in Node responds with “Hello World” for every request.

var http = require(‘http’);
http.createSerever(function (req,res){
  res.writeHead(200 , {‘content-Type’ : ‘text/plain’});
  res.end(‘Hello World\n’);
}).listen(1337, “127.0.0.1”);
console.log(‘server running at http://127.0.0.1:1337/’);

 

This is in contrast to today’s more concurrency model where OS threads are employed.
Thread-based networking is relatively inefficient and very difficult to use.

See : http://www.kegel.com/c10k.html and http://bulk.fefe.de/scalable-networking.pdf .

Node will show much better memory efficiency under high-loads than systems which allocate 2mb thread stacks for each connection.

Furthemore, users of Node are free from worries of dead-locking the process – there are no locks.

Almost no function in Node directly performs I/O, so the process never blocks.
Because nothing blocks, less-than-expert programmers are able to develop fast systems.

이것은 OS 스레드에 의해 동시 운영되어지는 오늘날의 모델과는 차이가 있다.
스레드기반 네트워킹은 상대적으로 효율적이지 않고, 매우 사용하기 어렵다.
Node
2mb 스레드 스택을 각각의 접속에 대해 할당하는 시스템보다 더 높은 로드상에서의 효율적인 메모리 환경을 보여줄것이다.더 나아가 노드 사용자들은 프로세스의 데드락의 걱정으로부터 자유다. 어떤 락도 없다.거의 어떤 노드안에 함수는 직접적으로 I/O를 실행하지 않는다, 그래서 프로세스는 절대 블록을 하지 않는다.블록이없는 것, 전문가보다 약간 낮은 프로그래머들은 빠른 시스템을 개발할수 있기 때문이다...

Node is similar in design to and influenced by systems like Ruby’s Event Machine or Python’s Twisted.
Node takes the event model a bit further – it presents the event loop as a language construct instead of as a library. In other systems there is always a blocking call to start the event-loop.
Typically one defines behavior through callbacks at the beginning of a script and at the end starts a server through a blocking call like EventMachine::run().
In Node there is no such start-the event-loop call.
Node simply enters the event loop after executing the input script.
Node exits the event loop when there are no more callbacks to perform.
This behavior is like browser javascript – the event loop is hidden from the user.

HTTP is a first class protocol in Node.
Node’s HTTP library has grown out of the author’s experiences developing and working with web servers.
For example, streaming data through most web frameworks is impossible.
Node attempts to correct these problems in its HTTP parser and API.
Coupled with Node’s purely evented infrastructure, it makes a good foundation for web libraries or frameworks.

But what about multiple-processor concurrency? Aren’t threads necessary to scale programs to multi-core computers?
You can start new processes via child_process.fork() these other processes will be scheduled in parallel.
For load balancing incoming connections across multiple processes use the cluster module.

요기있는 PDF 파일을 꼭 읽어보면 도움이 많이 된다.

2009.11.17 Node.js conference pdf : http://s3.amazonaws.com/four.livejournal/20091117/jsconf.pdf
2010.04.17 Node.js conference pdf : http://nodejs.org/jsconf2010.pdf

To run the server, put the code into a file example.js and execute it with the node program from the command line:
% node example.js
Server running at http://127.0.0.1:1337/
Here is an example of a simple TCP server which listens on port 1337 and echoes whatever you send it

var net = require(‘net’);
var server = net.createServer(function (socket){
 socket.write(‘Echo server\r\n’);
 socket.pipe(socket);
});
server.listen(1337, ‘127.0.0.1’);

 

Node
서버 사이드 자바스크립트, 구글의 자바스크립트 엔진은 V8을 기반으로 구성된 소프트웨어 시스템.
이벤트 기반으로 개발할수 있으며, Non-Blocking I/O를 지원하기 때문에 비동기 프로그래밍 가능.
I/O
부하가 심한 대규모 서비스 개발하기 적합.
자바스크립트의 표준 라이브러리 프로젝트인 CommonJS의 스펙을 따르고 있음.

Node 의 탄생 배경
다수의 연결을 효율적으로 관리하고 비용을 최소화 할수 있는 네트워크 소프트웨어를 개발하는 편리한 방법을 제공하기 위함.
자바스크립트를 서버에서 사용하고자 하는 노력이 반영된 결과.
노드는 서버에서 클라이언트로부터의 요청, 즉 연결을 처리하는 방법을 새로운 개념으로 변경
기존에는 각 연결에 대해서 새로운 스레드를 생성하고 그에 따라 메모리를 할당하여 사용자 요청 처리를 했다면, 노드에서는 각 연결이 하나의 이벤트로서 노드 엔진에서 처리.

Node 에서의 설계 목표
-
함수는 플랫폼의 I/O 에 직접적으로 접속하지 않는다.
-
디스크, 네트워크, 프로세스를 통해 데이터를 받으려면 반드시 콜백을 사용
-
쉬운 네트워크 프로그래밍을 위해 TCP, DNS , HTTP 같은 프로토콜을 지원.
-
다양한 HTTP Feature를 지원.
-
클라이언트 사이드 자바스크립트 프로그래머를 위한 코딩 스타일과 올드 스쿨 프로그래머를 위한 유닉스 스타일을 고수 모두에게 친숙

Node를 지원하는 Paas()
Microsoft Azure, VMWare Cloud Foundry, Joyent no.de …

Why do you use this Node?
이벤트 기반의 비동기 처리 방식의 쉬운 자바스크립트 기반 외에도 확장성 있는 모듈 구조 와 더불어 npm 을 통한 다양한 확장 모듈들로 노드의 보급에 큰 영향을 끼쳤으며, 앞으로 훌륭한 확장 모듈들이 쏟아져 나올 것으로 보인데.

Node Architechture.
Node
C/C++ Javascript 로 만들어 졌다. 대부분은 자바 스크립트로 만들어 졌으며, C/C++은 레이어와 시스템 통합을 위해 사용 되었다.
구글의 V8은 자바스크립트 엔진 위에서 작동한다. 원래 V8은 구글에서 크롬이라는 웹 브라우저를 위해 만든 자바스크립트 엔진이기에 서버를 위한 것은 아니였는데게다가 V8은 크롬의 멀티 프로세스 모델에서 실행되는 것을 목표로 설계되었는데용도 변경된거지..


http://blog.zenika.com/index.php?post/2011/04/10/NodeJS

node Standard library
실질적으로 V8과 연결되어 특정 기능들을 수행 할 수 있도록 도와주는 자바스크립트 기본 라이브러리이다. 이를 통해 노드 바인딩과 연결된다.

node bindings(socket, http, etc..)
C/C++로 구성된 시스템 바인딩 레이어 이다.
소켓 , http 등의 통신 기능이 제공되지만, DOM에 관한 기능은 제공되고 있지 않다.

V8 Engine
V8
자바스크립트 엔진 은 구글에서 개발된 오픈 소스 JIT 가상 머신 형식의 자바스크립트 엔진이다.
구글 크롬 브라우저에 내장되어 있다. Lars Bak 이라는 프로그래머가 개발하였는데, 이 프로그래머는 JVM 을 개발한 인물이다. ECMAScript 3rd Edition 규격을 동작 시킬 수 있으며, C++로 작성.
구글 크롬 브라우저에 내장되어 있지만, 사실은 독립적으로 실행 가능하며, 또한 C++로 작성된 응용 프로그램의 일부로 작동 할 수도 있다.
노드는 이 엔진을 이용하여 자바스크립트로 개발된 노드 애플리케이션을 동작 시킨다.

Thread pool
스레드 풀은 libeio 라는 비동기 I/O 라이브러리로 구성되어 있다.
즉 파일 관련 작업을 수행한다고 보면 된다. 이벤트 기반이 모든 게 비동기로 동작하는 C 언어용 I/O 라이브러리이다. 기본적으로 POSIX API에 기반을 두고 있으며 파일 처리 관련 작업을 수행한다.
파일 관련 처리 작업이란, read, write, open, close, stat , unlink fdatasync, mknod, readdir 등의 작업들을 일컽으며 , 모두 비동기로 처리한다. 다시 말해 이것은 POSIX의 비동기 버전이라고 생각하면 된다. 노드에서의 비동기 입출력 작업들은 모드 이 라이브러리로 동작한다고 생각하면 된다.

Event Loop
이벤트 루프는 libev를 이용하여 구성됨. 다양한 기능을 가진 고성능 이벤트 루프 라이브러리이다.
libevent
라는 라이브러리와 유사하며, 이것이 근거하는 Marc Lehmann 이라는 개발자가 개발하였다. 앞서 설명한 노드의 이벤트 루프가 이것으로 구성되어 있다.

DNS(c-ares)

crypto(OpenSSL)

참조
http://nodejs.org/ 
A Full Javascript Architecture, Part One - NodeJS
(musasin84)님의 정리 자료 : http://blog.naver.com/musasin84?Redirect=Log&logNo=60190359180&from=postView 

할게 많네...