[node.js] node.js의 내장 객체들 정리1(global, console, process...)

2019. 12. 8. 23:53카테고리 없음

node.js를 설치하면 기본적으로 사용 가능한 내장 객체를 정리해보겠습니다

 

Global Objects 

이 객체들은 모든 모듈에서 이용 가능합니다. 

 

global

JS에서 window와 같은 전역 객체입니다. 

모듈화 할 때 쓰는 require()도 전역 객체라 그냥 사용할 수 있었습니다.. 

ex) 실제로는 global.require(), global.console() global은 생략 가능

     global.message 같은 여러 속성들이 있다! 전역적으로 사용하는 것은 권고하지 않습니다.(유지 보수의 어려움)

 

console

브라우저의 window객체에 있는 console과 비슷합니다. node.js에서는 global객체 안에 들어있습니다.

 

*자주 사용할 로깅 함수들

console.log('...') : 평범한 로그 출력.

console.error('...') : 에러를 콘솔에 출력

console.dir( object, option ) : 객체를 콘솔에 출력할 때 사용. 

  -- option에 colors를 true로 하면 콘솔에 색 추가하여 보기 편하게 할 수 있습니다

  -- option에 depth는 object안에 깊이를 몇 단계까지 보여줄지 결정 (default : 2)

const object = {
	outside : {
    	inside : {
            key : 'val',
            color : ['red', 'green', 'blue'],
        }
    }
}


console.dir(object, {colors: true, depth : 2});
/*
출력
{ outside: { inside: { key: 'val', color: [Array] } } }
*/

console.dir(object, {colors: true, depth : 3});
/*
출력
{ outside: { inside: { key: 'val', color: [ 'red', 'green', 'blue' ] } } }

*/

 

 

console.trace(lable) : 에러가 어디서 발생했는지 추적. 보통은 에러 위치가 나오지만, 간혹 안 나올 때 사용해볼 만하다.

 

타이머

브라우저에서는 window객체에 있던 setTimeout(), setInterval() 같은 타이머 함수는 노드에서 global에 대신 내장되어 있습니다. + setImmediate() 추가

 

const timeout = setTimeout(()=>{
	console.log('1.5초후 실행')
}, 1500);

const timeout = setTimeout(()=>{
	console.log('3초후 실행?하지않고 clearTimeout으로 제거')
}, 3000);

const interval = setInterval(()=>{
	console.log('초마다 실행')
},1000)

const immediate = setImmediate(()=>{
	console.log('즉시 실행')
});

setTimeout(()=>{
	clearTimeout(timeout2);
    clearInterval(interval);
}, 2500)


const immediate2 = setImmediate(()=>{
	console.log('실행되지 않고 취소됨');
})

/*
output

즉시 실행
초마다 실행
1.5초후 실행
초마다 실행
*/

 

 

__filename 

실행되는 코드의 파일명과 파일을 처리한 절대 경로를 알 수 있다. (String)

(각 모듈에서 실행시키면 해당 모듈 파일에 대한 경로 - 전역x 지역o)

console.log(__filename);
// C:\Users\gurwl\workspace\nodejs\node_study\index.js

 

__dirname

현재 실행되는 파일 경로 정보를 제공 (String)

(각 모듈에서 실행시키면 해당 모듈 파일에 대한 경로 - 전역x 지역o)

console.log(__dirname);
// C:\Users\gurwl\workspace\nodejs\node_study

운영체제의 따라서 폴더 경로가 \ 대신 /로 될 수 있는데 path의 모듈을 사용하거나 따로 바꾸어 처리해줘야 합니다!

 

module , exports

 

 module.exports ={ add , minus } 가 아니라

 exports.add = '더하기';

 exports.minus = '빼기';

 처럼 따로 exports객체에 넣어 모듈을 만들 수 있습니다! 

(

 module.exports와 experts는 같은 객체를 참조하므로!

 단, exports객체 사용할 때 반드시 속성명과 속성값을 대입해야 합니다.

 참조관계를 지켜줘야합니다!

)

 

process

process객체는 현재 노드에 대한 정보를 담고 있습니다. 

 

process.arch : 프로세서 아키텍쳐 정보

process.platform : OS플랫폼 정보 ex) win32, linux

process.pid : 현재 프로세스 아이디! 멀티 프로세스 일 때 구분할 수 있습니다

process.cwd() : 현재 프로세스의 실행 위치

process.execPath : 노드의 경로

process.cpuUsage() : 현재 cpu의 사용량

process.uptime() : 프로세스 실행 후 흐른 시간(초단위)

> process.arch 
'x64'

> process.platform 
'win32' 

> process.pid 
8332 

> process.cwd(); 
'C:\\Users\\gurwl\\workspace\\nodejs\\node_study' 

 

** process.env

사용자의 환경변수를 담고 있는 객체입니다! 굉장히 많은 정보가 출력되는 것을 확인할 수 있습니다.

process.env는 서비스의 중요 키들을 저장하는 공간으로 사용하곤 합니다.

서버나 DB 비밀번호, API 키들을 직접 입려하는 건 위험하므로 환경변수에 직접 속성을 만들어 대체할 수 있습니다.

 

ex) const secretId = process.env.SECRETID;

const secretId = process.env.SECRETID;

 

process.exit([코드])

지정한 code로 프로세스를 종료합니다.

process.exit()  : 생략하면 'success'로 간주하고 코드 0으로 종료합니다 ( =process.exit(0) )

process.exit(1) : 코드 1은 'failure'로 간주하고 비정상 종료합니다.

 

 

process.nextTick(콜백)

이벤트 루프가 다른 콜백 함수보다 nextTick의 콜백을 우선적으로 처리합니다!

setImmediate(()=>{
	console.log('즉시 실행')
})

// resolve된 Promise도 다른 콜백보다 우선되므로 우선순위 확인을 해보자
Promise.resolve().then(()=>{ console.log('Promise 우선순위') })

process.nextTick(()=>{
	console.log('nextTick 우선처리')
})

/*
 output:
 
 nextTick 우선처리
 Promise 우선순위
 즉시 실행 
*/

 

 

[참고]

- node.js교과서 / 조현영님 / 길벗

- http://nodejs.sideeffect.kr/docs/v0.10.35/api/