Node.js Setup
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' 가 보인다