노드에서 모듈을 만드는 방법은 두 가지입니다.
add.js
function add(x, y) {
return x + y;
}
module.exports = add
// 아래처럼 할 수도 있습니다.
module.exports = {
add
}
module.exports = add
를 로드할 때는 {}
가 필요없지만 module.exports = { add }
를 로드할 때는 {}
를 써줘야합니다.
const add = require('./add.js');
const { add } = require('./add.js');
아래와 같이 모듈을 만들 수도 있습니다.
exports.add = function(x, y) {
return x + y;
}
exports
와 module.exports
는 같은 객체를 가르키는 참조값을 갖습니다.
process는 현재 실행되고 있는 노드 프로세스에 대한 정보를 받습니다. 다양한 속성들이 있지만 중요하다고 생각하는 것만 정리해보겠습니다.
이 속성은 환경 변수에 대한 정보를 가집니다. 프로젝트에서 중요한 환경변수나 API 키를 저장하는 공간으로 사용합니다. (절대로 github같은 플랫폼에 업로드 하면 안됩니다. 해킹당하면 유출되기 때문이죠.)
const secretId = process.env.SECRET_ID;
const secretPW = process.env.SECRET_PW;
이벤트 루프가 다른 콜백 함수들보다 nextTick의 콜백 함수를 먼저 처리합니다.
setImmediate(() => {
console.log('immediate');
});
process.nextTick(() => {
console.log('nextTick');
});
setTimeout(() => {
console.log('timeout');
}, 0);
Promise.resolve().then(() => console.log('promise'));
//
nextTick
promise
timeout
immediate
다른 콜백 함수들보다 우선적으로 처리할 수 있는 이유는 콜백 함수가 모이는 태스크 큐가 아닌 마이크로 태스크 큐를 우선적으로 처리하기 때문입니다. 이 마이크로 태스크 큐에는 nextTick
뿐만이 아니라 resolve
된 Promise
있습니다.
- 조현영『Node.js 교과서』, (주)도서출판 길벗(2019년 2월 2일), p.63 ~ 70