nodejs

Nodejs ๊ธฐ์ดˆ ์ •๋ฆฌ

nodejs๋ž€ Chrome V8 Javascript ์—”์ง„์œผ๋กœ ๋นŒ๋“œ๋œ Javascript ๋Ÿฐํƒ€์ž„์ž…๋‹ˆ๋‹ค. ๋Ÿฐํƒ€์ž„์ด๋ผ๋Š” ๋ง์€ javascript๋ฅผ ์‹คํ–‰ํ•˜๋Š” ํ™˜๊ฒฝ์ž…๋‹ˆ๋‹ค. ๋˜ํ•œ Nodejs๋กœ ์›น์‚ฌ์ดํŠธ์—์„œ ์„œ๋ฒ„๋กœ ์‚ฌ์šฉ๋˜๋Š” ๊ฑด ๋ฌด์Šจ ๋ง์ผ๊นŒ์š”? nodejs์— ๋Œ€ํ•œ ๊ธฐ์ดˆ ๊ฐœ๋…์„ ํ•จ๊ป˜ ์•Œ์•„๊ฐ€๋ณด๋„๋ก ํ•ฉ์‹œ๋‹ค. ์ด ๊ธ€์„ ๋ชฉ์ ์€ ์ดˆ๊ธ‰๊ณผ ์ค‘๊ธ‰์„ ์œ„ํ•œ ๊ธ€์ž…๋‹ˆ๋‹ค. ์ดˆ๊ธ‰์˜ ๊ธฐ์ค€์€ express๋ฅผ ๋“ค์–ด๋Š” ๋ดค๋‹ค ์ •๋„์ด๊ณ , ์ค‘๊ธ‰์˜ ๊ธฐ์ค€์€ nodejs express๋ฅผ ํ™œ์šฉํ•˜์—ฌ web server๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๊ธฐ์ค€์ž…๋‹ˆ๋‹ค. ๊ณ ๊ธ‰์˜ ๊ธฐ์ค€์€ ํ”„๋กœ์„ธ์Šค์™€ ์Šค๋ ˆ๋“œ ๊ด€๋ฆฌ๋Š” ์ž์œ ๋กญ๊ฒŒ ํ•  ์ˆ˜ ์žˆ์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์‹ค ๊ณ ๊ธ‰์€ ์ด ๊ธ€์„ ๋ณผ ํ•„์š”๊ฐ€ ์—†์œผ๋‹ˆ ์ดˆ๊ธ‰๊ณผ ์ค‘๊ธ‰ ๊ธฐ์ค€์œผ๋กœ ๊ธฐ์ดˆ๋ฅผ ํƒ„ํƒ„ํ•˜๊ฒŒ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ์ž‘์„ฑํ•œ ๊ธ€์ž…๋‹ˆ๋‹ค.


image


๊ฐœ๋ฐœ์ž๊ฐ€ ๋ณดํ†ต ๋งํ•˜๋Š” nodejs๋ž€ ๋ฌด์—‡์ผ๊นŒ์š”? ์šฐ๋ฆฌ๋Š” ๋ณดํ†ต nodejs๋ฅผ ์›น ์„œ๋ฒ„๋ผ๊ณ  ์ดํ•ดํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ, nodejs๋Š” ์›น ์„œ๋ฒ„๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•  ๋ฟ์ด์ง€, ์›น ์„œ๋ฒ„๋Š” ์•„๋‹™๋‹ˆ๋‹ค. ๊ณต์‹๋ฌธ์„œ์— ๋“ค์–ด๊ฐ€ ๋ณด๋ฉด, Node.js๋Š” ํฌ๋กฌ V8 ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์œผ๋กœ ๋นŒ๋“œ๋œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋Ÿฐํƒ€์ž„์ด๋ผ๊ณ  ์„ค๋ช…์ด ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์‰ฝ๊ฒŒ ๋งํ•˜๋ฉด, js ํŒŒ์ผ์„ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ํ™˜๊ฒฝ์ด nodejs์ž…๋‹ˆ๋‹ค.


์—ฌ๊ธฐ์„œ ์ฃผ์˜ํ•ด์•ผ ํ•  ์ ์€ html์˜ javascript์™€ nodejs๊ฐ€ ์‹คํ–‰ํ•˜๋Š” javascript๊ฐ€ ๋‹ค๋ฅด๋‹ค๋Š” ๊ฒƒ์„ ์ž…๋‹ˆ๋‹ค. nodejs ์ด์ „์˜ javascript๋Š” .js ํŒŒ์ผ์„ ๋‹จ๋…์œผ๋กœ ์‹คํ–‰ํ•˜์ง€ ๋ชปํ–ˆ๊ณ , ์›น์˜ ๋ธŒ๋ผ์šฐ์ €์—์„œ๋งŒ javascript๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. nodejs๋ผ๋Š” javascript ์‹คํ–‰๊ธฐ์˜ ๋“ฑ์žฅ์œผ๋กœ, ํ˜„์žฌ ์šฐ๋ฆฌ๊ฐ€ VScode์—์„œ npm run start / node index.js ์™€ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ javascript ํŒŒ์ผ์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ •๋ฆฌํ•˜๋ฉด, nodejs์ด์ „์—๋Š” html์—์„œ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ javascript๋ฅผ ์ฝ์€ ๊ฒƒ์ด๊ณ , nodejs ์ดํ›„์—๋Š” nodejs ํŒŒ์ผ๋ช….js ๋กœ javscript๋„ ์‹คํ–‰ ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์ƒ๊ธด ๊ฒƒ์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ณ€ํ™”๋กœ ์ธํ•ด javascript๋ฅผ ๋…๋ฆฝ์ ์œผ๋กœ ์‹คํ–‰์ด ๊ฐ€๋Šฅํ•ด์กŒ๊ณ , javascript๋ฅผ ํ™œ์šฉํ•œ ์›น ์„œ๋ฒ„๋ฅผ ๋งŒ๋“ค๊ณ  ์‹คํ–‰ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.


Node.js๋Š” ํ˜„๋Œ€ ์›น ๊ฐœ๋ฐœ์—์„œ ์ค‘์š”ํ•œ ์—ญํ• ์„ ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฒคํŠธ ๋ฃจํ”„์˜ค ๋…ผ๋ธ”๋กœํ‚น I/O๋ชจ๋ธ์„ ํ™œ์šฉํ•˜์—ฌ ๋†’์€ ์ฒ˜๋ฆฌ๋Ÿ‰๊ณผ ๋‚ฎ์€ ์ง€์—ฐ ์‹œ๊ฐ„์„ ๊ฐ€์ง€๊ธฐ ๋•Œ๋ฌธ์— ํšจ์œจ์ ์ธ ๋„คํŠธ์›Œํฌ Application ๊ฐœ๋ฐœ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค. ๋‹จ์ผ ์Šค๋ ˆ๋“œ์ด์ง€๋งŒ ์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜ ๋ชจ๋ธ๊ณผ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ ๋•๋ถ„์— ๋†’์€ ์„ฑ๋Šฅ์„ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ํŠนํžˆ I/O๊ฐ€ ์ง‘์ค‘์ ์ธ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ข‹์€ ์„ฑ๋Šฅ์„ ๊ฐ€์ง‘๋‹ˆ๋‹ค.

Nodejs ํŠน์ง•

๊ณต์‹๋ฌธ์„œ์—์„œ๋Š” ์•„๋ž˜์™€ ๊ฐ™์ด nodejs๋ฅผ ์†Œ๊ฐœํ•ฉ๋‹ˆ๋‹ค.


As an asynchronous event-driven JavaScript runtime, Node.js is designed to build scalable network applications.


ํŠน์ง•1. ๋น„๋™๊ธฐ ์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜์˜ javascript ์‹คํ–‰๊ธฐ ( asynchronous event-driven JavaScript runtime )

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

nodejs์˜ ๋ชจ๋“  API๋Š” ๋น„๋™๊ธฐ๋กœ non-blocking์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‰ฝ๊ฒŒ ๋งํ•˜๋ฉด nodejs์—์„œ์˜ API ์š”์ฒญ ์‹œ ๋ฐ˜ํ™˜๋˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š๊ณ  ๋‹ค์Œ API ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ž‘์—… ํ”„๋กœ์„ธ์Šค๋Š” nodejs๋Š” ๋‚ด๋ถ€์ ์œผ๋กœ ์ด์ „์— ๋ณด๋‚ธ API์— ๋Œ€ํ•œ ์‘๋‹ต์„ ๋ฐ›๋Š”๋‹ค๊ณ  ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์•„๋ž˜์˜ ์ฝ”๋“œ๋งŒ์œผ๋กœ ์šฐ๋ฆฌ๋Š” ์›น ์„œ๋ฒ„๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

Nodejs
const http = require('http')
 
const hostname = '127.0.0.1'
const port = 3000
 
const server = http.createServer((req, res) => {
  res.statusCode = 200
  res.setHeader('Content-Type', 'text/plain')
  res.end('Hello World')
})
 
server.listen(port, hostname, () => {
  console.log(`Server running at http://${hostname}:${port}/`)
})

๊ธฐ๋ณธ์ ์œผ๋กœ ๋ชจ๋“  ์—ฐ๊ฒฐ(localhost:3000 API ์š”์ฒญ)์€ ๋™์‹œ์— ์ฒ˜๋ฆฌ๋ฉ๋‹ˆ๋‹ค. ์—ฐ๊ฒฐ ์‹œ ์ฝœ๋ฐฑ ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰๋˜๊ณ , ์—ฐ๊ฒฐ์ด ์—†์„ ๋•Œ๋Š” ๋…ธ๋“œ๋Š” sleep(์ ˆ์ „๋ชจ๋“œ) ์ƒํƒœ๋กœ ์ „ํ™˜ ๋ฉ๋‹ˆ๋‹ค.

ํŠน์ง• 2. ๋น ๋ฅด๋‹ค( very fast )

๋‹น์—ฐํ•œ ์ด์•ผ๊ธฐ์ง€๋งŒ, nodejs๋Š” Google Chrome's V8 JavaScript Engine์œผ๋กœ ๋งŒ๋“ค์–ด์กŒ๊ธฐ ๋•Œ๋ฌธ์— ๋งค์šฐ ๋น ๋ฆ…๋‹ˆ๋‹ค. ๋ฌผ๋ก  ๋‹ค๋ฅธ ๋น ๋ฅธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ํ”„๋ ˆ์ž„์›Œํฌ๋“ค์ด ์ƒ๊ฒจ๋‚˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ƒ๋Œ€์ ์œผ๋กœ ๋น ๋ฅธ ๊ฒƒ์ด์ง€ ๋งค์šฐ ๋น ๋ฅด์ง„ ์•Š์Šต๋‹ˆ๋‹ค.

ํŠน์ง• 3. ๋†’์€ ํ™•์žฅ์„ฑ์„ ๊ฐ€์ง„, ๋‹จ์ผ ์Šค๋ ˆ๋“œ( Single Threaded but Highly Scalable )

nodejs๋Š” http ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ์ œ๊ณตํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ์•„ํŒŒ์น˜์™€ ๊ฐ™์€ ๋ณ„๋กœ ์†Œํ”„ํŠธ์›จ์–ด๊ฐ€ ์—†์–ด๋„ ์›น ์„œ๋ฒ„๋ฅผ ์ž‘๋™์‹œํ‚ค๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๊ธฐ์กด์˜ ์›น ์„œ๋ฒ„์˜ ํ†ต์ œ ์—†์ด ์ž์œ ๋กญ๊ฒŒ ํ•ธ๋“ค๋ง์ด ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋†’์€ ํ™•์žฅ์„ฑ์„ ๊ฐ€์ง‘๋‹ˆ๋‹ค.


nodejs๋Š” ๋‹จ์ผ ์Šค๋ ˆ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ๊ธฐ์กด์˜ ๋‹ค๋ฅธ ์„œ๋ฒ„๋ณด๋‹ค ๋” ๋งŽ์€ ์ˆ˜์˜ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ฐœ๋…์„ ์ดํ•ดํ•˜๋ ค๋ฉด, ์šฐ์„  ์Šค๋ ˆ๋“œ์™€ ํ”„๋กœ์„ธ์Šค์˜ ์ฐจ์ด๋ถ€ํ„ฐ ์ดํ•ด๋ฅผ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํ”„๋กœ์„ธ์Šค๋Š” ์šด์˜์ฒด์ œ๊ฐ€ ํ• ๋‹นํ•˜๋Š” ์ž‘์—…์ด๊ณ , ์Šค๋ ˆ๋“œ๋Š” ํ”„๋กœ์„ธ์Šค ๋‚ด์—์„œ ์‹คํ–‰๋˜๋Š” ์ž‘์—…๋‹จ์œ„์ž…๋‹ˆ๋‹ค. nodejs๊ฐ€ ์‹คํ–‰๋˜๋ฉด, ํ”„๋กœ์„ธ์Šค๊ฐ€ ํ•˜๋‚˜ ์‹คํ–‰๋˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ํ”„๋กœ์„ธ์Šค ๋‚ด๋ถ€์˜ ์Šค๋ ˆ๋“œ๊ฐ€ ์ž‘์—…์„ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์‹ค ํ”„๋กœ์„ธ์Šค ์•ˆ์—๋Š” ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์Šค๋ ˆ๋“œ๊ฐ€ ์žˆ์ง€๋งŒ, ์šฐ๋ฆฌ๊ฐ€ ํ•ธ๋“ค๋งํ•  ์ˆ˜ ์žˆ๋Š” ์Šค๋ ˆ๋“œ๋Š” ํ•˜๋‚˜์ด๊ธฐ ๋•Œ๋ฌธ์— nodejs๋ฅผ ๋‹จ์ผ ์Šค๋ ˆ๋“œ๋ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ์™œ ๋‹จ์ผ ์Šค๋ ˆ๋“œ๊ฐ€ ๋” ๋งŽ์ด ์ฒ˜๋ฆฌํ• ๊นŒ์š”? ์‚ฌ์‹ค์€ nodejs์˜ ์ปจ์…‰์€ ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ๋Š” ๊ตฌํ˜„ํ•˜๊ธฐ ์–ด๋ ต์ง€๋งŒ, ์ผ๋ฐ˜์ ์ธ ๊ฒฝ์šฐ์—๋Š” ํšจ์œจ์ ์œผ๋กœ ์‰ฝ๊ณ  ๋น ๋ฅด๊ฒŒ ๊ตฌํ˜„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. nodejs๋Š” ๋ชจ๋“  ์ฒ˜๋ฆฌ๋ฅผ ์ˆœ์ฐจ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” ๋‹จ์ผ ์Šค๋ ˆ๋“œ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ๋‹จ์ผ ์Šค๋ ˆ๋“œ์ด์ง€๋งŒ, ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์˜์—ญ์—์„œ ๋™์‹œ์ฒ˜๋ฆฌ(ex. task queue ๋“ฑ)๋ฅผ ์ง„ํ–‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ผ๋ฐ˜์ ์ธ ๋‹จ์ผ ์Šค๋ ˆ๋“œ์™€ ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ์˜ ์žฅ์ ์„ ๋‹ค ๊ฐ€์ง€๊ณ  ์˜จ ๊ฒƒ์ด๋ผ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ด€๋ จ ๋‚ด์šฉ์€ ์ถ”๊ฐ€๋กœ ๋‹ค๋ฃฐ ์˜ˆ์ •์ž…๋‹ˆ๋‹ค.

ํŠน์ง• 4. No Buffering

๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ผ ๋•Œ, ํ•œ ๋ฒˆ์— ๋ณด๋‚ด๋Š” ๋ฐฉ์‹๊ณผ ๋ฐ์ดํ„ฐ๋ฅผ ์ชผ๊ฐœ์„œ ์—ฌ๋Ÿฌ ๋ฒˆ ๋ณด๋‚ด๋Š” ๋ฐฉ์‹์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์ธ ๋ฒ„ํผ(Buffering) ๋ฐฉ์‹์€ ํŒŒ์ผ์„ ํ•œ ๋ฒˆ์— ๋ณด๋‚ด๋Š” ๋ฐฉ์‹์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. nodejs๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ํ•œ๋ฒˆ์— ๋ณด๋‚ด๋Š” ๊ฒŒ ์•„๋‹ˆ๋ผ ๋ฉ์–ด๋ฆฌ๋กœ ๋‚˜๋ˆ ์„œ ๋ณด๋ƒ…๋‹ˆ๋‹ค. ์ด๋Š” ์šฐ๋ฆฌ๊ฐ€ ํŒŒ์ผ ๋‹ค์šด๋กœ๋“œํ•˜๋Š” ๋ฐฉ์‹๊ณผ ๋น„์Šทํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ๊ด€๋ จ ๋‚ด์šฉ์€ ์ถ”๊ฐ€๋กœ ๋‹ค๋ฃฐ ์˜ˆ์ •์ž…๋‹ˆ๋‹ค.

Nodejs ์„ฑ๋Šฅ ์ตœ์ ํ™”

Nodejs์˜ ์žฅ์ ‘์„ ๊ทน๋Œ€ํ™” ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ๋Š” ๋น„๋™๊ธฐ I/O ์ž‘์—…์„ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋น„๋™๊ธฐ I/O์ฒ˜๋ฆฌ๋Š” ๋…ผ๋ธ”๋กœํ‚น ์ž‘์—…์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜์—ฌ Application ์ž‘์—…๋Ÿ‰๊ณผ ์‘๋‹ต ์‹œ๊ฐ„์„ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


Nodejs ํด๋Ÿฌ์Šคํ„ฐ ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋‹จ์ผ Node.js ์ธ์Šคํ„ด์Šค๊ฐ€ ๋ฉ€ํ‹ฐ ์ฝ”์–ด ์‹œ์Šคํ…œ์˜ ๋ชจ๋“  CPU ์ฝ”์–ด๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๋†’์€ ํŠธ๋ž˜ํ”ฝ ์ฒ˜๋ฆฌํ•˜๋Š” Application์—์„œ๋Š” ํฐ ์žฅ์ ์ด ๋ฉ๋‹ˆ๋‹ค.


์„ฑ๋Šฅ์„ ๋ชจ๋‹ˆํ„ฐ๋งํ•ฉ๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์ธ PM2/Clicin/Relic๊ณผ ๊ฐ™์€ ๋‹ค์–‘ํ•œ ์„ฑ๋Šฅ ๋ชจ๋‹ˆํ„ฐ๋ง์ด ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์„ฑ๋Šฅ ๋ชจ๋‹ˆํ„ฐ๋ง์„ ํ•˜๊ณ  ๋ณ‘๋ชฉ ํ˜„์ƒ์„ ์‹๋ณ„ํ•˜์—ฌ ์ตœ์ ํ™”์— ๋„์›€์„ ์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.