⇒ PEPL์ ํ๋ ์ค์ง๋ฆฌ ์ฝ๋๋ฅผ ํ ์คํธํ๋ ์ฉ๋๋ก๋ ์ข์ง๋ง ์ฌ๋ฌ ์ค์ ์ฝ๋๋ฅผ ์คํํ๊ธฐ๋ ๋ถํธํจ
์ฝ์์์ node [์๋ฐ์คํฌ๋ฆฝํธ ํ์ผ ๊ฒฝ๋ก] ๋ก ์คํ. REPL์ด ์๋ ์ฝ์์์ ์ ๋ ฅํด์ผ ํจ
์ฝ์์์ REPL๋ก ๋ค์ด๊ฐ๋ ๋ช ๋ น์ด๊ฐ node, ๋ ธ๋๋ฅผ ํตํด ํ์ผ์ ์คํํ๋ ๋ช ๋ น์ด๊ฐ node [์๋ฐ์คํฌ๋ฆฝํธ ํ์ผ ๊ฒฝ๋ก]
๋ ธ๋๋ ์ฝ๋๋ฅผ ๋ชจ๋๋ก ๋ง๋ค ์ ์๋ค๋ ์ ์์ ์๋ฐ์คํฌ๋ฆฝํธ์ ๋ค๋ฆ
ํน์ ํ ๊ธฐ๋ฅ์ ํ๋ ํจ์๋ ๋ณ์๋ค์ ์งํฉ
ex) ์ํ์ ๊ด๋ จ๋ ์ฝ๋๋ค๋ง ๋ชจ์์ ๋ชจ๋ ํ๋๋ฅผ ๋ง๋ค ์ ์์
๋ชจ๋์ ์์ฒด๋ก๋ ํ๋์ ํ๋ก๊ทธ๋จ์ด๋ฉด์, ๋ค๋ฅธ ํ๋ก๊ทธ๋จ์ ๋ถํ์ผ๋ก๋ ์ฌ์ฉ ๊ฐ๋ฅ
๋ชจ๋๋ก ๋ง๋ค์ด ๋๋ฉด ์ฌ๋ฌ ํ๋ก๊ทธ๋จ์์ ํด๋น ๋ชจ๋์ ์ฌ์ฌ์ฉ ๊ฐ๋ฅ ⇒ ์๋ฐ์คํฌ๋ฆฝํธ์์ ์ฝ๋ ์ฌ์ฌ์ฉ์ ์ํด ํจ์๋ก ๋ง๋๋ ๊ฒ๊ณผ ๋น์ทํจ
๋ณดํต ํ์ผ ํ๋๊ฐ ๋ชจ๋ ํ๋๊ฐ ๋๋ค. ํ์ผ๋ณ๋ก ์ฝ๋๋ฅผ ๋ชจ๋ํํ ์ ์์ด ๊ด๋ฆฌ๊ฐ ํธํจ
๋ชจ๋์ ๋ง๋ค ๋๋ ๋ชจ๋์ด ๋ ํ์ผ๊ณผ ๋ชจ๋์ ๋ถ๋ฌ์์ ์ฌ์ฉํ ํ์ผ์ด ํ์
//var.js
const odd = "ํ์์
๋๋ค";
const even = "์ง์์
๋๋ค";
module.exports = {
odd,
even,
};
var.js์ ๋ณ์ ๋ ๊ฐ ์ ์ธํ๊ณ module.exports์ ๋ณ์๋ค์ ๋ด์ ๊ฐ์ฒด ๋์ ํจ
์ด ํ์ผ์ ๋ณ์๋ค์ ๋ชจ์๋ ๋ชจ๋๋ก์ ๊ธฐ๋ฅํจ
๋ค๋ฅธ ํ์ผ์์ ์ด ํ์ผ์ ๋ถ๋ฌ์ค๋ฉด module.exports์ ๋์ ๋ ๊ฐ ์ฌ์ฉ ๊ฐ๋ฅ
//func.js
const { odd, even } = require('./var'); // var.js์ module.exports์ ๋ด๊ฒจ ์๋ ๊ฐ์ฒด๋ฅผ ๋ถ๋ฌ์ func.js์์ ์ฌ์ฉ
// ์ซ์์ ํ์ง์ ํ๋ณํ๋ ํจ์ ์ ์ธ
function checkOddOrEven(num) {
if(num % 2){ //ํ์๋ฉด
return odd;
}
return even;
}
// module.exports์ ํจ์ ๋์
module.exports = checkOddOrEven;
require ํจ์ ์์ ๋ถ๋ฌ์ฌ ๋ชจ๋์ ๊ฒฝ๋ก ์์ฑ(๋ค๋ฅธ ํด๋์ ํ์ผ์ ์๋ ๋ชจ๋๋ ์ฌ์ฉ ๊ฐ๋ฅ)
๋ค์๊ณผ ๊ฐ์ด ๋ค๋ฅธ ๋ชจ๋(var.js)์ ์ฌ์ฉํ๋ ํ์ผ์ ๋ค์ ๋ชจ๋(func.js)๋ก ๋ง๋ค ์ ์์
module.exports์๋ ๊ฐ์ฒด ๋ฟ๋ง ์๋๋ผ ํจ์, ๋ณ์๋ ๋์ ๊ฐ๋ฅ
//index.js
const { odd, even } = require("./var");
const checkNumber = require("./func");
function checkStringOddOrEven(str) {
if (str.length % 2) {
//ํ์๋ฉด
return odd;
}
return even;
}
console.log(checkNumber(10));
console.log(checkStringOddOrEven("hello"));
index.js๋ var.js์ func.js ๋ชจ๋ ์ฐธ์กฐ. ๋ชจ๋ ํ๋๊ฐ ์ฌ๋ฌ ๊ฐ์ ๋ชจ๋ ์ฌ์ฉ ๊ฐ๋ฅ
var.js๋ func.js์ index.js์ ๋ ๋ฒ ์ฐ์ ⇒ ๋ชจ๋ ํ๋๊ฐ ์ฌ๋ฌ ๊ฐ์ ๋ชจ๋์ ์ฌ์ฉ๋ ์ ์์
๋ชจ๋๋ก๋ถํฐ ๊ฐ์ ๋ถ๋ฌ์ฌ ๋ ๋ณ์ ์ด๋ฆ ๋ค๋ฅด๊ฒ ์ง์ ๊ฐ๋ฅ(checkOddOrEven ⇒ checkNumber)
//๊ฒฐ๊ณผ
$ node index
์ง์์
๋๋ค
ํ์์
๋๋ค
์ฐธ๊ณ : ๋ ธ๋์์๋ window ๋๋ document ๊ฐ์ฒด ์ฌ์ฉ ๋ถ๊ฐ ⇒ DOM์ด๋ BOM์ด ์์ผ๋ฏ๋ก
์ ์ญ ๊ฐ์ฒด๋ผ๋ ์ ์ ์ด์ฉํ์ฌ ํ์ผ ๊ฐ์ ๊ฐ๋จํ ๋ฐ์ดํฐ๋ฅผ ๊ณต์ ํ ๋ ์ฌ์ฉํ๊ธฐ๋ ํจ.
//globalA.js
module.exports = () => global.message;
//globalB.js
const A = require("./globalA");
global.message = "์๋
ํ์ธ์";
console.log(A());
[์ค๋ช ] globalA ๋ชจ๋์ ํจ์๋ global.message ๊ฐ์ ๋ฐํํจ. globalB.js์์๋ global ๊ฐ์ฒด์ ์์ฑ๋ช ์ด message์ธ ๊ฐ์ ๋์ ํ๊ณ globalA ๋ชจ๋์ ํจ์๋ฅผ ํธ์ถํจ.
// ๊ฒฐ๊ณผ
์๋
ํ์ธ์
[๊ฒฐ๊ณผ] global.message ์ ๊ฐ์ globalA์์๋ ์ ๊ทผ ๊ฐ๋ฅ
//console.js
const string = 'abc';
const number = 1;
const boolean = true;
const obj = {
outside: {
inside: {
key: 'value',
},
},
};
console.time('์ ์ฒด ์๊ฐ');
console.log('ํ๋ฒํ ๋ก๊ทธ์
๋๋ค ์ผํ๋ก ๊ตฌ๋ถํด ์ฌ๋ฌ ๊ฐ์ ์ฐ์ ์ ์์ต๋๋ค');
console.log(string, number, boolean);
console.error('์๋ฌ ๋ฉ์์ง๋ console.error์ ๋ด์์ฃผ์ธ์');
console.table([{ name: '์ ๋ก', birth: 1994 }, { name: 'hero', birth: 1988}]);
console.dir(obj, { colors: false, depth: 2 });
console.dir(obj, { colors: true, depth: 1 });
console.time('์๊ฐ ์ธก์ ');
for (let i = 0; i < 100000; i++) {}
console.timeEnd('์๊ฐ ์ธก์ ');
function b() {
console.trace('์๋ฌ ์์น ์ถ์ ');
}
function a() {
b();
}
a();
console.timeEnd('์ ์ฒด ์๊ฐ');
ํด๋น ํ์ด๋จธ ํจ์๋ค์ ๋ชจ๋ ์์ด๋๋ฅผ ๋ฐํํจ. ์์ด๋๋ฅผ ์ฌ์ฉํ์ฌ ํ์ด๋จธ ์ทจ์ ๊ฐ๋ฅ
//timer.js
const timeout = setTimeout(() => {
console.log('1.5์ด ํ ์คํ');
}, 1500);
const interval = setInterval(() => {
console.log('1์ด๋ง๋ค ์คํ');
}, 1000);
const timeout2 = setTimeout(() => {
console.log('์คํ๋์ง ์์ต๋๋ค');
}, 3000);
setTimeout(() => {
clearTimeout(timeout2);
clearInterval(interval);
}, 2500);
const immediate = setImmediate(() => {
console.log('์ฆ์ ์คํ');
});
const immediate2 = setImmediate(() => {
console.log('์คํ๋์ง ์์ต๋๋ค');
});
clearImmediate(immediate2);
$ node timer
์ฆ์ ์คํ
1์ด๋ง๋ค ์คํ
1.5์ด ํ ์คํ
1์ด๋ง๋ค ์คํ
๋ ํจ์์ ๋ด๊ธด ์ฝ๋ฐฑ ํจ์๋ ์ด๋ฒคํธ ๋ฃจํ๋ฅผ ๊ฑฐ์น ๋ค ์ฆ์ ์คํ๋จ.
ํ์ง๋ง ํญ์ ๋จผ์ ํธ์ถ๋์ง๋ ์๊ธฐ ๋๋ฌธ์ setTimeout(์ฝ๋ฐฑ, 0)์ ์ฌ์ฉํ์ง ์๋ ๊ฒ์ ๊ถ์ฅํจ
๋ ธ๋์์๋ ํ์ผ ์ฌ์ด์ ๋ชจ๋ ๊ด๊ณ๊ฐ ์๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ผ๋ฏ๋ก ๋๋ก ํ์ฌ ํ์ผ์ ๊ฒฝ๋ก๋ ํ์ผ๋ช ์ ์์์ผ ํจ.
๋ ธ๋๋ __filename, __dirname ํค์๋๋ก ๊ฒฝ๋ก์ ๋ํ ์ ๋ณด ์ ๊ณต
ํ์ผ์ __filename, __dirname์ ๋ฃ์ด๋๋ฉด ์คํ ์ ํ์ฌ ํ์ผ๋ช ๊ณผ ํ์ฌ ํ์ผ ๊ฒฝ๋ก๋ก ๋ฐ๋.
// filename.js
console.log(__filename);
console.log(__dirname);
ํ์ง๋ง, ๊ฒฝ๋ก๊ฐ ๋ฌธ์์ด๋ก ๋ฐํ๋๋ฉฐ, \๋ / ๊ฐ์ ๊ฒฝ๋ก ๊ตฌ๋ถ์์ ๋ฌธ์ ๋ ์์ผ๋ฏ๋ก ๋ณดํต ์ด๋ฅผ ํด๊ฒฐํด์ฃผ๋ path ๋ชจ๋๊ณผ ํจ๊ป ์
module ๊ฐ์ฒด ๋ง๊ณ exports ๊ฐ์ฒด๋ก๋ ๋ชจ๋์ ๋ง๋ค ์ ์์
// var.js
exports.odd = "ํ์์
๋๋ค";
exports.even = "์ง์์
๋๋ค";
module.exports๋ก ํ ๋ฒ์ ๋์ ํ๋ ๋์ , ๊ฐ๊ฐ์ ๋ณ์๋ฅผ exports ๊ฐ์ฒด์ ํ๋์ฉ ๋ฃ์.
module.exports์ exports๊ฐ ๊ฐ์ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ๊ธฐ ๋๋ฌธ์ ๋์ผํ๊ฒ ๋์ํจ.
console.log(module.exports == exports) //true
exports ๊ฐ์ฒด์ add ํจ์๋ฅผ ๋ฃ์ผ๋ฉด module.exports์๋ add ํจ์๊ฐ ๋ค์ด๊ฐ๋ค.
module.exports์๋ ์ด๋ค ๊ฐ์ด๋ ๋์ ํด๋ ๋์ง๋ง, exports์๋ ๋ฐ๋์ ๊ฐ์ฒด์ฒ๋ผ ์์ฑ๋ช ๊ณผ ์์ฑ๊ฐ์ ๋์ ํด์ผ ํจ. exports์ ๋ค๋ฅธ ๊ฐ์ ๋์ ํ๋ฉด ๊ฐ์ฒด์ ์ฐธ์กฐ ๊ด๊ณ๊ฐ ๋๊ฒจ ๋ ์ด์ ๋ชจ๋๋ก ๊ธฐ๋ฅํ์ง ์์. exports ์ฌ์ฉ ์์๋ ๊ฐ์ฒด๋ง ์ฌ์ฉํ ์ ์์ผ๋ฏ๋ก module.exports์ ํจ์๋ฅผ ๋์ ํ ๊ฒฝ์ฐ exports๋ก ๋ฐ๊ฟ ์ ์์. ํ ๋ชจ๋์ exports ๊ฐ์ฒด์ module.exports๋ฅผ ๋์์ ์ฌ์ฉํ์ง ์๋ ๊ฒ์ด ์ข์.
// this.js
console.log(this);
console.log(this === module.exports);
console.log(this === exports)
function whatIsThis() {
console.log('function', this === exports, this === global);
}
whatIsThis();
[๊ฒฐ๊ณผ]
$ node this
{}
true
true
function false true
์ต์์ ์ค์ฝํ์ ์กด์ฌํ๋ this๋ module.exports(๋๋ exports ๊ฐ์ฒด)๋ฅผ ๊ฐ๋ฆฌํด. ํจ์ ์ ์ธ๋ฌธ ๋ด๋ถ์this๋ global ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํด
require์ ํจ์์ด๊ณ , ํจ์๋ ๊ฐ์ฒด์ด๋ฏ๋ก ๊ฐ์ฒด๋ก์ ๋ช ๊ฐ์ง ์์ฑ์ ๊ฐ๊ณ ์์
//require.js
console.log('require๊ฐ ๊ฐ์ฅ ์์ ์ค์ง ์์๋ ๋ฉ๋๋ค.');
module.exports = '์ ๋ฅผ ์ฐพ์๋ณด์ธ์.';
require('./var');
console.log('require.cache์
๋๋ค.');
console.log(require.cache);
console.log('require.main์
๋๋ค.');
console.log(require.main === module);
console.log(require.main.filename);
[๊ฒฐ๊ณผ]
[์ํฉ] ๋ ๋ชจ๋ dep1๊ณผ dep2๊ฐ ์๋ก๋ฅผ require ํ๋ค๋ฉด?
[๊ฒฐ๊ณผ] dep1์ module.exports๊ฐ ํจ์๊ฐ ์๋ ๋น ๊ฐ์ฒด๋ก ํ์๋จ ⇒ ์ํ ์ฐธ์กฐ(circular dependency)
์ํ ์ฐธ์กฐ๊ฐ ์์ ๊ฒฝ์ฐ, ์ํ ์ฐธ์กฐ๋๋ ๋์์ ๋น ๊ฐ์ฒด๋ก ๋ง๋ฆ. ์๋ฌ ๋ฐ์ ์์ด ๋ณ๊ฒฝ๋๋ฏ๋ก ์ํ ์ฐธ์กฐ๊ฐ ๋ฐ์ํ์ง ์๋๋ก ๊ตฌ์กฐ๋ฅผ ์ ์ก๋ ๊ฒ์ด ์ค์.
process ๊ฐ์ฒด๋ ํ์ฌ ์คํ๋๊ณ ์๋ ๋ ธ๋ ํ๋ก์ธ์ค์ ๋ํ ์ ๋ณด๋ฅผ ๋ด๊ณ ์์.
์ฌ์ฉ ๋น๋๋ ๋์ง ์์ง๋ง, ์ผ๋ฐ์ ์ผ๋ก ์ด์์ฒด์ ๋ ์คํ ํ๊ฒฝ๋ณ๋ก ๋ค๋ฅธ ๋์์ ํ๊ณ ์ถ์ ๋ ์ฌ์ฉ
์์คํ ์ ํ๊ฒฝ ๋ณ์ ์ ๋ณด๋ฅผ ์ถ๋ ฅํจ. ์์คํ ํ๊ฒฝ ๋ณ์๋ ๋ ธ๋์ ์ง์ ์ํฅ์ ๋ฏธ์น๊ธฐ๋ ํ๋๋ฐ, ๋ํ์ ์ผ๋ก UV_THREADPOOL_SIZE์ NODE_OPTIONS๊ฐ ์์.
NODE_OPTIONS=--max-old-space-size=8192
UV_THREADPOOL_SIZE=8
์ผ์ชฝ์ ํ๊ฒฝ ๋ณ์ ์ด๋ฆ, ์ค๋ฅธ์ชฝ์ ๊ฐ.
์์๋ก ํ๊ฒฝ ๋ณ์ ์ง์ ๊ฐ๋ฅ. process.env๋ ์๋น์ค์ ์ค์ํ ํค๋ฅผ ์ ์ฅํ๋ ๊ณต๊ฐ์ผ๋ก๋ ์ฌ์ฉ๋จ. ์ค์ํ ๋น๋ฐ๋ฒํธ๋ process.env ์์ฑ์ผ๋ก ๋์ฒดํจ.
const secretId = process.env.SECRET_ID;
const secretCode = process.env.SECRET_CODE;
์ด๋ฒคํธ ๋ฃจํ๊ฐ ๋ค๋ฅธ ์ฝ๋ฐฑ ํจ์๋ค๋ณด๋ค nextTick์ ์ฝ๋ฐฑ ํจ์๋ฅผ ์ฐ์ ์ฒ๋ฆฌํ๋๋ก ๋ง๋ฆ.
//nextTick.js
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๋ nextTick์ฒ๋ผ ๋ค๋ฅธ ์ฝ๋ฐฑ๋ค๋ณด๋ค ์ฐ์ ์๋จ.
process.nextTick๊ณผ Promise๋ฅผ **๋ง์ดํฌ๋กํ์คํฌ(microtask)**๋ผ๊ณ ๊ตฌ๋ถ์ง์ด ๋ถ๋ฆ
[๊ฒฐ๊ณผ]
$ node nextTick
nextTick
promise
timeout
immediate
์คํ ์ค์ธ ๋ ธ๋ ํ๋ก์ธ์ค๋ฅผ ์ข ๋ฃํจ. ์๋ฒ ํ๊ฒฝ์์ ์ฌ์ฉํ๋ฉด ์๋ฒ๊ฐ ๋ฉ์ถ๋ฏ๋ก ํน์ํ ๊ฒฝ์ฐ ์ ์ธ ์๋ฒ์์ ์ ์ฌ์ฉํ์ง ์์ง๋ง, ์๋ฒ ์ธ์ ๋ ๋ฆฝ์ ์ธ ํ๋ก๊ทธ๋จ์์๋ ์๋์ผ๋ก ๋ ธ๋๋ฅผ ๋ฉ์ถ๊ธฐ ์ํด ์ฌ์ฉ.
process.exit ๋ฉ์๋์ ์ธ์๋ก ์ฝ๋ ๋ฒํธ๋ฅผ ์ค ์ ์๋ค.
process.exit() ์ด๊ฑฐ๋ process.exit(0)์ด๋ฉด ์ ์ ์ข ๋ฃ
process.exit(1) ์ด๋ฉด ๋น์ ์ ์ข ๋ฃ
๋ง์ฝ ์๋ฌ๊ฐ ๋ฐ์ํด์ ์ข ๋ฃํ๋ ๊ฒฝ์ฐ์ 1์ ๋ฃ์.
1. console.log(__filename); console.log(__dirname);
2.
//var.js
const three = "3์ ์ฝ์์
๋๋ค";
const noThree = "3์ ์ฝ์๊ฐ ์๋๋๋ค";
module.exports = {
three,
noThree,
};
//func.js
const { three, noThree } = require("./var");
function checkthreeOrNothree(num) {
if (num % 3 == 0 || num == 1) {
//3์ ์ฝ์์ด๋ฉด
return three;
}
return noThree;
}
module.exports = checkthreeOrNothree;
// index.js
const checkNumber = require("./func");
console.log(checkNumber(1));
[Node.js] 5์ฅ ํจํค์ง ๋งค๋์ (0) | 2022.10.13 |
---|---|
[Node.js] 4์ฅ http ๋ชจ๋๋ก ์๋ฒ ๋ง๋ค๊ธฐ (0) | 2022.10.06 |
[Node.js] 3์ฅ ๋ ธ๋ ๊ธฐ๋ฅ (0) | 2022.09.29 |
[Node.js] 2์ฅ ์์๋์ด์ผ ํ ์๋ฐ์คํฌ๋ฆฝํธ (0) | 2022.09.19 |
[Node.js] 1์ฅ ๋ ธ๋ ์์ํ๊ธฐ (0) | 2022.09.19 |