모듈을 만들 때 module.exports만 사용했지만, module 객체말고 exports 객체로도 모듈을 만들 수 있다.
[ var.js ]
exports.odd = '홀수입니다.'
exports.even = '짝수입니다.'
동일하게 동작하는 이유는 module.exports와 exports가 같은 객체를 참조하기 때문.
실제로 module.exports === exports를 하면 true가 나온다.
process 객체는 현재 실행되고 있는 노드 프로세스에 대한 정보를 담고 있다.
execPath는 노드의 경로이고
cwd()는 현재 프로세스가 실행되는 위치이다.
REPL에 process.env를 입력하면 매우 많은 정보가 출력된다. 이 정보들은 시스템의 환경 변수임을 알 수 있다.
process.env는 서비스의 중요한 키를 저장하는 공간으로도 사용된다. 서버나 데이터베이스의 비밀번호와 각종 API 키를 코드에 직접 입력하는 위험하기 때문이다!
const secretId = process.env.SECRET_ID;
const secretKey = process.env.SECRET_KEY;
process.env에 넣는 방법은 운영체제마다 차이가 있지만, dotenv를 사용하면 할 수 있다. 그건 나중에 공부 !
이벤트 루프가 다른 콜백 함수들보다 nextTick의 콜백 함수를 우선으로 처리하도록 만든다.
// nextTick.js
setImmediate(() => {
console.log('immediate');
});
process.nextTick(() => {
console.log('nextTick');
});
setTimeout(() => {
console.log('timeout');
}, 0);
Promise.resolve().then(() => console.log('promise'));
$ node nextTick
nextTick
promise
timeout
immediate
코드 맨 밑에 Promise를 넣은 이유는 resolve된 Promise도 nextTick처럼 다른 콜백들보다 우선시 되기 때문이다. 그래서 process.nextTick와 Promise를 마이크로태스크(microtask)라고 따로 구분지어 부른다.
실행 중인 노드 프로세스를 종료.
서버가 멈추기에 서버에서는 거의 사용이 되지 않지만, 서버 외의 독립적인 프로그램에서는 수동으로 노드를 멈추게 하기 위해 사용한다.
process.exit 메서드는 인자로 코드 번호를 줄 수 있다. 인자를 주지 않거나 0이면 정상 종료를 뜻하고, 1을 주면 비정상 종료를 뜻한다. 만약 에러가 발생해서 종료하는 경우에는 1을 넣어주면 된다.