๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
์นดํ…Œ๊ณ ๋ฆฌ ์—†์Œ

Node.js๋ž€?

by ghan2 2024. 11. 16.
๐Ÿ’ก Node.js๋ž€ ๋ฌด์—‡์ด๊ณ  ์–ด๋А ์ƒํ™ฉ์—์„œ ์‚ฌ์šฉํ• ๊นŒ?

Node.js๋Š” JavaScript ์‹คํ–‰ ํ™˜๊ฒฝ์ด๋‹ค!!

2009๋…„์— ์ฒ˜์Œ ์†Œ๊ฐœ๋œ ์˜คํ”ˆ์†Œ์Šค Javascript ์—”์ง„์ธ ํฌ๋กฌ V8์— ๋น„๋™๊ธฐ ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ libuv๋ฅผ ๊ฒฐํ•ฉํ•œ ํ”Œ๋žซํผ.

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ์‹คํ–‰ํ™˜๊ฒฝ์€ ๋ธŒ๋ผ์šฐ์ €์— ์žˆ์ง€๋งŒ, ์ด ํ™˜๊ฒฝ์„ ๋ธŒ๋ผ์šฐ์ € ๋ฐ–์œผ๋กœ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ค€๋‹ค.

์ด๋ฅผ ํ†ตํ•ด ๋ชจ๋ฐ”์ผ ์•ฑ๋„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๊ณ  ๋‹ค์–‘ํ•œ ๋ฐฉ๋ฉด์œผ๋กœ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

์„ค์น˜ ๋ฐฉ๋ฒ•

https://nodejs.org/en/download

  1. ๋‹จ์ผ ์Šค๋ ˆ๋“œ(Single Thread)
    1. ํ•˜๋‚˜์˜ ์Šค๋ ˆ๋“œ๊ฐ€ ๋ชจ๋“  ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ๋‹ค
    2. ์Šค๋ ˆ๋“œ๊ฐ€ 1๊ฐœ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰๊ณผ ์‹œ์Šคํ…œ ๋ฆฌ์†Œ์Šค ์‚ฌ์šฉ๋Ÿ‰ ๋ณ€ํ™”๊ฐ€ ๋งŽ์ง€ ์•Š๋‹ค.
    3. ๋”ฐ๋ผ์„œ ๋Œ€๊ทœ๋ชจ ๋„คํŠธ์›Œํฌ ํ”„๋กœ๊ทธ๋žจ์„ ๊ฐœ๋ฐœํ•˜๊ธฐ ์ ํ•ฉํ•˜๋‹ค.
    4. ํ•˜์ง€๋งŒ ์“ฐ๋ ˆ๋“œ ํ•˜๋‚˜๊ฐ€ ๋ฌด๋„ˆ์ง„๋‹ค๋ฉด ํ”„๋กœ๊ทธ๋žจ ์ „์ฒด์— ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.
    5. ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ์˜ ๊ฒฝ์šฐ Context Switching์„ ์ด์šฉํ•˜์—ฌ ์—ฌ๋Ÿฌ ์ž‘์—…์„ ๋™์‹œ์— ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์ด ๋А๋ผ๊ฒŒ ํ•˜์ง€๋งŒ, ์˜คํžˆ๋ ค Context Switching์„ ํ•˜๋Š” ์‹œ๊ฐ„ ๋•Œ๋ฌธ์— ์ด ์ž‘์—…์‹œ๊ฐ„์ด ๋” ๊ฑธ๋ฆด ์ˆ˜ ์žˆ๋‹ค.
    6. CPU์‚ฌ์šฉ๋ฅ ์ด ๋†’์€ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ๋Š” Node.js ์‚ฌ์šฉ์„ ๊ถŒ์žฅํ•˜์ง€ ์•Š๋Š”๋‹ค.

Node.js์˜ ํŠน์ง•

  • Node.js๋Š” Single-Thread์˜ non-blocking I/O ์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜ ๋น„๋™๊ธฐ ๋ฐฉ์‹์œผ๋กœ ์ž‘๋™ํ•œ๋‹ค.
  • ์‚ฌ์šฉ์ž์˜ ์š”์ฒญ์€ ํ•œ ๊ณณ(๋‹จ์ผ ์Šค๋ ˆ๋“œ)์—์„œ ๋ฐ›์ง€๋งŒ, ์‹ค์งˆ์ ์ธ ์ž‘์—…์„ ๋ฉ€ํ‹ฐ์“ฐ๋ ˆ๋“œ๋กœ ์šด์˜ํ•˜์—ฌ ๊ฒฐ๊ณผ๋ฅผ ๊ตฌํ˜„ํ•œ๋‹ค. (Thread Pool)
  • ๋‹จ์ผ ์Šค๋ ˆ๋“œ์ด๊ธฐ์— ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์˜ ๋ณ€ํ™”๊ฐ€ ํฌ์ง€ ์•Š๋‹ค.
  • ๋”ฐ๋ผ์„œ ๋Œ€๊ทœ๋ชจ ๋„คํŠธ์›Œํฌ ํ”„๋กœ๊ทธ๋žจ์„ ๊ฐœ๋ฐœํ•˜๊ธฐ ์ ํ•ฉํ•œ ํ˜•ํƒœ์ด๋‹ค.
  • ํ•˜์ง€๋งŒ ์Šค๋ ˆ๋“œ ํ•˜๋‚˜๊ฐ€ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒ๋˜๋ฉด ์ „์ฒด๊ฐ€ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธด๋‹ค.
  • ๋‹จ์ผ ์Šค๋ ˆ๋“œ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ฉ”๋ชจ๋ฆฌ๋‚˜ ๋ฆฌ์†Œ์Šค ๋“ฑ์ด ๋งŽ์ด ํ•„์š”ํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์›น์„œ๋น„์Šค์— ๋งž์ง€ ์•Š๋Š”๋‹ค.

Node.js ์ž‘๋™ ์›๋ฆฌ

  • ์ž…์ถœ๋ ฅ์€ ์ด๋ฒคํŠธ ๋ฃจํ”„ ๊ธฐ๋ฐ˜์˜ ์‹ฑ๊ธ€ ์Šค๋ ˆ๋“œ, ์‹ค์งˆ์ ์ธ ์ž‘์—…์€ ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ๋กœ ์‹คํ–‰ํ•œ๋‹ค.

Node.js๊ฐ€ ์–ด์šธ๋ฆฌ๋Š” ์›น์„œ๋น„์Šค

  • ๊ฐ„๋‹จํ•œ ๋กœ์ง
  • ๋Œ€๋Ÿ‰์˜ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ ‘์†ํ•˜๋Š” ์„œ๋น„์Šค(์ž…์ถœ๋ ฅ ๋งŽ์Œ)
  • ๋น ๋ฅธ ๊ฐœ๋ฐœ ์š”๊ตฌ
  • ๋น ๋ฅธ ์‘๋‹ต์‹œ๊ฐ„ ์š”๊ตฌ
  • ๋น„๋™๊ธฐ ๋ฐฉ์‹์— ์–ด์šธ๋ฆฌ๋Š” ์„œ๋น„์Šค (ex. ์ŠคํŠธ๋ฆฌ๋ฐ ์„œ๋น„์Šค, ์ฑ„ํŒ… ์„œ๋น„์Šค)

Node.js๊ฐ€ ์–ด์šธ๋ฆฌ์ง€ ์•Š๋Š” ์›น์„œ๋น„์Šค

  • ๋‹จ์ผ ์ž‘์—…์ด ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๋Š” ์„œ๋น„์Šค
  • ๋กœ์ง ๋ณต์žก๋„๊ฐ€ ๋†’์€ ๊ฒฝ์šฐ