์ƒ์„ธ ์ปจํ…์ธ 

๋ณธ๋ฌธ ์ œ๋ชฉ

[Node.js] 3์žฅ ๋…ธ๋“œ ๊ธฐ๋Šฅ

22-23/22-23 Node.js

by Kimpeep 2022. 9. 22. 10:00

๋ณธ๋ฌธ

728x90

๐Ÿ” REPL

  • ๋…ธ๋“œ๋„ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์™€ ๋น„์Šทํ•œ ์ฝ˜์†”์„ ์ œ๊ณตํ•˜๋Š”๋ฐ, ์ž…๋ ฅํ•œ ์ฝ”๋“œ๋ฅผ ์ฝ๊ณ (Read), ํ•ด์„ํ•˜๊ณ (Eval), ๊ฒฐ๊ณผ๋ฌผ์„ ๋ฐ˜ํ™˜ํ•˜๊ณ (Print), ์ข…๋ฃŒํ•  ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณตํ•œ๋‹ค(Loop)๊ณ  ํ•ด์„œ REPL(Read Eval Print Loop)์ด๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค

   ⇒ PEPL์€ ํ•œ๋‘ ์ค„์งœ๋ฆฌ ์ฝ”๋“œ๋ฅผ ํ…Œ์ŠคํŠธํ•˜๋Š” ์šฉ๋„๋กœ๋Š” ์ข‹์ง€๋งŒ ์—ฌ๋Ÿฌ ์ค„์˜ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ๋Š” ๋ถˆํŽธํ•จ

 

๐Ÿ” JS ํŒŒ์ผ ์‹คํ–‰ํ•˜๊ธฐ

์ฝ˜์†”์—์„œ 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
์ง์ˆ˜์ž…๋‹ˆ๋‹ค
ํ™€์ˆ˜์ž…๋‹ˆ๋‹ค
  • ์—ฌ๋Ÿฌ ํŒŒ์ผ์— ๊ฑธ์ณ ์žฌ์‚ฌ์šฉ๋˜๋Š” ํ•จ์ˆ˜๋‚˜ ๋ณ€์ˆ˜๋ฅผ ๋ชจ๋“ˆ๋กœ ๋งŒ๋“ค์–ด๋‘๋ฉด ํŽธ๋ฆฌํ•จ
  • BUT ๋ชจ๋“ˆ์ด ๋งŽ์•„์ง€๊ณ  ๋ชจ๋“ˆ ๊ฐ„์˜ ๊ด€๊ณ„๊ฐ€ ์–ฝํžˆ๊ฒŒ ๋˜๋ฉด ๊ตฌ์กฐ๋ฅผ ํŒŒ์•…ํ•˜๊ธฐ ์–ด๋ ต๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ์Œ
  • ๋…ธ๋“œ์—์„œ๋Š” ๋Œ€๋ถ€๋ถ„์˜ ํŒŒ์ผ์ด ๋‹ค๋ฅธ ํŒŒ์ผ์„ ๋ชจ๋“ˆ๋กœ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์œผ๋ฏ€๋กœ ๋ชจ๋“ˆ์„ ๋งŒ๋“ค๊ณ  ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ตํ˜€์•ผ ํ•จ
  • ๋ฐฉ๊ธˆ ์“ด require ํ•จ์ˆ˜๋‚˜ module ๊ฐ์ฒด๋Š” ๋…ธ๋“œ์—์„œ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ œ๊ณตํ•˜๋Š” ๋‚ด์žฅ ๊ฐ์ฒด์ด๊ธฐ ๋•Œ๋ฌธ์— ๋”ฐ๋กœ ์„ ์–ธํ•˜์ง€ ์•Š์•„๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ

๐Ÿ” ๋…ธ๋“œ ๋‚ด์žฅ ๊ฐ์ฒด

  • ๋…ธ๋“œ์—์„œ๋Š” ๊ธฐ๋ณธ์ ์ธ ๋‚ด์žฅ ๊ฐ์ฒด์™€ ๋ชจ๋“ˆ์„ ์ œ๊ณตํ•จ
  • ๋”ฐ๋ผ์„œ ์„ค์น˜ํ•˜์ง€ ์•Š์•„๋„ ๋ฐ”๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋ธŒ๋ผ์šฐ์ €์˜ window ๊ฐ์ฒด์™€ ๋น„์Šทํ•จ

๐Ÿ“Œ  global

  • ๋ธŒ๋ผ์šฐ์ €์˜ window์™€ ๊ฐ™์€ ์ „์—ญ ๊ฐ์ฒด์ด๋‹ค. ์ „์—ญ ๊ฐ์ฒด์ด๋ฏ€๋กœ ๋ชจ๋“  ํŒŒ์ผ์—์„œ ์ ‘๊ทผ ๊ฐ€๋Šฅ
  • window.open ๋ฉ”์„œ๋“œ๋ฅผ open์œผ๋กœ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ global๋„ ์ƒ๋žต์ด ๊ฐ€๋Šฅํ•จ.
  • require ํ•จ์ˆ˜๋„ global.require์—์„œ global์ด ์ƒ๋žต๋œ ๊ฒƒ.
  • ๋…ธ๋“œ ์ฝ˜์†”์— ๋กœ๊ทธ๋ฅผ ๊ธฐ๋กํ•˜๋Š” console ๊ฐ์ฒด๋„ ์›๋ž˜ global.console
  • globla ๊ฐ์ฒด ๋‚ด๋ถ€์—๋Š” ๋งŽ์€ ์†์„ฑ๋“ค์ด ๋“ค์–ด์žˆ์Œ. ํ•ด๋‹น ์ ˆ์—์„œ ๋ฐฐ์šธ ๋‚ด์šฉ๋“ค์€ global ๊ฐ์ฒด ์•ˆ์— ์žˆ์œผ๋ฉฐ, ๋‚ด๋ถ€๋ฅผ ๋ณด๋ ค๋ฉด REPL ์‚ฌ์šฉํ•ด์•ผ ํ•จ.

์ฐธ๊ณ : ๋…ธ๋“œ์—์„œ๋Š” 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

  • ๋…ธ๋“œ์—์„œ console๋„ global ๊ฐ์ฒด ์•ˆ์— ๋“ค์–ด ์žˆ์œผ๋ฉฐ, ๋ธŒ๋ผ์šฐ์ €์˜ console๊ณผ ๊ฑฐ์˜ ๋น„์Šทํ•จ.
  • console ๊ฐ์ฒด๋Š” ๋ณดํ†ต ๋””๋ฒ„๊น…์„ ์œ„ํ•ด ์‚ฌ์šฉ.
    • ๋ณ€์ˆ˜ ๊ฐ’์ด ์ œ๋Œ€๋กœ ๋“ค์–ด์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด
    • ์—๋Ÿฌ ๋ฐœ์ƒ ์‹œ ์—๋Ÿฌ ๋‚ด์šฉ์„ ํ‘œ์‹œํ•˜๊ธฐ ์œ„ํ•ด
    • ์ฝ”๋“œ ์‹คํ–‰ ์‹œ๊ฐ„์„ ์•Œ์•„๋ณด๊ธฐ ์œ„ํ•ด
  • ๋Œ€ํ‘œ์ ์œผ๋กœ console.log ๋ฉ”์„œ๋“œ๊ฐ€ ์žˆ์Œ.
//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('์ „์ฒด ์‹œ๊ฐ„');
  • console.time(๋ ˆ์ด๋ธ”): console.timeEnd(๋ ˆ์ด๋ธ”)๊ณผ ๋Œ€์‘๋˜์–ด ๊ฐ™์€ ๋ ˆ์ด๋ธ”์„ ๊ฐ€์ง„ time๊ณผ timeEnd ์‚ฌ์ด์˜ ์‹œ๊ฐ„ ์ธก์ •
  • console.log(๋‚ด์šฉ): ํ‰๋ฒ”ํ•œ ๋กœ๊ทธ๋ฅผ ์ฝ˜์†”์— ํ‘œ์‹œ
  • console.err(์—๋Ÿฌ ๋‚ด์šฉ): ์—๋Ÿฌ๋ฅผ ์ฝ˜์†”์— ํ‘œ์‹œ
  • console.table(๋ฐฐ์—ด): ๋ฐฐ์—ด์˜ ์š”์†Œ๋กœ ๊ฐ์ฒด ๋ฆฌํ„ฐ๋Ÿด์„ ๋„ฃ์œผ๋ฉด, ๊ฐ์ฒด์˜ ์†์„ฑ๋“ค์ด ํ…Œ์ด๋ธ” ํ˜•์‹์œผ๋กœ ํ‘œํ˜„๋จ
  • console.dir(๊ฐ์ฒด, ์˜ต์…˜): ๊ฐ์ฒด๋ฅผ ์ฝ˜์†”์— ํ‘œ์‹œํ•  ๋•Œ ์‚ฌ์šฉ. ์ฒซ๋ฒˆ์งธ ์ธ์ˆ˜๋กœ ํ‘œ์‹œํ•  ๊ฐ์ฒด๋ฅผ, ๋‘ ๋ฒˆ์งธ ์ธ์ˆ˜๋กœ ์˜ต์…˜์„ ๋„ฃ์Œ. ์˜ต์…˜์˜ colors๋ฅผ true๋กœ ํ•˜๋ฉด ์ฝ˜์†”์— ์ƒ‰์ด ์ถ”๊ฐ€๋˜์–ด ๋ณด๊ธฐ๊ฐ€ ํŽธํ•จ. depth๋Š” ๊ฐ์ฒด์•ˆ์˜ ๊ฐ์ฒด๋ฅผ ๋ช‡ ๋‹จ๊ณ„๊นŒ์ง€ ๋ณด์—ฌ์ค„์ง€ ๊ฒฐ์ •. ๊ธฐ๋ณธ๊ฐ’์€ 2.
  • console.trace(๋ ˆ์ด๋ธ”): ์—๋Ÿฌ๊ฐ€ ์–ด๋””์„œ ๋ฐœ์ƒํ–ˆ๋Š”์ง€ ์ถ”์ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•จ.

 

๐Ÿ“Œ  ํƒ€์ด๋จธ

  • setTimeout(์ฝœ๋ฐฑ ํ•จ์ˆ˜, ๋ฐ€๋ฆฌ์ดˆ): ์ฃผ์–ด์ง„ ๋ฐ€๋ฆฌ์ดˆ(1,000๋ถ„์˜ 1์ดˆ) ์ดํ›„์— ์ฝœ๋ฐฑ ํ•จ์ˆ˜ ์‹คํ–‰
  • setInterval(์ฝœ๋ฐฑ ํ•จ์ˆ˜, ๋ฐ€๋ฆฌ์ดˆ): ์ฃผ์–ด์ง„ ๋ฐ€๋ฆฌ์ดˆ๋งˆ๋‹ค ์ฝœ๋ฐฑ ํ•จ์ˆ˜ ๋ฐ˜๋ณต ์‹คํ–‰
  • setImmediate(์ฝœ๋ฐฑ ํ•จ์ˆ˜): ์ฝœ๋ฐฑ ํ•จ์ˆ˜ ์ฆ‰์‹œ ์‹คํ–‰

ํ•ด๋‹น ํƒ€์ด๋จธ ํ•จ์ˆ˜๋“ค์€ ๋ชจ๋‘ ์•„์ด๋””๋ฅผ ๋ฐ˜ํ™˜ํ•จ. ์•„์ด๋””๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํƒ€์ด๋จธ ์ทจ์†Œ ๊ฐ€๋Šฅ

  • clearTimeout(์•„์ด๋””): setTimeout ์ทจ์†Œ
  • clearInterval(์•„์ด๋””): setInterval ์ทจ์†Œ
  • clearImmediate(์•„์ด๋””): setImmediate ์ทจ์†Œ
//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);
  • ์‹คํ–‰ ์ˆœ์„œ:
  1. immediate ์‹คํ–‰ (immediate2๋Š” ๋ฐ”๋กœ clearImmediate๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ทจ์†Œํ–ˆ์œผ๋ฏ€๋กœ ์‹คํ–‰๋˜์ง€ ์•Š์Œ
  2. ์ฝ”๋“œ ์‹คํ–‰ 1์ดˆ ํ›„์— interval์˜ ์ฝœ๋ฐฑ ์‹คํ–‰
  3. ์ฝ”๋“œ ์‹คํ–‰ 1.5์ดˆ ํ›„์— timeout์˜ ์ฝœ๋ฐฑ ์‹คํ–‰
  4. interval์˜ ์ฝœ๋ฐฑ์€ 1์ดˆ๋งˆ๋‹ค ์‹คํ–‰๋˜๋ฏ€๋กœ ์ฝ”๋“œ ์‹คํ–‰ 2์ดˆ ํ›„์—๋„ ์‹คํ–‰
  5. 2.5์ดˆ ํ›„์— clearTimeout๊ณผ clearInterval์ด ๊ฐ๊ฐ timeout2์™€ interval์„ ์ทจ์†Œ
  6. ์ฝ”๋“œ ์‹คํ–‰ 3์ดˆ ํ›„ ๋กœ๊ทธ๊ฐ€ ์•„๋ฌด๊ฒƒ๋„ ์•ˆ ๋‚จ์Œ
  • ๊ฒฐ๊ณผ:
$ node timer
์ฆ‰์‹œ ์‹คํ–‰
1์ดˆ๋งˆ๋‹ค ์‹คํ–‰
1.5์ดˆ ํ›„ ์‹คํ–‰
1์ดˆ๋งˆ๋‹ค ์‹คํ–‰

๐Ÿ“Œ  setImmerdiate(์ฝœ๋ฐฑ), setTimeout(์ฝœ๋ฐฑ, 0)

๋‘ ํ•จ์ˆ˜์— ๋‹ด๊ธด ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋Š” ์ด๋ฒคํŠธ ๋ฃจํ”„๋ฅผ ๊ฑฐ์นœ ๋’ค ์ฆ‰์‹œ ์‹คํ–‰๋จ.

  • ์ฐจ์ด์ : ํŠน์ˆ˜ํ•œ ๊ฒฝ์šฐ์— setImmerdiate๋Š” setTimeout(์ฝœ๋ฐฑ, 0) ๋ณด๋‹ค ๋จผ์ € ์‹คํ–‰๋จ.
    • ํŠน์ˆ˜ํ•œ ๊ฒฝ์šฐ๋ž€ ํŒŒ์ผ ์‹œ์Šคํ…œ ์ ‘๊ทผ, ๋„คํŠธ์›Œํ‚น ๊ฐ™์€ I/O ์ž‘์—…์˜ ์ฝœ๋ฐฑ ํ•จ์ˆ˜ ์•ˆ์—์„œ ํƒ€์ด๋จธ๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๊ฒฝ์šฐ

ํ•˜์ง€๋งŒ ํ•ญ์ƒ ๋จผ์ € ํ˜ธ์ถœ๋˜์ง€๋Š” ์•Š๊ธฐ ๋•Œ๋ฌธ์— setTimeout(์ฝœ๋ฐฑ, 0)์€ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•จ

 

๐Ÿ“Œ  __filename, __dirname

๋…ธ๋“œ์—์„œ๋Š” ํŒŒ์ผ ์‚ฌ์ด์— ๋ชจ๋“ˆ ๊ด€๊ณ„๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์œผ๋ฏ€๋กœ ๋•Œ๋กœ ํ˜„์žฌ ํŒŒ์ผ์˜ ๊ฒฝ๋กœ๋‚˜ ํŒŒ์ผ๋ช…์„ ์•Œ์•„์•ผ ํ•จ.

๋…ธ๋“œ๋Š” __filename, __dirname ํ‚ค์›Œ๋“œ๋กœ ๊ฒฝ๋กœ์— ๋Œ€ํ•œ ์ •๋ณด ์ œ๊ณต

ํŒŒ์ผ์— __filename, __dirname์„ ๋„ฃ์–ด๋‘๋ฉด ์‹คํ–‰ ์‹œ ํ˜„์žฌ ํŒŒ์ผ๋ช…๊ณผ ํ˜„์žฌ ํŒŒ์ผ ๊ฒฝ๋กœ๋กœ ๋ฐ”๋€œ.

// filename.js
console.log(__filename);
console.log(__dirname);

ํ•˜์ง€๋งŒ, ๊ฒฝ๋กœ๊ฐ€ ๋ฌธ์ž์—ด๋กœ ๋ฐ˜ํ™˜๋˜๋ฉฐ, \๋‚˜ / ๊ฐ™์€ ๊ฒฝ๋กœ ๊ตฌ๋ถ„์ž์˜ ๋ฌธ์ œ๋„ ์žˆ์œผ๋ฏ€๋กœ ๋ณดํ†ต ์ด๋ฅผ ํ•ด๊ฒฐํ•ด์ฃผ๋Š” path ๋ชจ๋“ˆ๊ณผ ํ•จ๊ป˜ ์”€

 

๐Ÿ“Œ  module, exports, require

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 ํ•จ์ˆ˜๊ฐ€ ๋“ค์–ด๊ฐ„๋‹ค.

๐Ÿ“Œ  exports ๊ฐ์ฒด ์‚ฌ์šฉ ์‹œ ์ฃผ์˜ํ•  ์ 

module.exports์—๋Š” ์–ด๋–ค ๊ฐ’์ด๋“  ๋Œ€์ž…ํ•ด๋„ ๋˜์ง€๋งŒ, exports์—๋Š” ๋ฐ˜๋“œ์‹œ ๊ฐ์ฒด์ฒ˜๋Ÿผ ์†์„ฑ๋ช…๊ณผ ์†์„ฑ๊ฐ’์„ ๋Œ€์ž…ํ•ด์•ผ ํ•จ. exports์— ๋‹ค๋ฅธ ๊ฐ’์„ ๋Œ€์ž…ํ•˜๋ฉด ๊ฐ์ฒด์˜ ์ฐธ์กฐ ๊ด€๊ณ„๊ฐ€ ๋Š๊ฒจ ๋” ์ด์ƒ ๋ชจ๋“ˆ๋กœ ๊ธฐ๋Šฅํ•˜์ง€ ์•Š์Œ. exports ์‚ฌ์šฉ ์‹œ์—๋Š” ๊ฐ์ฒด๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ module.exports์— ํ•จ์ˆ˜๋ฅผ ๋Œ€์ž…ํ•œ ๊ฒฝ์šฐ exports๋กœ ๋ฐ”๊ฟ€ ์ˆ˜ ์—†์Œ. ํ•œ ๋ชจ๋“ˆ์— exports ๊ฐ์ฒด์™€ module.exports๋ฅผ ๋™์‹œ์— ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ์ข‹์Œ.

๐Ÿ“Œ  ๋…ธ๋“œ์—์„œ this ์‚ฌ์šฉ ์‹œ ์ฃผ์˜ํ•  ์ 

// 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์€ ํ•จ์ˆ˜์ด๊ณ , ํ•จ์ˆ˜๋Š” ๊ฐ์ฒด์ด๋ฏ€๋กœ ๊ฐ์ฒด๋กœ์„œ ๋ช‡ ๊ฐ€์ง€ ์†์„ฑ์„ ๊ฐ–๊ณ  ์žˆ์Œ

โœ… require.cache์™€ require.main

//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);

[๊ฒฐ๊ณผ]

  • require๊ฐ€ ๋ฐ˜๋“œ์‹œ ํŒŒ์ผ ์ตœ์ƒ๋‹จ์— ์œ„์น˜ํ•  ํ•„์š”๊ฐ€ ์—†์œผ๋ฉฐ, module.exports๋„ ์ตœํ•˜๋‹จ์— ์œ„์น˜ํ•  ํ•„์š” ์—†๋‹ค.
  • require.cache ๊ฐ์ฒด์— ํŒŒ์ผ ์ด๋ฆ„์ด ์†์„ฑ๋ช…์œผ๋กœ ๋“ค์–ด๊ฐ€๋ฉฐ, ์†์„ฑ๊ฐ’์œผ๋กœ๋Š” ๊ฐ ํŒŒ์ผ์˜ ๋ชจ๋“ˆ ๊ฐ์ฒด๊ฐ€ ๋“ค์–ด ์žˆ๋‹ค.
  • ํ•œ ๋ฒˆ requireํ•œ ํŒŒ์ผ์€ require.cache์— ์ €์žฅํ•˜์—ฌ ๋‹ค์Œ ๋ฒˆ์— ์žฌ์‚ฌ์šฉํ•จ.
  • ์ƒˆ๋กœ require์„ ์›ํ•œ๋‹ค๋ฉด require.cache ์†์„ฑ ์ œ๊ฑฐํ•˜๊ธฐ. ⇒ ๊ถŒ์žฅ X
  • module.exportsํ–ˆ๋˜ ๋ถ€๋ถ„์ด๋‚˜ ๋กœ๋”ฉ ์—ฌ๋ถ€, ๋ถ€๋ชจ, ์ž์‹ ๋ชจ๋“ˆ ๊ด€๊ณ„๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ์Œ
  • require.main์€ ๋…ธ๋“œ ์‹คํ–‰ ์‹œ ์ฒซ ๋ชจ๋“ˆ์„ ๊ฐ€๋ฆฌํ‚ด
  • ํ˜„์žฌ node require๋กœ ์‹คํ–‰ํ–ˆ์œผ๋ฏ€๋กœ require.js๊ฐ€ require.main
  • require.main ๊ฐ์ฒด์˜ ๋ชจ์–‘์€ require.cache ๋ชจ๋“ˆ ๊ฐ์ฒด์™€ ๊ฐ™์Œ. require.main === moduleํ•˜๋ฉฐ ํ˜„์žฌ ํŒŒ์ผ์ด ์ฒซ ๋ชจ๋“ˆ์ธ์ง€ ์•Œ ์ˆ˜ ์žˆ์Œ.
  • ์ฒซ ๋ชจ๋“ˆ์˜ ์ด๋ฆ„์€ require.main.filename์œผ๋กœ ํ™•์ธ

๐Ÿ” ๋ชจ๋“ˆ ์‚ฌ์šฉ ์‹œ ์ฃผ์˜ํ•  ์ 

[์ƒํ™ฉ] ๋‘ ๋ชจ๋“ˆ dep1๊ณผ dep2๊ฐ€ ์„œ๋กœ๋ฅผ require ํ•œ๋‹ค๋ฉด?

[๊ฒฐ๊ณผ] dep1์˜ module.exports๊ฐ€ ํ•จ์ˆ˜๊ฐ€ ์•„๋‹Œ ๋นˆ ๊ฐ์ฒด๋กœ ํ‘œ์‹œ๋จ ⇒ ์ˆœํ™˜ ์ฐธ์กฐ(circular dependency)

์ˆœํ™˜ ์ฐธ์กฐ๊ฐ€ ์žˆ์„ ๊ฒฝ์šฐ, ์ˆœํ™˜ ์ฐธ์กฐ๋˜๋Š” ๋Œ€์ƒ์„ ๋นˆ ๊ฐ์ฒด๋กœ ๋งŒ๋“ฆ. ์—๋Ÿฌ ๋ฐœ์ƒ ์—†์ด ๋ณ€๊ฒฝ๋˜๋ฏ€๋กœ ์ˆœํ™˜ ์ฐธ์กฐ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋„๋ก ๊ตฌ์กฐ๋ฅผ ์ž˜ ์žก๋Š” ๊ฒƒ์ด ์ค‘์š”.

๐Ÿ“Œ  process

process ๊ฐ์ฒด๋Š” ํ˜„์žฌ ์‹คํ–‰๋˜๊ณ  ์žˆ๋Š” ๋…ธ๋“œ ํ”„๋กœ์„ธ์Šค์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๋‹ด๊ณ  ์žˆ์Œ.

  • process.version : ์„ค์น˜๋œ ๋…ธ๋“œ์˜ ๋ฒ„์ „
  • process.arch : ํ”„๋กœ์„ธ์„œ ์•„ํ‚คํ…์ฒ˜ ์ •๋ณด
  • process.platform: ์šด์˜์ฒด์ œ ํ”Œ๋žซํผ ์ •๋ณด
  • process.pid : ํ˜„์žฌ ํ”„๋กœ์„ธ์Šค์˜ ์•„์ด๋””. ํ”„๋กœ์„ธ์Šค๋ฅผ ์—ฌ๋Ÿฌ ๊ฐœ ๊ฐ€์งˆ ๋•Œ ๊ตฌ๋ถ„ ๊ฐ€๋Šฅ
  • process.uptime() : ํ”„๋กœ์„ธ์Šค๊ฐ€ ์‹œ์ž‘๋œ ํ›„ ํ๋ฅธ ์‹œ๊ฐ„. ๋‹จ์œ„๋Š” ์ดˆ
  • process.execPath : ๋…ธ๋“œ์˜ ๊ฒฝ๋กœ
  • process.cwd() : ํ˜„์žฌ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์‹คํ–‰๋˜๋Š” ์œ„์น˜
  • process.cpuUsage() : ํ˜„์žฌ cpu ์‚ฌ์šฉ๋Ÿ‰

์‚ฌ์šฉ ๋นˆ๋„๋Š” ๋†’์ง€ ์•Š์ง€๋งŒ, ์ผ๋ฐ˜์ ์œผ๋กœ ์šด์˜์ฒด์ œ๋‚˜ ์‹คํ–‰ ํ™˜๊ฒฝ๋ณ„๋กœ ๋‹ค๋ฅธ ๋™์ž‘์„ ํ•˜๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉ

๐Ÿ“Œ  process.env

์‹œ์Šคํ…œ์˜ ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์ •๋ณด๋ฅผ ์ถœ๋ ฅํ•จ. ์‹œ์Šคํ…œ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋Š” ๋…ธ๋“œ์— ์ง์ ‘ ์˜ํ–ฅ์„ ๋ฏธ์น˜๊ธฐ๋„ ํ•˜๋Š”๋ฐ, ๋Œ€ํ‘œ์ ์œผ๋กœ UV_THREADPOOL_SIZE์™€ NODE_OPTIONS๊ฐ€ ์žˆ์Œ.

NODE_OPTIONS=--max-old-space-size=8192
UV_THREADPOOL_SIZE=8

์™ผ์ชฝ์€ ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์ด๋ฆ„, ์˜ค๋ฅธ์ชฝ์€ ๊ฐ’.

  • NODE_OPTIONS : ๋…ธ๋“œ๋ฅผ ์‹คํ–‰ํ•  ๋•Œ์˜ ์˜ต์…˜๋“ค์„ ์ž…๋ ฅ๋ฐ›๋Š” ํ™˜๊ฒฝ ๋ณ€์ˆ˜
    • --max-old-space-size=8192๋Š” ๋…ธ๋“œ์˜ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ 8GB๊นŒ์ง€ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•จ.
  • UV_THREADPOOL_SIZE : ๋…ธ๋“œ์—์„œ ๊ธฐ๋ณธ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ์Šค๋ ˆ๋“œํ’€์˜ ์Šค๋ ˆ๋“œ ๊ฐœ์ˆ˜๋ฅผ ์กฐ์ ˆํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•จ.

์ž„์˜๋กœ ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์ง€์ • ๊ฐ€๋Šฅ. process.env๋Š” ์„œ๋น„์Šค์˜ ์ค‘์š”ํ•œ ํ‚ค๋ฅผ ์ €์žฅํ•˜๋Š” ๊ณต๊ฐ„์œผ๋กœ๋„ ์‚ฌ์šฉ๋จ. ์ค‘์š”ํ•œ ๋น„๋ฐ€๋ฒˆํ˜ธ๋Š” process.env ์†์„ฑ์œผ๋กœ ๋Œ€์ฒดํ•จ.

const secretId = process.env.SECRET_ID;
const secretCode = process.env.SECRET_CODE;

๐Ÿ“Œ  process.nextTick(์ฝœ๋ฐฑ)

์ด๋ฒคํŠธ ๋ฃจํ”„๊ฐ€ ๋‹ค๋ฅธ ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋“ค๋ณด๋‹ค 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() ์ด๊ฑฐ๋‚˜ process.exit(0)์ด๋ฉด ์ •์ƒ ์ข…๋ฃŒ

process.exit(1) ์ด๋ฉด ๋น„์ •์ƒ ์ข…๋ฃŒ

๋งŒ์•ฝ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•ด์„œ ์ข…๋ฃŒํ•˜๋Š” ๊ฒฝ์šฐ์— 1์„ ๋„ฃ์Œ.

 

 

๋นˆ์นธ ํ€ด์ฆˆ

  1. ์ž…๋ ฅํ•œ ์ฝ”๋“œ๋ฅผ ์ฝ๊ณ (Read), ํ•ด์„ํ•˜๊ณ (Eval), ๊ฒฐ๊ณผ๋ฌผ์„ ๋ฐ˜ํ™˜ํ•˜๊ณ (Print), ์ข…๋ฃŒํ•  ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณต(Loop)ํ•˜๋Š” ๊ฒƒ์„ _ _ _ _์ด๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.
  2. _ _ ์ด๋ž€ ํŠน์ •ํ•œ ๊ธฐ๋Šฅ์„ ํ•˜๋Š” ํ•จ์ˆ˜๋‚˜ ๋ณ€์ˆ˜๋“ค์˜ ์ง‘ํ•ฉ์ด๋‹ค. ์—ฌ๋Ÿฌ ํ”„๋กœ๊ทธ๋žจ์— _ _ ์„ _ _ _ ํ•  ์ˆ˜ ์žˆ๋‹ค.
  3. module ๊ฐ์ฒด ๋ง๊ณ  _ _ _ _ _ _ _ ๊ฐ์ฒด๋กœ๋„ ๋ชจ๋“ˆ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.
  4. ๋ธŒ๋ผ์šฐ์ €์˜ window์™€ ๊ฐ™์€ ์ „์—ญ ๊ฐ์ฒด๋ฅผ _ _ _ _ _ _ ๋ผ๊ณ  ํ•œ๋‹ค.
  5. _ _ _ _ _ _ _ _ _ _ _ (์ฝœ๋ฐฑ ํ•จ์ˆ˜, ๋ฐ€๋ฆฌ์ดˆ) ํ•จ์ˆ˜๋Š” ์ฃผ์–ด์ง„ ๋ฐ€๋ฆฌ์ดˆ๋งˆ๋‹ค ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ ๋ฐ˜๋ณต ์‹คํ–‰ํ•œ๋‹ค.
  6. _ _ _ _ _ _ _ ๊ฐ์ฒด๋Š” ํ˜„์žฌ ์‹คํ–‰๋˜๊ณ  ์žˆ๋Š” ๋…ธ๋“œ ํ”„๋กœ์„ธ์Šค์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๋‹ด๊ณ  ์žˆ๋‹ค.
  7. process.nextTick๊ณผ Promise๋ฅผ _ _ _ _ _ _ _ ๋ผ๊ณ  ๊ตฌ๋ถ„์ง€์–ด ๋ถ€๋ฆ„

 

์ฝ”๋“œ ๋ฌธ์ œ

  1. ํ˜„์žฌ ํŒŒ์ผ๋ช…๊ณผ ํ˜„์žฌ ํŒŒ์ผ์˜ ๊ฒฝ๋กœ๋ฅผ ์ฝ˜์†”์— ์ถœ๋ ฅํ•ด๋ณด์„ธ์š” (2๊ฐ€์ง€ ๋ฐฉ๋ฒ• ์‚ฌ์šฉ)
  2. ์–ด๋–ค ์ˆ˜๊ฐ€ 3์˜ ์•ฝ์ˆ˜์ธ์ง€ ์•„๋‹Œ์ง€ ํ™•์ธํ•˜๋Š” ๋ชจ๋“ˆ์„ ์ž‘์„ฑํ•ด๋ณด์„ธ์š”. (module.exports ํ™œ์šฉ)

 

๋นˆ์นธ ํ€ด์ฆˆ ๋‹ต

๋”๋ณด๊ธฐ
  1. REPL
  2. ๋ชจ๋“ˆ, ๋ชจ๋“ˆ, ์žฌ์‚ฌ์šฉ
  3. exports
  4. global
  5. setInterval
  6. process
  7. ๋งˆ์ดํฌ๋กœํƒœ์Šคํฌ(microtask)

 

์ฝ”๋“œ ๋ฌธ์ œ ๋‹ต

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 

Editor : dori

728x90

๊ด€๋ จ๊ธ€ ๋”๋ณด๊ธฐ