본문 바로가기
매일코딩/Node.js

[node.js] 입문

by 인생여희 2017. 3. 7.
반응형

1.node.js ?

웹프로그래밍에는 스레드라는 것이 있다. 스레드는 하나의 프로그램 내부에서 실행되는 실행 흐름 단위를 말한다.


장점

사용자에 대한 응답성 향상

동시에 작업을 완료시킴

 

사용하는 곳

네트워크 웹서버 또는 데이터베이스 통신

시간이 오래걸리는 작업

 

단점

많은 스레드로 코드 실행을 제어하면 복잡해지고 버그가 발생할 수 있다.

스레드를 삭제하려면 삭제할 때 발생할 수 있는 문제와 처리 방법을 알아야 한다.

 

이러한 스레드의 단점을 해결하고자 내부적으로 node.js는 스레드를 알아서 처리하고 외부적으로는 스레드를 신경 쓰지 않고 개발할 수 있게 만든 소프트웨어 플랫폼이다.

 

차이?

기존 웹 서버는 대부분 스레드를 기반으로 하는 동기 방식으로 네트워크 입출력을 처리한다. 반면 node.js는 이벤트를 기반으로 하는 비동기 방식으로 네트워크 입출력을 처리 한다.

동기방식은 작업 요청이 들어올 때마다 스레드를 여러 개 만들어 동시에 일을 처리하는 방식이다. 비동기 방식은 스레드를 단 하나만 사용하지만 이벤트라는 녀석을 사용하므로 빠른 속도로 일을 처리 할 수 있다.

 


2.node.js의 전역객체

 

개념

설명

전역 변수/객체

프로그램 전체에서 사용할 수 있는 변수와 객체를 의미한다.

process 객체

프로그램과 관련된 정보를 나타내는 객체이며, 웹브라우저에서 작동하는 자바스크립트에 존재하지 않는 node.js 만이 가진 객체이다

모듈

기능을 쉽게 사용하고자 메서드와 속성을 미리 정의해 모아 놓은 것

exports

모듈을 생성할 때 사용.



개념

문자열 자료형의 전역변수

__filename 현재 실행 중인 코드의 파일 경로를 나타낸다.

__dirname 현재 실행 중인 코드의 폴더 경로를 나타낸다.

 

전역객체

console 콘솔 화면과 관련된 기능을 다룬다.

exports 모듈과 관련된 기능을 다룬다.

process 프로그램과 관련된 기능을 다룬다.

 

console 객체

메서드

log() - 출력한다.

time() - 시간 측정 시작

timeEnd() - 시간 측정 종료

 

특수문자

%d - 숫자

%s - 문자열

%j - JSON

 

특수문자 

)

console.log('name : %s', '순이'); // 문자열

console.log('age : %d', 4); // 숫자

console.log('%j', [{name:'순이',age:4},{name:'순이', age:4}]);

 


프로그램 실행 시간 예)

// 시간 측정을 시작합니다.

console.time('alpha');

 

var output = 1;

for (var i = 1; i <= 10; i++) {

output *= i;

}

console.log('Result:', output);

 

// 시간 측정을 종료합니다.

console.timeEnd('alpha');

 

process 객체

process 객체는 프로그램과 관련된 정보를 타나내는 객체이며, 웹브라우저에서 작동하는 자바스크립트에 존재하지 않는 Node.js 만이 가진 객체입니다.

 

process 객체의 속성

argv 실행 매개변수를 나태난다.

env 컴퓨터 환경과 관련된 정보를 나타낸다.

version node.js 버전을 나타낸다.

versions node.js와 종속된 프로그램 버전을 나타낸다.

arch 프로세서의 아키텍처를 나타낸다.

platform 플랫폼을 나타낸다.

 

process 객체의 메서드

exit() - 프로그램을 종료한다.

memoryUsage() 메모리 사용 정보 객체를 리턴한다.

uptime() - 현재 프로그램이 실행된 시간을 리턴한다.

 

)

// process.argv

process.argv.forEach(function (item, index) {

// 출력합니다.

console.log(index + ' : ' + typeof (item) + ' : ', item);

// 실행 매개변수에 --exit가 있을 때

if (item == '--exit') {

// 다음 실행 매개변수를 얻습니다.

var exitTime = Number(process.argv[index + 1]);

// 일정 시간 후 프로그램을 종료합니다.

setTimeout(function () {

process.exit();

}, exitTime);

}

});

 

결과

0 : string : C:\Program Files\nodejs\node.exe

1 : string : C:\Users\Administrator\workspace\hello_example\exam.js

2 : string : --exit

3 : string : 10000

 


process 객체의 속성

)

console.log('- process.env:', process.env);

console.log('- process.version:', process.version);

console.log('- process.versions:', process.versions);

console.log('- process.arch:', process.arch);

console.log('- process.platform:', process.platform);

console.log('- process.connected:', process.connected);

console.log('- process.execArgv:', process.execArgv);

console.log('- process.exitCode:', process.exitCode);

console.log('- process.mainModule:', process.mainModule);

console.log('- process.release:', process.release);

console.log('- process.memoryUsage():', process.memoryUsage());

console.log('- process.uptime():', process.uptime());

 

결과

- process.env: { APPDATA: 'C:\\Users\\Administrator\\AppData\\Roaming',

PATH: 'C:/Program Files/Java/jre1.8.0_111/bin/client;C:/Program

Files/Java/jre1.8.0_111/bin;C:/Program Files/Java/jre1.8.0_111/lib/i386;C:\\ProgramData\\Oracle\\Java\\javapath;C:\\Program Files\\Common Files\\Microsoft Shared\\Windows Live;C:\\Windows\\system32;C:\\Windows;C:\\Windows\\System32\\Wbem;C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\;C:\\Program Files\\Windows Live\\Shared;C:\\Program Files\\Intel\\OpenCL SDK\\3.0\\bin\\x86;C:\\Program Files\\Java\\jdk1.8.0_111\\bin;C:\\Program Files\\Java\\jdk1.8.0_111\\bin;C:\\Program Files\\nodejs\\;C:\\Users\\Administrator\\AppData\\Roaming\\npm;C:\\eclipse-jee-mars-2-win32\\eclipse;',

SystemDrive: 'C:',

SystemRoot: 'C:\\Windows',

TEMP: 'C:\\Users\\ADMINI~1\\AppData\\Local\\Temp',

TMP: 'C:\\Users\\ADMINI~1\\AppData\\Local\\Temp' }

- process.version: v6.10.0

- process.versions: { http_parser: '2.7.0',

node: '6.10.0',

v8: '5.1.281.93',

uv: '1.9.1',

zlib: '1.2.8',

ares: '1.10.1-DEV',

icu: '58.2',

modules: '48',

openssl: '1.0.2k' }

- process.arch: ia32

- process.platform: win32

- process.connected: undefined

- process.execArgv: []

- process.exitCode: undefined

- process.mainModule: Module {

id: '.',

exports: {},

parent: null,

filename: 'C:\\Users\\Administrator\\workspace\\hello_example\\exam.js',

loaded: false,

children: [],

paths:

[ 'C:\\Users\\Administrator\\workspace\\hello_example\\node_modules',

'C:\\Users\\Administrator\\workspace\\node_modules',

'C:\\Users\\Administrator\\node_modules',

'C:\\Users\\node_modules',

'C:\\node_modules' ] }

- process.release: { name: 'node',

lts: 'Boron',

sourceUrl: 'https://nodejs.org/download/release/v6.10.0/node-v6.10.0.tar.gz',

headersUrl: 'https://nodejs.org/download/release/v6.10.0/node-v6.10.0-headers.tar.gz',

libUrl: 'https://nodejs.org/download/release/v6.10.0/win-x86/node.lib' }

- process.memoryUsage(): { rss: 13803520,

heapTotal: 5177344,

heapUsed: 2371692,

external: 8236 }

- process.uptime(): 0.138

 

 

exports 객체

node.js 는 모듈을 사용해 기능을 확장한다. 모듈은 기능을 쉽게 사용하고자 메서드와 속성을 미리 정의해 모아 놓은 것이다.

모듈을 생성할 때는 exports 객체를 사용한다. 이렇게 하면 abs() 메서드와 circleArea() 메서드가 생성된다.

 

main.js

//모듈 추출

var module = require('./module.js');

 

//모듈 사용

console.log('%d',module.abs(-100));

console.log('%d',module.circleArea(3));

 


module.js

//절대값을 구하는 메서드

 

exports.abs = function (number){

 

if(0<number){

 

return number;

}

else{

 

return -number;

}

 

};

 

exports.circleArea = function(radius){

 

return radius * radius * Math.PI;

 

};


반응형

'매일코딩 > Node.js ' 카테고리의 다른 글

[node.js] express 모듈 1  (4) 2017.03.12
[node.js] 외부모듈  (2) 2017.03.11
[node.js] HTTP  (0) 2017.03.10
[node.js] 이벤트  (2) 2017.03.09
[node.js] 기본 내장모듈  (2) 2017.03.08

댓글