๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

Dev.log/Node.js

[Node.js ๊ต๊ณผ์„œ] #3. ๋…ธ๋“œ ๋‚ด์žฅ ๊ฐ์ฒด ์•Œ์•„๋ณด๊ธฐ

๋…ธ๋“œ ๋‚ด์žฅ ๊ฐ์ฒด ์•Œ์•„๋ณด๊ธฐ

๋…ธ๋“œ์—์„œ๋Š” ๊ธฐ๋ณธ์ ์ธ ๋‚ด์žฅ ๊ฐ์ฒด์™€ ๋‚ด์žฅ ๋ชจ๋“ˆ์„ ์ œ๊ณตํ•œ๋‹ค. 

1. global ๊ฐ์ฒด

global ๊ฐ์ฒด : ๋ธŒ๋ผ์šฐ์ €์˜ window์™€ ๊ฐ™์€ ์ „์—ญ ๊ฐ์ฒด

์ „์—ญ ๊ฐ์ฒด์ด๋ฏ€๋กœ ๋ชจ๋“  ํŒŒ์ผ์—์„œ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค. ๋˜ํ•œ, window.open ๋ฉ”์„œ๋“œ๋ฅผ ๊ทธ๋ƒฅ open์œผ๋กœ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ global๋„ ์ƒ๋žตํ•  ์ˆ˜ ์žˆ๋‹ค. 

ex. global.require → require

ex. global.console → console

 

* ๋…ธ๋“œ์˜ window, document ๊ฐ์ฒด

๋…ธ๋“œ์—๋Š” DOM์ด๋‚˜ BOM์ด ์—†์–ด window์™€ document ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋…ธ๋“œ์—์„œ window ๋˜๋Š” document๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

 

global ๊ธฐ๋Šฅ ์‚ฌ์šฉํ•˜๊ธฐ

์ „์—ญ ๊ฐ์ฒด๋ผ๋Š” ์ ์„ ์ด์šฉํ•˜์—ฌ ๊ฐ„๋‹จํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ํŒŒ์ผ๋ผ๋ฆฌ ๊ณต์œ ํ•ด๋ณด๊ธฐ.

 

 

 

2. console

console๋„ global ๊ฐ์ฒด ์•ˆ์— ๋“ค์–ด์žˆ๋‹ค. console ๊ฐ์ฒด๋Š” ๋ณดํ†ต ๋””๋ฒ„๊น…์„ ์œ„ํ•ด์„œ ์‚ฌ์šฉ๋œ๋‹ค.

  • console.time(๋ ˆ์ด๋ธ”) : console.timeEnd(๋ ˆ์ด๋ธ”)๊ณผ ๋Œ€์‘๋˜์–ด ๊ฐ™์€ ๋ ˆ์ด๋ธ”์„ ๊ฐ€์ง„ tim๊ณผ timeEnd ์‚ฌ์ด์˜ ์‹œ๊ฐ„์„ ์ธก์ •ํ•œ๋‹ค.
  • console.log(๋‚ด์šฉ) : ํ‰๋ฒ”ํ•œ ๋กœ๊ทธ๋ฅผ ์ฝ˜์†”์— ํ‘œ์‹œํ•œ๋‹ค. console.log(๋‚ด์šฉ, ๋‚ด์šฉ, ...) ์ฒ˜๋Ÿผ ์—ฌ๋Ÿฌ ๋‚ด์šฉ์„ ๋™์‹œ์— ํ‘œ์‹œํ•  ์ˆ˜๋„ ์žˆ๋‹ค.
  • console.error(์—๋Ÿฌ ๋‚ด์šฉ) : ์—๋Ÿฌ๋ฅผ ์ฝ˜์†”์— ํ‘œ์‹œํ•œ๋‹ค.
  • console.dir(๊ฐ์ฒด, ์˜ต์…˜) : ๊ฐ์ฒด๋ฅผ ์ฝ˜์†”์— ํ‘œ์‹œํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค. ์ฒซ ๋ฒˆ์งธ ์ธ๋‹ค๋กœ ํ‘œ์‹œํ•  ๊ฐ์ฒด๋ฅผ ๋„ฃ๊ณ , ๋‘ ๋ฒˆ์งธ ์ธ์ž๋กœ ์˜ต์…˜์„ ๋„ฃ๋Š”๋‹ค. ์˜ต์…˜์˜ colors๋ฅผ true๋กœ ํ•˜๋ฉด ์ฝ˜์†”์— ์ฑ…์ด ์ถ”๊ฐ€๋˜์–ด ๋ณด๊ธฐ๊ฐ€ ํ•œ๊ฒฐ ํŽธํ•ด์ง„๋‹ค. depth๋Š” ๊ฐ์ฒด ์•ˆ์˜ ๊ฐ์ฒด๋ฅผ ๋ช‡ ๋‹จ๊ณ„๊นŒ์ง€ ๋ณด์—ฌ์ค„์ง€๋ฅผ ๊ฒฐ์ •ํ•œ๋‹ค. (๊ธฐ๋ณธ๊ฐ’์€ 2์ด๋‹ค.)
  • console.trace(๋ ˆ์ด๋ธ”) : ์—๋Ÿฌ๊ฐ€ ์–ด๋””์„œ ๋ฐœ์ƒํ–ˆ๋Š”์ง€ ์ถ”์ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค€๋‹ค. ๋ณดํ†ต์€ ์—๋Ÿฌ ๋ฐœ์ƒ ์‹œ ์—๋Ÿฌ ์œ„์น˜๋ฅผ ์•Œ๋ ค์ฃผ๋ฏ€๋กœ ์ž์ฃผ ์‚ฌ์šฉํ•˜์ง€๋Š” ์•Š์ง€๋งŒ, ์œ„์น˜๊ฐ€ ๋‚˜์˜ค์ง€ ์•Š๋Š”๋‹ค๋ฉด ์‚ฌ์šฉํ•  ๋งŒ ํ•˜๋‹ค.

 

3. ํƒ€์ด๋จธ

ํƒ€์ด๋จธ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” ํ•จ์ˆ˜์ธ setTimeout, setInterval, setImmediately๋Š” ๋…ธ๋“œ์—์„œ window ๋Œ€์‹  global ๊ฐ์ฒด ์•ˆ์— ๋“ค์–ด์žˆ๋‹ค.

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

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

  • clearTimeout(์•„์ด๋””) : setTimeout์„ ์ทจ์†Œํ•œ๋‹ค.
  • clearInterval(์•„์ด๋””) : setInterval์„ ์ทจ์†Œํ•œ๋‹ค.
  • clearImmediate(์•„์ด๋””) : setImmediate๋ฅผ ์ทจ์†Œํ•œ๋‹ค.

 

 

  • ์ œ์ผ ๋จผ์ € ์‹คํ–‰๋˜๋Š” ๊ฒƒ์€ immediate์ด๋‹ค. immediate2๋Š” ๋ฐ”๋กœ clearImmediate๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ทจ์†Œํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์‹คํ–‰๋˜์ง€ ์•Š๋Š”๋‹ค.
  • ์ฝ”๋“œ ์‹คํ–‰ 1์ดˆ ํ›„์—๋Š” interval์˜ ์ฝœ๋ฐฑ์ด ์‹คํ–‰๋œ๋‹ค.
  • ์ฝ”๋“œ ์‹คํ–‰ 1.5์ดˆ ํ›„์—๋Š” timeout์˜ ์ฝœ๋ฐฑ์ด ์‹คํ–‰๋œ๋‹ค.
  • interval์˜ ์ฝœ๋ฐฑ์€ 1์ดˆ๋งˆ๋‹ค ์‹คํ–‰๋˜๋ฏ€๋กœ ์ฝ”๋“œ ์‹คํ–‰ ํ›„ 2์ดˆ๊ฐ€ ์ง€๋‚ฌ์„ ๋•Œ์—๋„ ์ฝœ๋ฐฑ์ด ์‹คํ–‰๋œ๋‹ค.
  • 2.5์ดˆ๊ฐ€ ์ง€๋‚ฌ์„ ๋•Œ clearTimeout๊ณผ clearInterval์ด ๊ฐ๊ฐ timeout2์™€ interval์„ ์ทจ์†Œํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ์ฝ”๋“œ ์‹คํ–‰ 3์ดˆ ํ›„์—๋Š” ๋กœ๊ทธ๊ฐ€ ์•„๋ฌด๊ฒƒ๋„ ๋‚จ์ง€ ์•Š๋Š”๋‹ค.

 

4. __filename, __dirname

๋…ธ๋“œ์—์„œ๋Š” ํŒŒ์ผ ์‚ฌ์ด์˜ ๋ชจ๋“ˆ ๊ด€๊ณ„๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์•„ ํ˜„์žฌ ํŒŒ์ผ์˜ ๊ฒฝ๋กœ๋‚˜ ํŒŒ์ผ๋ช…์„ ์•Œ์•„์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค. ๋…ธ๋“œ๋Š” __filename, __dirname์ด๋ผ๋Š” ํ‚ค์›Œ๋“œ๋กœ ๊ฒฝ๋กœ์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•œ๋‹ค.

 

 

5. module, exports

๋ชจ๋“ˆ์„ ๋งŒ๋“ค ๋•Œ module.exports ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ exports ๊ฐ์ฒด๋กœ๋„ ๋ชจ๋“ˆ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

 

 

 

  • module.exports๋กœ ํ•œ ๋ฒˆ์— ๋Œ€์ž…ํ•˜๋Š” ๋Œ€์‹ , ๊ฐ๊ฐ์˜ ๋ณ€์ˆ˜๋ฅผ exports ๊ฐ์ฒด์— ํ•˜๋‚˜์”ฉ ๋„ฃ์—ˆ๋‹ค. ๋™์ผํ•˜๊ฒŒ ๋™์ž‘ํ•˜๋Š” ์ด์œ ๋Š” module.exports์™€ exports๊ฐ€ ๊ฐ™์€ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์‹ค์ œ๋กœ console.log(module.exports === exports)๋ฅผ ํ•˜๋ฉด true๊ฐ€ ๋‚˜์˜จ๋‹ค. ๋”ฐ๋ผ์„œ exports ๊ฐ์ฒด์— add ํ•จ์ˆ˜๋ฅผ ๋„ฃ์œผ๋ฉด module.exports์—๋„ add ํ•จ์ˆ˜๊ฐ€ ๋“ค์–ด๊ฐ„๋‹ค.

6. process

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

 

1) process.env

 

์‹œ์Šคํ…œ์˜ ํ™˜๊ฒฝ ๋ณ€์ˆ˜.

process.env๋Š” ์„œ๋น„์Šค์˜ ์ค‘์š”ํ•œ ํ‚ค๋ฅผ ์ €์žฅํ•˜๋Š” ๊ณต๊ฐ„์œผ๋กœ๋„ ์‚ฌ์šฉ๋œ๋‹ค. ์„œ๋ฒ„๋‚˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๋น„๋ฐ€๋ฒˆํ˜ธ์™€ ๊ฐ์ข… API ํ‚ค๋ฅผ ์ฝ”๋“œ์— ์ง์ ‘ ์ž…๋ ฅํ•˜๋Š” ๊ฒƒ์€ ์œ„ํ—˜ํ•˜๋‹ค. ํ˜น์—ฌ ์„œ๋น„์Šค๊ฐ€ ํ•ดํ‚น๋‹นํ•ด ์ฝ”๋“œ๊ฐ€ ์œ ์ถœ๋˜์—ˆ์„ ๋•Œ ๋น„๋ฐ€๋ฒˆํ˜ธ๊ฐ€ ์ฝ”๋“œ์— ๋‚จ์•„ ์žˆ์–ด ์ถ”๊ฐ€ ํ”ผํ•ด๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.

๋”ฐ๋ผ์„œ ์ค‘์š”ํ•œ ๋น„๋ฐ€๋ฒˆํ˜ธ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด process.env์˜ ์†์„ฑ์œผ๋กœ ๋Œ€์ฒดํ•œ๋‹ค.

 

2) process.nextTick(์ฝœ๋ฐฑ)

์ด๋ฒคํŠธ ๋ฃจํ”„๊ฐ€ ๋‹ค๋ฅธ ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋“ค๋ณด๋‹ค nextTick์˜ ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ ์šฐ์„ ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋„๋ก ๋งŒ๋“ ๋‹ค.

 

 

  • process.nextTick์€ setImmediate๋‚˜ setTimeout๋ณด๋‹ค ๋จผ์ € ์‹คํ–‰๋œ๋‹ค. ์ฝ”๋“œ ๋งจ ๋ฐ‘์— Promise๋ฅผ ๋„ฃ์€ ๊ฒƒ์€ resolve๋œ Promise๋„ nextTick์ฒ˜๋Ÿผ ๋‹ค๋ฅธ ์ฝœ๋ฐฑ๋“ค๋ณด๋‹ค ์šฐ์„ ์‹œ๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๊ทธ๋ž˜์„œ process.nextTick๊ณผ Promise๋ฅผ ๋งˆ์ดํฌ๋กœํƒœ์Šคํฌ๋ผ๊ณ  ๋”ฐ๋กœ ๊ตฌ๋ถ„์ง€์–ด ๋ถ€๋ฅธ๋‹ค.

3) process.exit(์ฝ”๋“œ)

์‹คํ–‰ ์ค‘์ธ ๋…ธ๋“œ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ข…๋ฃŒํ•œ๋‹ค. ์„œ๋ฒ„์— ์ด ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์„œ๋ฒ„๊ฐ€ ๋ฉˆ์ถ”๋ฏ€๋กœ ์„œ๋ฒ„์—๋Š” ๊ฑฐ์˜ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค. ํ•˜์ง€๋งŒ ์„œ๋ฒ„ ์™ธ์˜ ๋…๋ฆฝ์ ์ธ ํ”„๋กœ๊ทธ๋žจ์—์„œ๋Š” ์ˆ˜๋™์œผ๋กœ ๋…ธ๋“œ๋ฅผ ๋ฉˆ์ถ”๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•œ๋‹ค.

 

 

 

  • process.exit ๋ฉ”์„œ๋“œ๋Š” ์ธ์ž๋กœ ์ฝ”๋“œ ๋ฒˆํ˜ธ๋ฅผ ์ค„ ์ˆ˜ ์žˆ๋‹ค. ์ธ์ž๋ฅผ ์ฃผ์ง€ ์•Š๊ฑฐ๋‚˜ 0์ด๋ฉด ์ •์ƒ ์ข…๋ฃŒ๋ฅผ ๋œปํ•˜๊ณ , 1์„ ์ฃผ๋ฉด ๋น„์ •์ƒ ์ข…๋ฃŒ๋ฅผ ๋œปํ•œ๋‹ค. ๋งŒ์•ฝ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•ด์„œ ์ข…๋ฃŒํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” 1์„ ๋„ฃ์–ด์ฃผ๋ฉด ๋œ๋‹ค.