3. JavaScript 활용의 확산
구글의 Chromium 프로젝트를 위한 V8 엔진 개발
브라우저 성능 비약적인 발전, 오픈소스로 인한 타 분야 적용 가능성 대두
오픈소스 JIT(Just In Time) 가상 머신
오픈소스 JavaScript 엔진
크롬 브라우저에 탑재
실행하기 전 기계어로 컴파일
JavaScript 처리 성능 향상
인라인 캐싱(Inline Caching) 최적화 기법 적용
4. Node.JS
확장성 있는 네트워크 앱(서버)을 개발하는데 사용되는 S/W 플랫폼 임
내장 http 라이브러리로 별도의 웹 서버 없이 동작 가능 함
JavaScript 를 이용한 언어
Web, Server, H/W 를 한번에
클라이언트, 서버, 하드웨어 개발이 가능
Socket.IO 를 통한 손쉬운 실시간 통신 가능
H2M, M2M, H2H 을 한번에
H2H, H2M, M2M 모두 쉽게 구현 가능
NPM 을 통한 350,000 여개의 라이브러리
JavaScript, Node.JS 의 강력한 지원
Github, Stackoverflow 의 풍부한 JS 관련 자료
5. Node.JS with Hardware
운영체제가 있는 시스템에 설치 가능 -> 마이크로컴퓨터에 탑재 가능
하드웨어 제어용 API 제공(SerialPort, WiringPi) -> Things 제작 가능
+ Hardware
6. Event-Loop
Non-blocking I/O 와 단일 스레드 이벤트 루프를 통한 높은 처리 성능
이는 I/O 처리가 많은 프로그래밍에 특히 효율적 임
Event Loop
Event
Event
Event
Event
Event
Event Queue Thread Pool
file system
network
process
other
< 14CACHE 250RAM 41,000,000Disk 240,000,000Network
13. 웹 서버 구축하기
HTTP 는 HTML 페이지 및 파일을 전달하는데 쓰이는 프로토콜 임
HTTP 웹 서버와 클라이언트를 생성하는 것과 관련된 기능을 담당
14. Hello Server
var http = require('http');
http.createServer(function(req, res){
res.writeHead(200, {'Content-Type' : 'text/html'});
res.end('Hello World!');
}).listen(80,'127.0.0.1');
console.log('Server is running!');
기존 프로그램은 서버 어플리케이션 개발이 어려웠으나,
Node.JS 에서는 단 몇 줄만으로 서버 구축을 할 수 있음
16. 내장 모듈 Process
프로그램과 관련된 정보를 나타내는 객체로, 브라우저에 존재하지 않음
메소드/변수 명 설명
argv 실행 매개변수, 어떤 파일에서 실행된 것인지 알려줌
env 컴퓨터 환경 관련 정보
version NodeJS 정보 반환 (ex 0.12.01)
arch 프로그램 아키텍처 (ex 32bit, 64bit)
platform 플랫폼
memoryUsage() 메모리 사용량
uptime() 프로그램이 실행된 시간
exit() 프로그램 종료
17. 내장 모듈 OS
운영체제와 관련된 유틸리티 함수. require(‘os’) 로 정의하여 사용 함.
메소드 명 설명
tmpdir() 시스템의 기본 임시 폴더를 반환
hostname() 운영 체제의 호스트 이름
type() 운영 체제의 이름
platform() 운영체제
arch() CPU 아키텍쳐
uptime() 운영체제가 실행된 시간
loadavg() 운영체제 Load Average
totalmem() 메모리
freemem() 가용 메모리
cpus() cpu
getNetworkInterfaces() 네트워크 환경
19. 파일 쓰기/읽기
간단하게 파일을 읽고 쓸 수 있음. 동기식, 비 동기식 방법 모두 지원 함
상황에 따라 맞는 방식을 선택해야 함.
var fs = require('fs');
// Sync Write
fs.writeFileSync('hello1.txt','Hello World');
// Async Write
fs.writeFile('hello1.txt','Hello World', function(err){
if(err) { throw err; }
});;
// Sync read
var data = fs.readFileSync('hello1.txt','utf8');
console.log(data);
// Async read
fs.readFile('hello2.txt','utf8', function(err, data){
if(err){ throw err; }
console.log(data);
});;
20. 디렉토리 관리
디렉토리를 읽고/쓰고/삭제 하는 다양한 동기/비동기 라이브러리 제공.
fs.stat() 함수를 이용하여 다양한 파일에 대한 정보를 획득 가능
var fs = require('fs');
var path = '/';
fs.readdir(path, function(err, files){
if(err) throw err;
files.forEach(function(file){
console.log(path + file);
fs.stat(path + file, function(err, stats){
console.log(stats);
});
});
});
fs.mkdir('/nodejs',0666, function(err){
if(err) throw err;
fs.rmdir('/nodejs', function(err){
if(err) throw err;
}
});
21. 파일 실행
파일 실행을 위해 exec와 spawn 을 사용할 수 있음.
실행 중인 정보를 받기 위해서는 spawn, 결과만 받을 때는 exec를 사용함
var exec = require('child_process').exec;
var spawn = require('child_process').spawn;
exec('ver', function(err, stdout, sterr){
if(err) throw err;
console.log(stdout);
});
var proc = spawn('netstat', ['http://www.circul.us']);
proc.on('exit', function(){
// todo after exit program
});
proc.stdout.on('data', function(data){
console.log(data);
});
proc.stderr.on('data', function(data){
console.log(data);
});