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

๋ณธ๋ฌธ ์ œ๋ชฉ

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

22-23/22-23 Node.js

by dev otcroz 2022. 9. 29. 10:00

๋ณธ๋ฌธ

728x90

๐Ÿ” ๋…ธ๋“œ ๋‚ด์žฅ ๋ชจ๋“ˆ.zip

๐Ÿ“Œ os

๋…ธ๋“œ๋Š” os ๋ชจ๋“ˆ์— ์ •๋ณด๊ฐ€ ๋‹ด๊ฒจ ์žˆ์–ด ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋‹ค. ์ผ๋ฐ˜์ ์ธ ์›น ์„œ๋น„์Šค๋ฅผ ์ œ์ž‘ํ•  ๋•Œ๋Š” ์‚ฌ์šฉ ๋นˆ๋„๊ฐ€ ๋†’์ง€ ์•Š์ง€๋งŒ, ์šด์˜์ฒด์ œ๋ณ„๋กœ ๋‹ค๋ฅธ ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•  ๋•Œ ์œ ์šฉํ•˜๋‹ค.

const os  = require('os')

console.log('์šด์˜์ฒด์ œ ์ •๋ณด--------------------')
console.log('os.arch(): ', os.arch())  // ํ”„๋กœ์„ธ์„œ ์•„ํ‚คํ…์ฒ˜ ์ •๋ณด -> process.arch์™€ ๋™์ผ
console.log('os.platform(): ', os.platform())  // ์šด์˜์ฒด์ œ ํ”Œ๋žซํผ ์ •๋ณด -> process.platform๊ณผ ๋™์ผ
console.log('os.type(): ', os.type())  // ์šด์˜์ฒด์ œ ์ข…๋ฅ˜
console.log('os.uptime(): ', os.uptime())  // ์šด์˜์ฒด์ œ ๋ถ€ํŒ… ์ดํ›„ ํ๋ฅธ ์‹œ๊ฐ„
console.log('os.hostname(): ', os.hostname())  // ์ปดํ“จํ„ฐ ์ด๋ฆ„
console.log('os.release(): ', os.release())  // ์šด์˜์ฒด์ œ์˜ ๋ฒ„์ „

console.log('๊ฒฝ๋กœ--------------------')
console.log('os.homedir(): ', os.homedir())  // ํ™ˆ ๋””๋ ‰ํ„ฐ๋ฆฌ ๊ฒฝ๋กœ
console.log('os.tmpdir(): ', os.tmpdir())  // ์ž„์‹œ ํŒŒ์ผ ์ €์žฅ ๊ฒฝ๋กœ

console.log('cpu ์ •๋ณด--------------------')
console.log('os.cpus(): ', os.cpus())  // ์ปดํ“จํ„ฐ์˜ ์ฝ”์–ด ์ •๋ณด
console.log('os.cpus().length: ', os.cpus().length)

console.log('๋ฉ”๋ชจ๋ฆฌ ์ •๋ณด--------------------')
console.log('os.freemem(): ', os.freemem())  // ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ฉ”๋ชจ๋ฆฌ
console.log('os.totalmem(): ', os.totalmem())  // ์ „์ฒด ๋ฉ”๋ชจ๋ฆฌ ์šฉ๋Ÿ‰

๐Ÿ“Œ path

ํด๋”์™€ ํŒŒ์ผ์˜ ๊ฒฝ๋กœ๋ฅผ ์‰ฝ๊ฒŒ ์กฐ์ž‘ํ•˜๋„๋ก ๋„์™€์ฃผ๋Š” ๋ชจ๋“ˆ์ด๋‹ค. ์šด์˜์ฒด์ œ๋ณ„๋กœ ๊ฒฝ๋กœ ๊ตฌ๋ถ„์ž๊ฐ€ ๋‹ค๋ฅด๊ธฐ ๋Œ€๋ฌธ์— path ๋ชจ๋“ˆ์ด ํ•„์š”ํ•˜๋‹ค.

  • ์œˆ๋„์šฐ: \, POSIX: /

๐Ÿ’ก join๊ณผ resolve์˜ ์ฐจ์ด

path.join('/a', '/b', '/c')  -> a/b/c (์ƒ๋Œ€๊ฒฝ๋กœ๋กœ ์ฒ˜๋ฆฌ)

path.resolve('/a', '/b', '/c') -> b/c (์ ˆ๋Œ€๊ฒฝ๋กœ๋กœ ์ธ์‹ํ•ด ์•ž ๊ฒฝ๋กœ ๋ฌด์‹œ)

const path = require('path')

const string = __filename

console.log('paht.sep: ', path.sep)  // ๊ฒฝ๋กœ ๊ตฌ๋ถ„์ž
console.log('path.delimiter: ', path.delimiter)  // ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ๊ตฌ๋ถ„์ž(์œˆ๋„ - ;, POSIZ - :)
console.log('--------------------')
console.log('path.dirname(): ', path.dirname(string))  // ํŒŒ์ผ์ด ์œ„์น˜ํ•œ ํด๋” ๊ฒฝ๋กœ
console.log('path.extname(): ', path.extname(string))  // ํŒŒ์ผ์˜ ํ™•์žฅ์ž
console.log('path.basename(): ', path.basename(string))  // ํ™•์žฅ์ž ํฌํ•จํ•ด์„œ ํŒŒ์ผ ์ด๋ฆ„ ํ‘œ์‹œ
console.log('path.basename - extname: ', path.basename(string, path.extname(string)))
console.log('--------------------')
console.log('path.parse(): ', path.parse(string))  // ํŒŒ์ผ ๊ฒฝ๋กœ๋ฅผ root, dir, base, ext, name์œผ๋กœ ๋ถ„๋ฆฌ
console.log('path.format(): ', path.format({dir: 'C:\\users\\zerocho', name: 'path', ext: '.js'}))
 // path.parse()ํ•œ ๊ฐ์ฒด๋ฅผ ํŒŒ์ผ ๊ฒฝ๋กœ๋กœ ํ•ฉ์นจ
console.log('path.normalize(): ', path.normalize('C://users\\\\zerocho\\\path.js'))  // \, / ์‹ค์ˆ˜ํ–ˆ์„ ๋•Œ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๋ณ€๊ฒฝ
console.log('--------------------')
console.log('path.isAbsolute(C:\\): ', path.isAbsolute('C:\\'))  // ํŒŒ์ผ ๊ฒฝ๋กœ๊ฐ€ ์ ˆ๋Œ€๊ฒฝ๋กœ๋ฉด true, ์ƒ๋Œ€๊ฒฝ๋กœ๋ฉด false
console.log('path.isAbsolute(./home): ', path.isAbsolute('./home'))
console.log('--------------------')
console.log('path.relative(): ', path.relative('C:\\users\\zerocho\\path.js', 'C:\\'))
 // ๊ฒฝ๋กœ 2๊ฐœ๋ฅผ ๋„ฃ์œผ๋ฉด ์ฒซ ๋ฒˆ์งธ์—์„œ ๋‘ ๋ฒˆ์งธ ๊ฒฝ๋กœ๋กœ ๊ฐ€๋Š” ๋ฐฉ๋ฒ• ์•Œ๋ฆผ
console.log('path.join(): ', path.join(__dirname, '..', '..', '/users', '.', '/zerocho'))  // ์—ฌ๋Ÿฌ ์ธ์ˆ˜ ๋„ฃ์œผ๋ฉด ํ•˜๋‚˜์˜ ๊ฒฝ๋กœ๋กœ ํ•ฉ์นจ
console.log('path.resolve(): ', path.resolve(__dirname, '..', 'users', '.', '/zerocho'))  // join()๊ณผ ๋น„์Šท

๐Ÿ“Œ url

์ธํ„ฐ๋„ท ์ฃผ์†Œ๋ฅผ ์‰ฝ๊ฒŒ ์กฐ์ž‘ํ•˜๋„๋ก ๋„์™€์ฃผ๋Š” ๋ชจ๋ธ

  • WHATWG ๋ฐฉ์‹

username, password, origin, searchParams ์†์„ฑ์€ WHATWG์—๋งŒ ์กด์žฌ

search ๋ถ€๋ถ„์„ searchParams๋ผ๋Š” ํŠน์ˆ˜ํ•œ ๊ฐ์ฒด๋กœ ๋ฐ˜ํ™˜ํ•œ๋‹ค. (search๋Š” ?๋กœ ์‹œ์ž‘ํ•˜๊ณ , ํ‚ค=๊ฐ’ ํ˜•ํƒœ๋กœ ๋ฐ์ดํ„ฐ ์ „๋‹ฌ)

const url = require('url')

const { URL } = url
const myURL = new URL('http://www.gilbut.co.kr/book/bookList.aspx?sercate1=001001000#anchor')

console.log('new URL(): ', myURL)
console.log('url.format(): ', url.format(myURL))

 

  • ๊ธฐ์กด ๋…ธ๋“œ์—์„œ ์‚ฌ์šฉํ•˜๋˜ ๋ฐฉ์‹

- url.parse(์ฃผ์†Œ): ์ฃผ์†Œ๋ฅผ ๋ถ„ํ•ดํ•œ๋‹ค. username๊ณผ password ๋Œ€์‹  'auth' ์†์„ฑ, searchParams ๋Œ€์‹  'query' ์กด์žฌ

- url.format(๊ฐ์ฒด): WHATWG์™€ ๊ธฐ์กด ๋…ธ๋“œ์˜ url ๋ชจ๋‘ ์‚ฌ์šฉ ๊ฐ€๋Šฅ, ๋ถ„ํ•ด๋˜์—ˆ๋˜ url์„ ์›๋ž˜๋Œ€๋กœ ์กฐ๋ฆฝ

const url = require('url')

const { URL } = url

const parsedUrl = url.parse('http://gilbut.co.kr/book/bookList.aspx?sercate1=001001000#anchor')
console.log('url.parse(): ', parsedUrl)
console.log('url.format(): ', url.format(parsedUrl))

 

๐Ÿ’ก ๋…ธ๋“œ์˜ url ํ˜•์‹์„ ๊ผญ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ

host ๋ถ€๋ถ„ ์—†์ด pathname ๋ถ€๋ถ„๋งŒ ์˜ค๋Š” ์ฃผ์†Œ์ธ ๊ฒฝ์šฐ (/book/bookList.apsx)

+ ์ด์œ ๋Š” 4์žฅ์—์„œ ๊ณต๋ถ€ํ•ด๋ณด๊ธฐ(์ฑ…์— ์—†์œผ๋ฉด ์ธํ„ฐ๋„ท ๊ฒ€์ƒ‰)

๐Ÿ“Œ querystring

๊ธฐ์กด ๋…ธ๋“œ์˜ url์„ ์‚ฌ์šฉํ•  ๋•Œ, search ๋ถ€๋ถ„์„ ์‚ฌ์šฉํ•˜๊ธฐ ์‰ฝ๊ฒŒ ๊ฐ์ฒด๋กœ ๋งŒ๋“œ๋Š” ๋ชจ๋“ˆ๋กœ, ๊ฐ„๋‹จํ•˜๊ฒŒ ๊ฐ์ฒด๋กœ ๋ถ„ํ•ด๋˜๊ณ  ๋ฌธ์ž์—ด๋กœ ์กฐ๋ฆฝ๋˜๋ฏ€๋กœ ํŽธ๋ฆฌํ•˜๋‹ค.

  • querystring.parse(์ฟผ๋ฆฌ): url์˜ query ๋ถ€๋ถ„์„ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ฐ์ฒด๋กœ ๋ถ„ํ•ด
  • querystring.stringify(๊ฐ์ฒด): ๋ถ„ํ•ด๋œ query ๊ฐ์ฒด๋ฅผ ๋ฌธ์ž์—ด๋กœ ๋‹ค์‹œ ์กฐ๋ฆฝ

๐Ÿ“Œ crypto

๋‹ค์–‘ํ•œ ๋ฐฉ์‹์˜ ์•”ํ˜ธํ™”๋ฅผ ๋„์™€์ฃผ๋Š” ๋ชจ๋“ˆ

 

โœ… ๋‹จ๋ฐฉํ–ฅ ์•”ํ˜ธํ™”

๋ณตํ˜ธํ™” ํ•  ์ˆ˜ ์—†๋Š” ์•”ํ˜ธํ™” ๋ฐฉ์‹์œผ๋กœ, ํ•œ ๋ฒˆ ์•”ํ˜ธํ™”ํ•˜๋ฉด ์›๋ž˜ ๋ฌธ์ž์—ด์„ ์ฐพ์„ ์ˆ˜ ์—†๋‹ค. ์•”ํ˜ธํ™”๋ผ๊ณ  ํ‘œํ˜„ํ•˜๋Š” ๋Œ€์‹  ํ•ด์‹œ ํ•จ์ˆ˜๋ผ๊ณ ๋„ ๋ถ€๋ฅธ๋‹ค.

๋‹จ๋ฐฉํ–ฅ ์•”ํ˜ธํ™” ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์ฃผ๋กœ ํ•ด์‹œ ๊ธฐ๋ฒ•์„ ์‚ฌ์šฉํ•œ๋‹ค.

* ํ•ด์‹œ ๊ธฐ๋ฒ•: ์–ด๋– ํ•œ ๋ฌธ์ž์—ด์„ ๊ณ ์ •๋œ ๊ธธ์ด์˜ ๋‹ค๋ฅธ ๋ฌธ์ž์—ด๋กœ ๋ฐ”๊ฟ”๋ฒ„๋ฆฌ๋Š” ๋ฐฉ์‹

 

โœ… ์–‘๋ฐฉํ–ฅ ์•”ํ˜ธํ™”

์•”ํ˜ธํ™”๋œ ๋ฌธ์ž์—ด์„ ๋ณตํ˜ธํ™”ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ํ‚ค(์—ด์‡ )๊ฐ€ ์‚ฌ์šฉ๋œ๋‹ค. ๋”ฐ๋ผ์„œ ๋Œ€์นญํ˜• ์•”ํ˜ธํ™”์—์„œ ์•”ํ˜ธ๋ฅผ ๋ณตํ˜ธํ™”ํ•˜๋ ค๋ฉด ์•”ํ˜ธํ™”ํ•  ๋•Œ ์‚ฌ์šฉํ•œ ํ‚ค์™€ ๊ฐ™์€ ํ‚ค๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.

๐Ÿ“Œ util

๊ฐ์ข… ํŽธ์˜ ๊ธฐ๋Šฅ์„ ๋ชจ์•„๋‘” ๋ชจ๋“ˆ์ด๋‹ค.

  • util.promisify: ์ฝœ๋ฐฑ ํŒจํ„ด์„ ํ”„๋กœ๋ฏธ์Šค ํŒจํ„ด์œผ๋กœ ๋ฐ”๊พผ๋‹ค. ๋ฐ”๊ฟ”๋‘๋ฉด async/await ํŒจํ„ด๊นŒ์ง€ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค.

๐Ÿ“Œ worker_threads

๋…ธ๋“œ์—์„œ ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ ๋ฐฉ์‹์œผ๋กœ ์ž‘์—…ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.

const {
  Worker, isMainThread, parentPort,
} = require('worker_threads')

if (isMainThread) {
  const
  worker = new Worker(__filename)
  worker.on('message', message => console.log('from worker', message))
  worker.on('exit', () => console.log('worker exit'))
  worker.postMessage('ping')
} else {
  parentPort.on('message', (value) => {
    console.log('from parent', value)
    parentPort.postMessage('pong')
    parentPort.close()
  })
}

/* isMainThread๋ฅผ ํ†ตํ•ด ํ˜„์žฌ ๋ฉ”์ธ ์Šค๋ ˆ๋“œ์—์„œ ์‹คํ–‰๋˜๋Š”์ง€, ์ƒ์„ฑํ•œ ์›Œ์ปค ์Šค๋ ˆ๋“œ์—์„œ ์‹คํ–‰๋˜๋Š”์ง€ ๊ตฌ๋ถ„๋œ๋‹ค.
๋ฉ”์ธ ์Šค๋ ˆ๋“œ์—์„œ๋Š” new Worker๋ฅผ ํ†ตํ•ด ํ˜„์žฌ ํŒŒ์ผ์„ ์›Œ์ปค ์Šค๋ ˆ๋“œ์—์„œ ์‹คํ–‰์‹œํ‚ค๊ณ  ์žˆ๊ณ , ํ˜„์žฌ ํŒŒ์ผ์˜ else 
๋ถ€๋ถ„๋งŒ ์›Œ์ปค ์Šค๋ ˆ๋“œ์—์„œ ์‹คํ–‰๋œ๋‹ค.

๋ฉ”์ธ์—์„œ๋Š” worker.postMessage๋กœ ์›Œ์ปค์— ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๊ณ , ์›Œ์ปค๋Š” parentPort.on('message')๋กœ
๋ถ€๋ชจ๋กœ๋ถ€ํ„ฐ ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐ›๋Š”๋‹ค. parentPort.postMessage๋กœ ๋ถ€๋ชจ์—๊ฒŒ ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ด๊ณ , ๋ถ€๋ชจ๋Š”
worker.on('message')๋กœ ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐ›๋Š”๋‹ค. */

// ์ฃผ์˜! worker์—์„œ on ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ๋•, ์ง์ ‘ ์›Œ์ปค๋ฅผ ์ข…๋ฃŒํ•ด์•ผ ํ•œ๋‹ค.

+ ๋…ธ๋“œ์—์„œ ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ?

๐Ÿ“Œ child_process

๋…ธ๋“œ์—์„œ ๋‹ค๋ฅธ ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•˜๊ณ  ์‹ถ๊ฑฐ๋‚˜ ๋ช…๋ น์–ด๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๋ชจ๋“ˆ์ด๋‹ค.

์ด ๋ชจ๋“ˆ์„ ํ†ตํ•ด ํŒŒ์ด์ฌ๊ณผ ๊ฐ™์€ ๋‹ค๋ฅธ ์–ธ์–ด์˜ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ๊ฒฐ๊ด๊ฐ’์„ ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค.

 

โœ… ๋ชจ๋“ˆ ์ด๋ฆ„์ด child_process์ธ ์ด์œ ?

ํ˜„์žฌ ๋…ธ๋“œ ํ”„๋กœ์„ธ์Šค ์™ธ์— ์ƒˆ๋กœ์šด ํ”„๋กœ์„ธ์Šค๋ฅผ ๋„์›Œ์„œ ๋ช…๋ น์„ ์ˆ˜ํ–‰ํ•˜๊ณ , ๋…ธ๋“œ ํ”„๋กœ์„ธ์Šค์— ๊ฒฐ๊ณผ๋ฅผ ์•Œ๋ ค์ฃผ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

โœ… ๊ธฐํƒ€ ๋‹ค์–‘ํ•œ ๋ชจ๋“ˆ๋“ค

https://nodejs.org/ko/docs/

 

๋ฌธ์„œ | Node.js

Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine.

nodejs.org

 

๐Ÿ” fs ๋ชจ๋“ˆ์„ ์ด์šฉํ•œ ํŒŒ์ผ ์‹œ์Šคํ…œ ์ ‘๊ทผ

fs ๋ชจ๋“ˆ์€ ํŒŒ์ผ ์‹œ์Šคํ…œ์— ์ ‘๊ทผํ•˜๋Š” ๋ชจ๋“ˆ์ด๋‹ค. ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜ ์‚ญ์ œํ•˜๊ณ , ์ฝ๊ฑฐ๋‚˜ ์“ธ ์ˆ˜ ์žˆ๊ณ , ํด๋”๋ฅผ ๋งŒ๋“ค๊ฑฐ๋‚˜ ์ง€์šธ ์ˆ˜ ์žˆ๋‹ค.

 

๐Ÿ“Œ fs ๋ชจ๋“ˆ ์‚ฌ์šฉ ๋ฐฉ๋ฒ•

โœ…๊ธฐ๋ณธ์ ์ธ ๋ฐฉ๋ฒ•

// readme.txt
์ €๋ฅผ ์ฝ์–ด์ฃผ์„ธ์š”.

// readFile.js
const fs = require('fs')

fs.readFile('./readme.txt', (err, data) => {
  if (err) {
    throw err
  }
  console.log(data)
  console.log(data.toString())
})

fs ๋ชจ๋“ˆ์„ ๋ถˆ๋Ÿฌ์˜จ ํ›„ ์ฝ์„ ํŒŒ์ผ์˜ ๊ฒฝ๋กœ๋ฅผ ์ง€์ •ํ•œ๋‹ค. ์ด๋•Œ, ํŒŒ์ผ์˜ ๊ฒฝ๋กœ๊ฐ€ ํ˜„์žฌ ํŒŒ์ผ ๊ธฐ์ค€์ด ์•„๋‹ˆ๋ผ node ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜๋Š” ์ฝ˜์†” ๊ธฐ์ค€์ด๋ผ๋Š” ์ ์— ์œ ์˜ํ•ด์•ผ ํ•œ๋‹ค.

readFile์˜ ๊ฒฐ๊ณผ๋ฌผ์€ ๋ฒ„ํผ(Buffer) ํ˜•์‹์œผ๋กœ ์ œ๊ณต๋œ๋‹ค. ๋”ฐ๋ผ์„œ toString()์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค.

 

โœ… ํ”„๋กœ๋ฏธ์Šค ๊ธฐ๋ฐ˜์˜ fs ๋ชจ๋“ˆ ์‚ฌ์šฉ ๋ฐฉ๋ฒ•

const fs = require('fs').promises

fs.readFile('./readme.txt')
  .then((data) => {
    console.log(data)
    console.log(data.toString())
  })
  .catch((err) => {
    console.error(err)
  })

 

๐Ÿ” ๋™๊ธฐ์™€ ๋น„๋™๊ธฐ, ๋ธ”๋กœํ‚น๊ณผ ๋…ผ ๋ธ”๋กœํ‚น

๐Ÿ“Œ ๋™๊ธฐ / ๋น„๋™๊ธฐ

์š”์ฒญ๋ฐ›์€ ํ•จ์ˆ˜๊ฐ€ ์ž‘์—…์„ ์™„๋ฃŒํ–ˆ๋Š”์ง€๋ฅผ ์ฒดํฌํ•ด์„œ ์ˆœ์ฐจ์  ํ๋ฆ„์˜ ์ฐจ์ด

  • ๋™๊ธฐ: ์š”์ฒญ์ž๊ฐ€ ์š”์ฒญ๋ฐ›์€ ํ•จ์ˆ˜์˜ ์ž‘์—…์ด ์™„๋ฃŒ๋˜์—ˆ๋Š”์ง€ ๊ณ„์† ํ™•์ธ (์—ฌ๋Ÿฌ ํ•จ์ˆ˜๋“ค์ด ์‹œ๊ฐ„์„ ๋งž์ถฐ ์‹คํ–‰๋จ)
  • ๋น„๋™๊ธฐ : ์š”์ฒญ์ž๋Š” ์š”์ฒญ ํ›„ ์‹ ๊ฒฝX, ์š”์ฒญ๋ฐ›์€ ํ•จ์ˆ˜๊ฐ€ ์ž‘์—…์„ ๋งˆ์น˜๋ฉด ์•Œ๋ ค์คŒ (ํ•จ์ˆ˜๋“ค์˜ ์ž‘์—… ์‹œ์ž‘/์ข…๋ฃŒ ์‹œ๊ฐ„์ด ๋งž์ง€ ์•Š์„์ˆ˜๋„)

๐Ÿ“Œ ๋ธ”๋กœํ‚น / ๋…ผ ๋ธ”๋กœํ‚น

์š”์ฒญ๋ฐ›๋Š” ํ•จ์ˆ˜๊ฐ€ ์ œ์–ด๊ถŒ(ํ•จ์ˆ˜์‹คํ–‰๊ถŒ)์„ ์–ธ์ œ ๋„˜๊ฒจ์ฃผ๋Š๋ƒ์˜ ์ฐจ์ด

  • ๋ธ”๋กœํ‚น : ์š”์ฒญ๋ฐ›๋Š” ํ•จ์ˆ˜๊ฐ€ ์ž‘์—…์„ ๋ชจ๋‘ ๋งˆ์น˜๊ณ  ๋‚˜์„œ์•ผ ์š”์ฒญ์ž์—๊ฒŒ ์ œ์–ด๊ถŒ์„ ๋„˜๊ฒจ์คŒ (๊ทธ๋™์•ˆ ์š”์ฒญ์ž๋Š” ์•„๋ฌด๊ฒƒ๋„ ํ•˜์ง€์•Š๊ณ  ๊ธฐ๋‹ค๋ฆผ)
  • ๋…ผ๋ธ”๋กœํ‚น : ์š”์ฒญ๋ฐ›์€ ํ•จ์ˆ˜๊ฐ€ ์š”์ฒญ์ž์—๊ฒŒ ์ œ์–ด๊ถŒ์„ ๋ฐ”๋กœ ๋„˜๊ฒจ์คŒ (๊ทธ๋™์•ˆ ์š”์ฒญ์ž๋Š” ๋‹ค๋ฅธ ์ผ์„ ํ•  ์ˆ˜ ์žˆ์Œ)

๋…ธ๋“œ์—์„œ๋Š” ๋Œ€๋ถ€๋ถ„ ๋™๊ธฐ-๋ธ”๋กœํ‚น ๋ฐฉ์‹๊ณผ ๋น„๋™๊ธฐ-๋…ผ ๋ธ”๋กœํ‚น ๋ฐฉ์‹์ด ๋Œ€๋ถ€๋ถ„์ด๋‹ค.

๋™๊ธฐ-๋ธ”๋กœํ‚น ๋ฐฉ์‹
๋น„๋™๊ธฐ-๋…ผ ๋ธ”๋กœํ‚น ๋ฐฉ์‹

 

 

 

โœ… ๋™๊ธฐ ๋ฉ”์„œ๋“œ์™€ ๋น„๋™๊ธฐ ๋ฉ”์„œ๋“œ

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

 

โœ… ๋ฒ„ํผ

๋…ธ๋“œ๋Š” ํŒŒ์ผ์„ ์ฝ์„ ๋•Œ ๋ฉ”๋ชจ๋ฆฌ์— ํŒŒ์ผ ํฌ๊ธฐ๋งŒํผ ๊ณต๊ฐ„์„ ๋งˆ๋ จํ•ด๋‘๋ฉฐ ํŒŒ์ผ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅํ•œ ๋’ค ์‚ฌ์šฉ์ž๊ฐ€ ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š”๋ฐ, ์ด๋•Œ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ฒ„ํผ๋‹ค.

 

โœ… ์ŠคํŠธ๋ฆผ

๋ฒ„ํผ์˜ ํฌ๊ธฐ๋ฅผ ์ž‘๊ฒŒ ๋งŒ๋“  ํ›„ ์—ฌ๋Ÿฌ ๋ฒˆ์œผ๋กœ ๋‚˜๋ˆ  ๋ณด๋‚ด๋Š” ๋ฐฉ์‹์ด ๋“ฑ์žฅํ–ˆ๋‹ค. ์ด๋ฅผ ํŽธ๋ฆฌํ•˜๊ฒŒ ๋งŒ๋“  ๊ฒƒ์ด ์ŠคํŠธ๋ฆผ์ด๋‹ค.

์ŠคํŠธ๋ฆผ๋ผ๋ฆฌ ์—ฐ๊ฒฐํ•˜๋Š” ๊ฒƒ์„ 'ํŒŒ์ดํ•‘ํ•œ๋‹ค'๊ณ  ํ‘œํ˜„ํ•œ๋‹ค.

์ŠคํŠธ๋ฆผ์„ ์‚ฌ์šฉํ•˜๋ฉด ํšจ๊ณผ์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋™์˜์ƒ ๊ฐ™์€ ํฐ ํŒŒ์ผ์„ ์ „์†กํ•  ๋•Œ ์ŠคํŠธ๋ฆผ์„ ์‚ฌ์šฉํ•œ๋‹ค.

 

โœ… ์Šค๋ ˆ๋“œํ’€

๋น„๋™๊ธฐ ๋ฉ”์„œ๋“œ๋Š” ์—ฌ๋Ÿฌ ๋ฒˆ ์‹คํ–‰ํ•ด๋„ ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ๋™์‹œ์— ์ฒ˜๋ฆฌ๋˜๋Š”๋ฐ, ์Šค๋ ˆ๋“œํ’€์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์Šค๋ ˆ๋“œํ’€์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ๊ฐœ์ˆ˜๊ฐ€ 4๊ฐœ๋‹ค.

 

๐Ÿ” ์ด๋ฒคํŠธ

on('data', ์ฝœ๋ฐฑ) ๋˜๋Š” on('end', ์ฝœ๋ฐฑ)์„ ์‚ฌ์šฉํ–ˆ๋Š”๋ฐ, ์ด๊ฒƒ์€ data๋ผ๋Š” ์ด๋ฒคํŠธ์™€ end๋ผ๋Š” ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•  ๋•Œ ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋„๋ก ์ด๋ฒคํŠธ๋ฅผ ๋“ฑ๋กํ•œ ๊ฒƒ์ด๋‹ค.

  • on(์ด๋ฒคํŠธ๋ช…, ์ฝœ๋ฐฑ): ์ด๋ฒคํŠธ ์ด๋ฆ„๊ณผ ์ด๋ฒคํŠธ ๋ฐœ์ƒ ์‹œ์˜ ์ฝœ๋ฐฑ์„ ์—ฐ๊ฒฐํ•œ๋‹ค.
  • addListener(์ด๋ฒคํŠธ๋ช…, ์ฝœ๋ฐฑ): on๊ณผ ๊ธฐ๋Šฅ์ด ๊ฐ™๋‹ค. (์ด๋ฒคํŠธ ๋“ฑ๋ก)
  • emit(์ด๋ฒคํŠธ๋ช…): ์ด๋ฒคํŠธ๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๋ฉ”์„œ๋“œ๋‹ค.
  • removeAllListener(์ด๋ฒคํŠธ๋ช…): ์ด๋ฒคํŠธ์— ์—ฐ๊ฒฐ๋œ ๋ชจ๋“  ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ๋ฅผ ์ œ๊ฑฐํ•œ๋‹ค.
  • removeListener(์ด๋ฒคํŠธ๋ช…, ๋ฆฌ์Šค๋„ˆ): ์ด๋ฒคํŠธ์— ์—ฐ๊ฒฐ๋œ ๋ฆฌ์Šค๋„ˆ๋ฅผ ํ•˜๋‚˜์”ฉ ์ œ๊ฑฐํ•œ๋‹ค.

๐Ÿ” ์˜ˆ์™ธ ์ฒ˜๋ฆฌ

๋…ธ๋“œ์—์„œ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋Š” ์ค‘์š”ํ•˜๋‹ค. ๋…ธ๋“œ์˜ ๋ฉ”์ธ ์Šค๋ ˆ๋“œ๋Š” ํ•˜๋‚˜๋ฟ์ด๋ฏ€๋กœ ๋ฉ”์ธ ์Šค๋ ˆ๋“œ๊ฐ€ ๋ฉˆ์ถ”๋ฉด ์ „์ฒด ์„œ๋ฒ„๊ฐ€ ๋ฉˆ์ถ˜๋‹ค๋Š” ๋œป์ด๋‹ค. ๋”ฐ๋ผ์„œ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋Š” ํ•„์ˆ˜๋‹ค.

 

โœ… try/catch๋กœ ์—๋Ÿฌ ์žก๊ธฐ

setInterval(() => {
  console.log('์‹œ์ž‘');
  try {
    throw new Error('์„œ๋ฒ„๋ฅผ ๊ณ ์žฅ๋‚ด์ฃผ๋งˆ!');
  } catch (err) {
    console.error(err);
  }
}, 1000);

 

โœ… ๋…ธ๋“œ ์ž์ฒด์—์„œ ์žก์•„์ฃผ๋Š” ์—๋Ÿฌ

const fs = require('fs');

setInterval(() => {
  fs.unlink('./abcdefg.js', (err) => {
    if (err) {
      console.error(err);
    }
  });
}, 1000);

 

๋นˆ์นธ ๋ฌธ์ œ

  1. ์šด์˜์ฒด์ œ๋ณ„๋กœ ๋‹ค๋ฅธ ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•˜๊ณ  ์‹ถ์„ ๋•Œ _____์ด ์œ ์šฉํ•˜๋‹ค.
  2. ๋…ธ๋“œ์˜ url ํ˜•์‹์€ host ๋ถ€๋ถ„ ์—†์ด ________ ๋ถ€๋ถ„๋งŒ ์˜ค๋Š” ์ฃผ์†Œ์ธ ๊ฒฝ์šฐ ๊ผญ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.
  3. ๋‹จ๋ฐฉํ–ฅ ์•”ํ˜ธํ™”์™€ ์–‘๋ฐฉํ–ฅ ์•”ํ˜ธํ™”์˜ ์ฐจ์ด๋Š” ___๋ฅผ ํ•  ์ˆ˜ ์—†๋Š” ๊ฒƒ๊ณผ ์žˆ๋Š” ๊ฒƒ์˜ ์ฐจ์ด๋‹ค.
  4. fs ๋ชจ๋“ˆ ์‚ฌ์šฉ ์‹œ ํŒŒ์ผ์˜ ๊ฒฝ๋กœ๋Š” __ ๊ธฐ์ค€์ด๋‹ค.
  5. ๋ธ”๋กœํ‚น๊ณผ ๋…ผ ๋ธ”๋กœํ‚น์€ ___์„ ์–ธ์ œ ๋„˜๊ฒจ์ฃผ๋Š๋ƒ์˜ ์ฐจ์ด๋‹ค.
  6. ๋น„๋™๊ธฐ ๋ฉ”์„œ๋“œ๋Š” ____์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ๋™์‹œ์— ์ฒ˜๋ฆฌ๋œ๋‹ค.
  7. ๋…ธ๋“œ์˜ ๋ฉ”์ธ ์Šค๋ ˆ๋“œ๋Š” _๊ฐœ๋‹ค.

์ฝ”๋“œ ๋ฌธ์ œ

  1. fs ๋ชจ๋“ˆ์—์„œ promise ์†์„ฑ์„ ๋ถˆ๋Ÿฌ์™€ ํŒŒ์ผ์„ ๋งŒ๋“ค์–ด๋ณด์„ธ์š”. (ํŒŒ์ผ ์ด๋ฆ„: ์ด๋ฆ„.txt, ํŒŒ์ผ ๋‚ด์šฉ: ๋‚˜๋ฅผ ์†Œ๊ฐœํ•˜๋Š” ํ•œ ์ค„)
  2. ๊ฐ•์ œ๋กœ ์—๋Ÿฌ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๊ณ , try/catch์œผ๋กœ ์—๋Ÿฌ๋ฅผ ์žก์•„๋ณด์„ธ์š”.

 

 

 

๋นˆ์นธ ๋ฌธ์ œ ๋‹ต

๋”๋ณด๊ธฐ
  1. os ๋ชจ๋“ˆ
  2. pathname
  3. ๋ณตํ˜ธํ™”
  4. ์ฝ˜์†”
  5. ์ œ์–ด๊ถŒ
  6. ์Šค๋ ˆ๋“œํ’€
  7. 1

 

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

1.

const fs = require('fs').promises

fs.writeFile('./seol.txt', '์•ˆ๋…•ํ•˜์„ธ์š”. ์ €๋Š” ์ฝ”๋„ˆ์˜ ๊ธฐํšํŒ€์žฅ seol์ž…๋‹ˆ๋‹ค. ์ €๋Š” ์ง€๊ธˆ ๋…ธ๋“œ๋ฅผ ๊ณต๋ถ€ํ•˜๋Š” ์ค‘์ž…๋‹ˆ๋‹ค.')
  .then(() => {
    return fs.readFile('./seol.txt')
  })
  .then((data) => {
    console.log(data.toString())
  })
  .catch((err) => {
    console.error(err)
  })

2.

setInterval(() => {
  console.log('์‹œ์ž‘');
  try {
    throw new Error('๋‚ด ์ด๋ฆ„์€ seol, ์„œ๋ฒ„ ๊ณ ์žฅ๋‚ด๋Ÿฌ ์™”์ฃ .');
  } catch (err) {
    console.error(err);
  }
}, 1000);

 

 

์ฐธ๊ณ : https://inpa.tistory.com/entry/%F0%9F%91%A9%E2%80%8D%F0%9F%92%BB-%EB%8F%99%EA%B8%B0%EB%B9%84%EB%8F%99%EA%B8%B0-%EB%B8%94%EB%A1%9C%ED%82%B9%EB%85%BC%EB%B8%94%EB%A1%9C%ED%82%B9-%EA%B0%9C%EB%85%90-%EC%A0%95%EB%A6%AC

 

๐Ÿ‘ฉ‍๐Ÿ’ป ๋™๊ธฐ&๋น„๋™๊ธฐ / ๋ธ”๋กœํ‚น&๋…ผ๋ธ”๋กœํ‚น ๐Ÿ’ฏ ์™„๋ฒฝ ์ดํ•ดํ•˜๊ธฐ

๋™๊ธฐ&๋น„๋™๊ธฐ vs ๋ธ”๋กœํ‚น&๋…ผ๋ธ”๋กํ‚น ๊ฐœ๋… ์ฐจ์ด ์ด ๊ฐœ๋…๋“ค์„ ์ฒ˜์Œ ์ ‘ํ•˜๊ฑฐ๋‚˜ ์ปดํ“จํ„ฐ ๊ณตํ•™์— ๋Œ€ํ•ด ์ž˜ ๋ชจ๋ฅด๋Š” ์‚ฌ๋žŒ์€ ์ด ๊ฐœ๋…๋“ค์ด ์„œ๋กœ ๋ญ”๊ฐ€ ์—ฐ๊ด€์ด ์žˆ๋Š” ๊ฒƒ์œผ๋กœ ์˜คํ•ดํ•˜๊ธฐ ์‰ฝ๋‹ค. ์•„๋ฌด๋ž˜๋„ ๋™๊ธฐ์™€ ๋ธ”๋ก

inpa.tistory.com

 


Node.js 

Editor : seol

728x90

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