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 |
댓글