Node.js/Theory

[Node.js] Node.js์™€ ๊ธฐ๋ณธ ๋‚ด์žฅ ๋ชจ๋“ˆ

ITs Min 2024. 5. 24.

๐Ÿ” Node.js

Node.js๋Š” JavaScript ๋Ÿฐํƒ€์ž„ ํ™˜๊ฒฝ์œผ๋กœ, ์„œ๋ฒ„ ์ธก ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ตฌ์ถ•ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋œ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด JavaScript๋กœ ์„œ๋ฒ„ ์ธก ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ณ  ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค. Node.js๋Š” Chrome์˜ V8 JavaScript ์—”์ง„ ์œ„์— ๊ตฌ์ถ•๋˜์–ด ์žˆ์œผ๋ฉฐ, ๋น„๋™๊ธฐ ์ด๋ฒคํŠธ ์ฃผ๋„ ์•„ํ‚คํ…์ฒ˜๋ฅผ ํ†ตํ•ด ๋†’์€ ์„ฑ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค.

 

Node.js๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ ๋ชจ๋‘์— ๋™์ผํ•œ ์–ธ์–ด๋กœ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์–ด ๊ฐœ๋ฐœ์ž์—๊ฒŒ ํŽธ๋ฆฌํ•จ์„ ์ œ๊ณตํ•œ๋‹ค. ์ด๊ฒƒ์€ ์ „์ฒด ์Šคํƒ์„ JavaScript๋กœ ์œ ์ง€ํ•˜๋ฉด์„œ ๊ฐœ๋ฐœ์ž๋“ค์ด ํ”„๋ก ํŠธ์—”๋“œ ๋ฐ ๋ฐฑ์—”๋“œ ๊ฐ„์˜ ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์Œ์„ ์˜๋ฏธํ•œ๋‹ค.

(SpringFramework๋กœ ํŒ€ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ–ˆ์„ ๋•Œ๋Š” ํ”„๋ก ํŠธ๋‹จ์€ jQuery ๋ฐฑ๋‹จ์€ java๋ฅผ ์‚ฌ์šฉํ–ˆ๋‹ค.)

 

Node.js์˜ ๊ฐ€์žฅ ๊ฐ•๋ ฅํ•œ ์ธก๋ฉด ์ค‘ ํ•˜๋‚˜๋Š” ๋‚ด์žฅ ๋ชจ๋“ˆ์˜ ํ’๋ถ€ํ•˜๋‹ค๋Š” ์ ์ด๋‹ค. ์ด๋Ÿฌํ•œ ๋‚ด์žฅ ๋ชจ๋“ˆ์€ Node.js ์„ค์น˜ ์‹œ ์ž๋™์œผ๋กœ ํฌํ•จ๋˜์–ด ์žˆ์–ด ๋”ฐ๋กœ ์„ค์น˜ํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค. ์ด๋Ÿฌํ•œ ๋ชจ๋“ˆ๋“ค์€ ๋‹ค์–‘ํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋œ๋‹ค.


๐Ÿ” npm

npm(Node Package Manager)์€ Node.js ํŒจํ‚ค์ง€๋ฅผ ๊ด€๋ฆฌํ•˜๊ณ  ๋ฐฐํฌํ•˜๊ธฐ ์œ„ํ•œ ๊ณต์‹ ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ์ž๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.

npm์€ Node.js์˜ ํ•ต์‹ฌ ๋ถ€๋ถ„์œผ๋กœ, JavaScript ํŒจํ‚ค์ง€ ์ƒํƒœ๊ณ„๋ฅผ ์ง€์›ํ•˜๊ณ  ์„ฑ์žฅ์‹œํ‚ค๋Š” ๋ฐ ํฐ ์—ญํ• ์„ ํ•œ๋‹ค.

npm์„ ์‚ฌ์šฉํ•˜๋ฉด ํ”„๋กœ์ ํŠธ์— ํ•„์š”ํ•œ ๋‹ค์–‘ํ•œ ํŒจํ‚ค์ง€๋ฅผ ์‰ฝ๊ฒŒ ์„ค์น˜ํ•˜๊ณ  ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

 

์ฃผ์š” ๊ธฐ๋Šฅ

  • ํŒจํ‚ค์ง€ ์„ค์น˜: npm์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ช…๋ น ์ค„์„ ํ†ตํ•ด ํ”„๋กœ์ ํŠธ์— ํ•„์š”ํ•œ ํŒจํ‚ค์ง€๋ฅผ ๊ฐ„ํŽธํ•˜๊ฒŒ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, npm install package-name ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•ด ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์˜์กด์„ฑ ๊ด€๋ฆฌ: npm์€ ํŒจํ‚ค์ง€ ๊ฐ„์˜ ์˜์กด์„ฑ์„ ์ž๋™์œผ๋กœ ๊ด€๋ฆฌํ•œ๋‹ค. ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•  ๋•Œ ํ•ด๋‹น ํŒจํ‚ค์ง€๊ฐ€ ์˜์กดํ•˜๋Š” ๋‹ค๋ฅธ ํŒจํ‚ค์ง€๋„ ํ•จ๊ป˜ ์„ค์น˜๋œ๋‹ค. ๋˜ํ•œ, package.json ํŒŒ์ผ์— ํŒจํ‚ค์ง€ ์˜์กด์„ฑ์„ ๋ช…์‹œํ•ด ํ”„๋กœ์ ํŠธ์˜ ์˜์กด์„ฑ์„ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๋ฒ„์ „ ๊ด€๋ฆฌ: npm์€ ๊ฐ ํŒจํ‚ค์ง€์˜ ๋ฒ„์ „์„ ๊ด€๋ฆฌํ•˜๊ณ  ์—…๋ฐ์ดํŠธํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค. ํŒจํ‚ค์ง€์˜ ์ƒˆ๋กœ์šด ๋ฒ„์ „์ด ๋‚˜์˜ค๋ฉด ํ•ด๋‹น ํŒจํ‚ค์ง€๋ฅผ ๊ฐ„ํŽธํ•˜๊ฒŒ ์—…๋ฐ์ดํŠธํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰: package.json ํŒŒ์ผ์— ์ •์˜๋œ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, npm start ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•ด ํ”„๋กœ์ ํŠธ๋ฅผ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์ „์—ญ ์„ค์น˜: npm์„ ์‚ฌ์šฉํ•˜์—ฌ ์ „์—ญ์ ์œผ๋กœ ์„ค์น˜๋œ ํŒจํ‚ค์ง€๋Š” ์‹œ์Šคํ…œ ์ „์ฒด์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ์ „์—ญ ์„ค์น˜๋Š” ์ฃผ๋กœ ๊ฐœ๋ฐœ ๋„๊ตฌ๋‚˜ ์œ ํ‹ธ๋ฆฌํ‹ฐ์™€ ๊ฐ™์€ ๊ฒƒ๋“ค์„ ์„ค์น˜ํ•  ๋•Œ ์‚ฌ์šฉ๋œ๋‹ค.
  • ํŒจํ‚ค์ง€ ๊ณต์œ : npm์€ ํŒจํ‚ค์ง€๋ฅผ ๊ณต์œ ํ•˜๊ณ  ๋ฐฐํฌํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋œ๋‹ค. ๊ฐœ๋ฐœ์ž๋“ค์€ ์ž์‹ ์ด ๋งŒ๋“  ํŒจํ‚ค์ง€๋ฅผ npm ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์— ๋ฐฐํฌํ•˜์—ฌ ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž๋“ค๊ณผ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ” Node.js ์ฃผ์š” ๊ธฐ๋ณธ ๋‚ด์žฅ ๋ชจ๋“ˆ

HTTP: Node.js์—์„œ ์›น ์„œ๋ฒ„๋ฅผ ๋งŒ๋“ค ๋•Œ ์‚ฌ์šฉ๋œ๋‹ค. HTTP ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•˜์—ฌ ์„œ๋ฒ„๋ฅผ ๋งŒ๋“ค๊ณ  ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ณ  ์‘๋‹ต์„ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๋‹ค.

  • http.createServer([options][, requestListener]): HTTP ์„œ๋ฒ„๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.
  • server.listen(port[, hostname][, backlog][, callback]): ์ง€์ •๋œ ํฌํŠธ ๋ฐ ํ˜ธ์ŠคํŠธ์—์„œ ์„œ๋ฒ„๋ฅผ ์ˆ˜์‹  ๋Œ€๊ธฐ ์ƒํƒœ๋กœ ๋งŒ๋“ ๋‹ค.
  • server.close([callback]): ์„œ๋ฒ„๋ฅผ ๋‹ซ๋Š”๋‹ค.

FS(File System): ํŒŒ์ผ ์‹œ์Šคํ…œ์— ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•œ ๋ชจ๋“ˆ์ด๋‹ค. ํŒŒ์ผ์„ ์ฝ๊ณ  ์“ฐ๋Š” ๋“ฑ์˜ ํŒŒ์ผ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

  • fs.readFile(path[, options], callback): ํŒŒ์ผ์„ ๋น„๋™๊ธฐ์ ์œผ๋กœ ์ฝ๋Š”๋‹ค.
  • fs.writeFile(file, data[, options], callback): ํŒŒ์ผ์„ ๋น„๋™๊ธฐ์ ์œผ๋กœ ์“ด๋‹ค.
  • fs.readdir(path[, options], callback): ๋””๋ ‰ํ† ๋ฆฌ์˜ ๋‚ด์šฉ์„ ๋น„๋™๊ธฐ์ ์œผ๋กœ ์ฝ๋Š”๋‹ค.

Path: ํŒŒ์ผ ๋ฐ ๋””๋ ‰ํ† ๋ฆฌ ๊ฒฝ๋กœ๋ฅผ ์กฐ์ž‘ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋œ๋‹ค. ์ด ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•˜๋ฉด ํŒŒ์ผ ๊ฒฝ๋กœ๋ฅผ ์‰ฝ๊ฒŒ ์กฐ์ž‘ํ•˜๊ณ  ๊ตฌ๋ฌธ ๋ถ„์„ํ•  ์ˆ˜ ์žˆ๋‹ค.

  • path.join([...paths]): ๊ฒฝ๋กœ์˜ ๊ฐ ๋ถ€๋ถ„์„ ๊ฒฐํ•ฉํ•˜์—ฌ ์ „์ฒด ๊ฒฝ๋กœ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.
  • path.resolve([...paths]): ์ ˆ๋Œ€ ๊ฒฝ๋กœ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.
  • path.dirname(path): ํŒŒ์ผ ๊ฒฝ๋กœ์˜ ๋””๋ ‰ํ† ๋ฆฌ ์ด๋ฆ„์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

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

  • emitter.on(eventName, listener): ์ด๋ฒคํŠธ๋ฅผ ๋“ฑ๋กํ•œ๋‹ค.
  • emitter.emit(eventName[, ...args]): ์ด๋ฒคํŠธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚จ๋‹ค.

OS: ์šด์˜ ์ฒด์ œ์™€ ์ƒํ˜ธ ์ž‘์šฉํ•˜๊ธฐ ์œ„ํ•œ ๋ชจ๋“ˆ์ด๋‹ค. ์ด ๋ชจ๋“ˆ์€ ์‹œ์Šคํ…œ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ค๊ณ  ์‹œ์Šคํ…œ ๋ฆฌ์†Œ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•œ๋‹ค.

  • os.hostname(): ํ˜ธ์ŠคํŠธ ์ด๋ฆ„์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
  • os.totalmem(): ์‹œ์Šคํ…œ์˜ ์ด ๋ฉ”๋ชจ๋ฆฌ ์–‘์„ ๋ฐ”์ดํŠธ ๋‹จ์œ„๋กœ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
  • os.platform(): ์‹คํ–‰ ์ค‘์ธ ์šด์˜ ์ฒด์ œ ํ”Œ๋žซํผ์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

Util: ๊ฐ์ข… ์œ ํ‹ธ๋ฆฌํ‹ฐ ํ•จ์ˆ˜๋ฅผ ์ œ๊ณตํ•œ๋‹ค. ๋กœ๊น… ๋ฐ ๋””๋ฒ„๊น…๊ณผ ๊ฐ™์€ ์ž‘์—…์„ ๋‹จ์ˆœํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค.

  • util.format(format[, ...args]): ์„œ์‹ ๋ฌธ์ž์—ด์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฌธ์ž์—ด์„ ์ƒ์„ฑํ•œ๋‹ค.
  • util.inspect(object[, options]): ๊ฐ์ฒด๋ฅผ ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ๋””๋ฒ„๊น…์— ์‚ฌ์šฉํ•œ๋‹ค.

Crypto: ์•”ํ˜ธํ™” ๋ฐ ํ•ด์‹œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค. ๋ฐ์ดํ„ฐ๋ฅผ ์•ˆ์ „ํ•˜๊ฒŒ ์ €์žฅํ•˜๊ณ  ํ†ต์‹ ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๋‹ค.

  • crypto.createHash(algorithm): ํ•ด์‹œ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•œ๋‹ค..
  • hash.update(data[, inputEncoding]): ํ•ด์‹ฑํ•  ๋ฐ์ดํ„ฐ๋ฅผ ์—…๋ฐ์ดํŠธํ•œ๋‹ค.
  • hash.digest([encoding]): ํ•ด์‹œ ๊ณ„์‚ฐ์„ ์™„๋ฃŒํ•˜๊ณ  ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

Net: ๋„คํŠธ์›Œํฌ ๊ด€๋ จ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ๋ชจ๋“ˆ์ด๋‹ค. TCP ์„œ๋ฒ„ ๋ฐ ํด๋ผ์ด์–ธํŠธ๋ฅผ ๋งŒ๋“ค๊ณ  ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

  • net.createServer([options][, connectionListener]): TCP ๋˜๋Š” IPC ์„œ๋ฒ„๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.
  • server.listen(port[, host][, backlog][, callback]): ์ง€์ •๋œ ํฌํŠธ์™€ ํ˜ธ์ŠคํŠธ์—์„œ ์„œ๋ฒ„๋ฅผ ์ˆ˜์‹  ๋Œ€๊ธฐ ์ƒํƒœ๋กœ ๋งŒ๋“ ๋‹ค.
  • server.close([callback]): ์„œ๋ฒ„๋ฅผ ๋‹ซ๋Š”๋‹ค.

 

'Node.js > Theory' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[Node.js] Socket.io  (0) 2024.05.29
[Node.js] Express ํ”„๋ ˆ์ž„์›Œํฌ  (0) 2024.05.24

๋Œ“๊ธ€

TOP

๋Šฆ์—ˆ๋‹ค๊ณ  ์ƒ๊ฐํ•  ๋• ๋„ˆ๋ฌด ๋Šฆ์€ ๊ฑฐ๋‹ค.