내장 객체
global
모든 파일에서 접근할 수 있는 전역 객체입니다. global 객체 내부에는 많은 속성이 있어서 REPL을 이용해서 봐야 합니다.
> global |
> global.console |
global 객체 안의 여러 속성들을 확인할 수 있습니다.
globalA.js
module.exports = () => global.message;
globalB.js
const A = require('./globalA');
global.message = '안녕하세요'
console.log(A());
전역 객체를 이용하여 파일 간에 간단한 데이터를 공유할 때 사용합니다.
globalA 모듈의 함수에서 global.message 값을 반환합니다.
console
console 객체는 디버깅과 개발하면서 변수의 값을 확인, 에러 표시, 실행 시간 등을 보기 위해서 사용합니다.
console.log
const string = 'abc';
const number = 1;
const boolean = true;
console.log(string, number, boolean);
- 로그를 콘솔에 표시합니다. 내용 사이에 콤마를 이용하여 연결하여 출력할 수 있습니다.
console.table
console.table([{ name: '제로', birth: 1994}, {name: 'hero', birth: 1988}]);
- 객체 속성들을 테이블 형식으로 표현할 수 있습니다.
console.dir
const obj = {
outside: {
inside: {
key: 'value',
},
},
};
console.dir(obj, { colors: false, depth: 2});
console.dir(obj, { colors: true, depth: 1});
- console.dir(객체, 옵션) 콘솔에 표시한 객체와 옵션을 설정합니다. color는 색을 넣고 depth는 표시할 객체의 단계를 결정합니다.(depth의 default는 2)
console.time
console.time('시간 측정');
for(let i = 0; i < 10000; i++){}
console.timeEnd('시간 측정');
- time과 timeEnd 사이의 시간을 측정합니다.
console.trace
function b() {
console.trace('에러 위치 추적');
}
function a(){
b();
}
a();
- 에러 위치를 추적합니다. 일반적으로 에러 발생 시 위치를 알려주어 잘 사용하지는 않는다고 합니다.
이외에도 다양한 메서드들이 추가되고 있으므로 찾아서 공부해야겠습니다.
타이머
타이머 기능을 제공하는 여러 함수들이 global 객체 안에 들어 있습니다.
setTimeout
const timeout = setTimeout(() => {
console.log('1.5초 후 실행');
}, 1500);
- 주어진 밀리초 이후에 콜백 함수를 실행합니다.
setInterval
const interval = setInterval(() => {
console.log('1초마다 실행')
}, 1000);
- 주어진 밀리초 간격으로 콜백 함수를 반복 실행합니다.
setImmediate
const timeImmediate = setImmediate(() => {
console.log('즉시 실행');
});
- 콜백 함수의 순서에 상관없이 우선적으로 객체를 실행합니다.
이외에도 clearTimeout, clearInterval, clearImmediate와 같은 취소하는 함수들이 있습니다.
__filename, __dirname
노드에서는 파일 사이에 모듈 관계인 경우가 많기 때문에 파일의 경로나 파일명을 알아야 합니다. 이에 노드는 __filename, __dirname이라는 키워드로 경로에 대한 정보를 제공합니다. 파일에 두 키워드를 넣어둘 경우 현재 파일명과 현재 파일 경로로 바뀝니다.
filename.js
console.log(__filename);
console.log(__dirname);
실제로 파일 경로의 파일명과 파일 경로가 출력되는 것을 확인할 수 있습니다.
module, exports, require
이전에는 module 객체의 module.exports를 사용했지만 exports 객체로도 모듈을 만들 수 있습니다.
var2.js
exports.odd = '홀수';
exports.even = '짝수';
각각의 변수를 모듈로 만들어주고
getvar.js
const {odd, even} = require('./var2')
console.log(odd, even)
다른 파일에서 받아서 출력해봅시다.
잘 출력되는 것을 확인할 수 있습니다.
이처럼 동작하는 이유는 module.exports와 exports가 같은 객체를 참조하기 때문입니다. 두 객체가 참조 관계에 있기 때문에 한 모듈에 동시에 사용하지 않는 것이 좋습니다.
Process
프로세스 객체는 현재 실행되고 있는 노드의 프로세스 정보를 담고 있습니다. 객체 안에는 다음과 같은 다양한 속성들이 있습니다.
> process.version | 설치된 노드의 버전 | ex) v14.15.4 |
> process.arch | 프로세서 아키텍처 정보 | ex) x64 |
> process.platform | 운영체제 플랫폼 정보 | ex) win32 |
> process.pid | 현재 프로세스의 아이디 | ex) 11568 |
> process.uptime() | 프로세스가 시작된 후 흐른 시간 (단위: 초) | ex) 1844.3528225 |
> process.execPath | 노드의 경로 | ex) C:/programfiles/node.exe |
> process.cwd() | 현재 프로세스가 실행되는 위치 | ex) C:/nodejs |
> process.cpuUsage() | 현재 cpu 사용량 | ex) { user: 718000, system: 421000 } |
> process.env |
REPL에 process.env를 입력하면 환경 변수 값을 확인할 수 있습니다. 시스템 환경 변수는 노드에 직접적인 영향을 미치기도 합니다.
nextTick
이벤트 루프가 다름 콜백 함수들보다 nextTick의 콜백 함수를 우선적으로 처리하도록 만듭니다.
setImmediate(() => {
console.log('immediate');
});
process.nextTick(() => {
console.log('nextTick');
});
setTimeout(() => {
console.log('timeout');
}, 0);
Promise.resolve().then(() => console.log('promise'));
process.nextTick가 setImmediate과 setTimeout보다 먼저 실행됩니다. resolve 된 Promise도 process.nextTick처럼 우선시 됩니다. 이런 콜백 함수들을 마이크로태스크(microtask)라고 부릅니다.
* 다만 비동기 처리를 할 때 setImmediate보다 process.nextTick를 사용할 수도 있습니다. 하지만 마이크로테스크를 재귀 호출하게 되면 이벤트 루프는 다른 콜백 함수보다 마이크로테스크를 우선적으로 처리하여 콜백 함수들이 실행되지 않을 수도 있습니다.
Exit
실행 중인 노드 프로세스를 종료할 수 있습니다. 서버 환경에서 사용하면 서버가 멈추기 때문에 특수한 경우에만 사용하거나 서버 외의 독립적인 프로그램에서 수동으로 노드를 멈추기 위해 사용합니다.
exit.js
let i = 1;
setInterval(() => {
if (i == 5){
console.log('종료');
process.exit();
}
console.log(i);
i += 1;
}, 1000);
process.exit 메서드는 인수로 코드 번호를 줄 수 있습니다. 위의 코드처럼 인수를 주지 않거나 0으로 주면 정상종료를 뜻하고, 1을 주면 비정상 종료를 뜻합니다. 즉, 에러가 발생할 경우 1을 넣어 종료시켜줍니다.
'Node.Js 정복기' 카테고리의 다른 글
노드의 기능 part 1. (0) | 2021.01.11 |
---|---|
MongoDB 설치 및 기초 (0) | 2021.01.06 |
핵심 개념 이해하기 (0) | 2020.12.28 |