Node.js/Setup

Node.js Setup

Soul-Learner 2015. 5. 14. 12:34

Node.js 소개 및 윈도우에 설치 후 테스트까지 안내



Google Chrome 의 성장배경

 - V8 자바스크립트 엔진 개발/Chrome 에 내장

 - JIT (Just In Time) 컴파일러 채택

 - 자바스크립트의 획기적 성능향상



Node.js 탄생배경

 - 2009년 라이언 달, V8엔진을 서버에서 사용할 수 있는 환경 구성



Node.js의 장점

 - Node.js 자체로 HTTP 서버기능(별도의 웹서버 불필요)

 - 자바스크립트의 간결함

 - 월등한 성능

 - 단일 쓰레드

 - Non-Blocking IO

 - WebSocket

 - 생산성



Node.js 특징

 - 실행환경: 웹브라우저가 아닌 서버

 - 웹서버를 대체

 - NPM(Node Packaged Modules) 사용으로 이미 개발되어 공개된 모듈을 인터넷에서 찾아서 설치할 수 있음

 - NPM을 사용하여 생산성 향상

 - 단일 쓰레드, Non-Blocking 방식



단일 쓰레드

 - 쉽고 개발시간이 적게 소요

 - Non-Blocking 지원 안됨



다중 쓰레드

 - 어렵고 개발시간이 많이 소요

 - Non-Blocking 지원됨



단일 쓰레드, Non-Blocking 모델

 - 내부적으로는 Worker 쓰레드와 Main 쓰레드, 즉 다중 쓰레드로 작동함

 - 작업시간이 많이 소요되는 기능은 Worker 쓰레드로 실행하고 그 리턴값을 다시 Main 쓰레드로 전달함

 - 개발자는 단일 쓰레드 환경에서 작업하지만 실행시는 다중 쓰레드 환경에서 실행됨



Blocking, Non-Blocking 예제

<!DOCTYPE html>

<html>

<head>

<meta charset="EUC-KR">

<title>Blocking, Non-Blocking</title>

<script type="text/javascript">


window.addEventListener('load', function(e){

alert('Web Page Loaded');


var bt = document.getElementById('bt1');

bt.addEventListener('click', function(e){

alert('bt1 clicked');

});

bt = document.getElementById('bt2');

bt.addEventListener('click', bt2Handler);

alert('Button Listener added');

});


function bt2Handler(e){

console.log('bt2 clicked');

service(); // Blocking

console.log('service() completed');

}


function service(){

for(var i=0;i<100;i++){

console.log('service('+i+')');

}

}

</script>

</head>

<body>

<p>

<button id="bt1">눌러보세요</button>

<p>

<button id="bt2">두번째 버튼</button>

</body>

</html>



윈도우에 설치

 - 접속: https://nodejs.org/download/

 - 다운로드 : Windows Installer (.msi) 32-bit  64-bit

 - Windows Binary (.exe)는 npm 이 포함되지 않음

 - 현재버전 : node-v0.12.2-x64.msi

 - msi 파일을 더블클릭하여 디폴트 설정으로 설치



설치 후 Hello World 테스트

 - 다음과 같은 코드를 작성하여 hello.js 으로 저장한다

console.log('Hello World');



 - 명령 프롬프트에서 다음과 같이 실행한다

D:\NodeProjects>node hello.js

Hello World


D:\NodeProjects>



웹브라우저를 이용한 요청/응답 테스트

 - 다음과 같이 HTTP 프로토콜을 사용하여 대기하다가 HTTP 클라이언트의 요청이 전달되면 'Hello World' 를 전달하는 기능을 작성한다

var http = require('http');


var server = http.createServer(function (req, res) {

  res.writeHead(200, { 'Content-Type' : 'text/plain' });

  res.end('안녕 World');

});


server.listen(8888);


console.log('HTTP Server waiting at port 8888');


 - 위의 기능을 웹브라우저에서 요청하려면, 웹브라우저 주소창에 http://localhost:8888/hello_server.js 입력/엔터

 - 요청결과 웹브라우저에 화면에 'Hello World' 가 보인다