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교과서 / 조현영님 / 길벗