๐Ÿ‘ฉ๐Ÿป‍๐Ÿ’ป Dev/Back-End

Node.js์˜ ๋™์ž‘ ์›๋ฆฌ: ์‹ฑ๊ธ€ ์Šค๋ ˆ๋“œ ๊ธฐ๋ฐ˜ ์ด๋ฒคํŠธ ๋ฃจํ”„, ๋…ผ๋ธ”๋กœํ‚น I/O

yesolz 2024. 8. 31. 16:52
728x90

Node.js

  • Node.js์˜ ์—ญํ• 
    • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ์›น ๋ธŒ๋ผ์šฐ์ € ๋ฐ–์—์„œ๋„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” ํ”Œ๋žซํผ.
    • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ์Šคํฌ๋ฆฝํŠธ ์–ธ์–ด ์ด์ƒ์œผ๋กœ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•˜๊ฒŒ ํ•จ.
  • Node.js์˜ ํ™œ์šฉ
    • ๋ฐฑ์—”๋“œ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋‹ค์–‘ํ•œ ๋ถ„์•ผ์—์„œ ์‚ฌ์šฉ:
  • ํ”„๋ก ํŠธ์—”๋“œ ํ”„๋ ˆ์ž„์›Œํฌ
    • React์™€ Vue ๋“ฑ์€ Node.js๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋นŒ๋“œ ๋ฐ ๊ฐœ๋ฐœ ๋„๊ตฌ ์ฒด์ธ์„ ์ œ๊ณต.

 

Node.js๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ์‹ฑ๊ธ€ ์Šค๋ ˆ๋“œ ํŠน์„ฑ์„ ์œ ์ง€ํ•˜๋ฉด์„œ๋„, ์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜ ๋ฐ ๋…ผ๋ธ”๋กœํ‚นI/O ๋ชจ๋ธ์„ ํ†ตํ•ด ๋น„๋™๊ธฐ ์ž‘์—…์„ ํšจ์œจ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค๊ณ„๋œ ๋Ÿฐํƒ€์ž„ ํ™˜๊ฒฝ์ด๋‹ค!

 

์‹ฑ๊ธ€ ์Šค๋ ˆ๋“œ ๊ธฐ๋ฐ˜ ์ด๋ฒคํŠธ ๋ฃจํ”„

 

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ์‹ฑ๊ธ€ ์Šค๋ ˆ๋“œ ํŠน์„ฑ

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์–ธ์–ด ์ž์ฒด๋Š” ์‹ฑ๊ธ€ ์Šค๋ ˆ๋“œ๋กœ ์„ค๊ณ„๋˜์–ด์žˆ๋‹ค. 

์ฆ‰, ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์˜ ์ž‘์—…๋งŒ์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด๋‹ค.

 

์ด๋ฒคํŠธ ๋ฃจํ”„

Node.js๋Š” ์‹ฑ๊ธ€ ์Šค๋ ˆ๋“œ๋กœ ๋™์ž‘ํ•˜๋Š” ์ด๋ฒคํŠธ ๋ฃจํ”„๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋น„๋™๊ธฐ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•œ๋‹ค.

์ด๋ฒคํŠธ ๋ฃจํ”„๋Š” JavaScript ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๊ณ , ์ž‘์—…์ด ์™„๋ฃŒ๋  ๋•Œ๋งˆ๋‹ค ๊ทธ ์ž‘์—…์— ๋Œ€ํ•œ ์ฝœ๋ฐฑ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.

* ์ฝœ๋ฐฑ: ์ž‘์—…์ด ์™„๋ฃŒ๋œ ํ›„ ํ˜ธ์ถœ๋˜๋Š” ํ•จ์ˆ˜

  • ๋น„๋™๊ธฐ ์ž‘์—…์ด ๋ฐœ์ƒํ•˜๋ฉด, ์ž‘์—…์„ ์ด๋ฒคํŠธ ๋ฃจํ”„์— ๋“ฑ๋ก
  • ์ž‘์—… ์ž์ฒด๋Š” ์ด๋ฒคํŠธ ๋ฃจํ”„๊ฐ€ ์ง์ ‘ ์ฒ˜๋ฆฌํ•˜์ง€ ์•Š๊ณ , libuv ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ ํ’€์— ์˜ํ•ด ์ฒ˜๋ฆฌ๋จ.
  • ์ž‘์—…์ด ์™„๋ฃŒ๋˜๋ฉด ํ•ด๋‹น ์ž‘์—…์˜ ์ฝœ๋ฐฑ์ด ์ž‘์—… ํ์— ์ถ”๊ฐ€๋˜๋ฉฐ, ์ด๋ฒคํŠธ ๋ฃจํ”„๊ฐ€ ์ด ์ฝœ๋ฐฑ์„ ์‹คํ–‰ํ•จ

 

์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜(Event-Driven)

์ž‘์—…์ด ์™„๋ฃŒ๋˜๋ฉด ๊ทธ์— ๋Œ€ํ•œ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉฐ, ํ•ด๋‹น ์ด๋ฒคํŠธ์— ์—ฐ๊ฒฐ๋œ ์ฝœ๋ฐฑ ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰๋œ๋‹ค.

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

  • ์ด๋ฒคํŠธ ๋ฃจํ”„๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ž‘์—…์ด ์™„๋ฃŒ๋˜๋ฉด ๊ทธ์— ๋Œ€ํ•œ ์ด๋ฒคํŠธ๋ฅผ ์ฒ˜๋ฆฌํ•œ๋‹ค.
  • ์ž‘์—…์ด ์™„๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š๊ณ , ๋‹ค๋ฅธ ์ž‘์—…์„ ๊ณ„์† ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ex) ์š”๋ฆฌ์‚ฌ๊ฐ€ ์Œ์‹์„ ์ค€๋น„ํ•ด๋†“๊ณ  ์•Œ๋žŒ์„ ์„ค์ •ํ•ด๋†“๊ณ , ์•Œ๋žŒ์ด ์šธ๋ฆฌ๊ธฐ ์ „๊นŒ์ง€ ๋‹ค๋ฅธ ์ผ์„ ํ•จ

 

 

๋…ผ๋ธ”๋กœํ‚น I/O

๋…ผ๋ธ”๋กœํ‚น I/O: I/O์ž‘์—…์ด ์™„๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š๊ณ  ๋‹ค๋ฅธ ์ž‘์—…์„ ์ฆ‰์‹œ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ์‹

Node.js๋Š” ๋‚ด๋ถ€์ ์œผ๋กœ libuv๋ผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋Ÿฌํ•œ ๋…ผ๋ธ”๋กœํ‚น I/O๋ฅผ ๊ตฌํ˜„ํ•œ๋‹ค.

libuv๋Š” ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ ํ’€์„ ์šด์˜ํ•˜์—ฌ ์—ฌ๋Ÿฌ I/O ์ž‘์—…์„ ๋ณ‘๋ ฌ๋กœ ์ฒ˜๋ฆฌํ•˜๊ณ , ์ž‘์—…์ด ์™„๋ฃŒ๋˜๋ฉด ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ์ด๋ฒคํŠธ ๋ฃจํ”„์— ์ „๋‹ฌํ•œ๋‹ค.

-> ์ด ๋ฐฉ์‹ ๋•๋ถ„์— Node.js๋Š” ๋งˆ์น˜ ์—ฌ๋Ÿฌ ์ž‘์—…์„ ๋™์‹œ์— ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ ํ™˜๊ฒฝ์ฒ˜๋Ÿผ ๋™์ž‘ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

๋…ผ๋ธ”๋กœํ‚น ์‹ค์Šต: setTimeout

function first() {
  console.log("first function");
}

function second() {
  console.log("second function");
}

function third() {
  console.log("third function");
}
first();
setTimeout(second, 2000);
third();
  • setTimeout(second, 2000)์€ second ํ•จ์ˆ˜๋ฅผ 2์ดˆ ํ›„์— ์‹คํ–‰ํ•˜๋„๋ก ์˜ˆ์•ฝํ•˜๋ฉฐ, ์ฆ‰์‹œ ์‹คํ–‰๋˜์ง€ ์•Š๋Š”๋‹ค. ์ด๋กœ ์ธํ•ด ๋น„๋™๊ธฐ์ ์œผ๋กœ ์ฒ˜๋ฆฌ๋œ๋‹ค.
  • setTimeout ํ•จ์ˆ˜๋Š” ๋…ผ๋ธ”๋กœํ‚น ๋น„๋™๊ธฐ ์ž‘์—…์˜ ์˜ˆ์ด๋‹ค. JavaScript๋Š” setTimeout์„ ๋งŒ๋‚˜๋ฉด ํ•ด๋‹น ์ž‘์—…์„ ๋ฐฑ๊ทธ๋ผ์šด๋“œ๋กœ ๋„˜๊ธฐ๊ณ , ๋ฐ”๋กœ ๋‹ค์Œ ์ฝ”๋“œ๋กœ ๋„˜์–ด๊ฐ€์„œ ์‹คํ–‰ํ•œ๋‹ค. ์ดํ›„, ์ •ํ•ด์ง„ ์‹œ๊ฐ„์ด ์ง€๋‚˜๋ฉด second ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰๋œ๋‹ค.

 

setTimeout(second, 2000) - ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ํ•จ์ˆ˜๋ฅผ ์ „๋‹ฌ.

" ์ฝœ๋ฐฑ ํ•จ์ˆ˜ " : ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ํ•จ์ˆ˜๋ฅผ ์ „๋‹ฌํ•˜๋Š” ๊ฒƒ. 

 

์š”์•ฝ

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ์‹ฑ๊ธ€ ์Šค๋ ˆ๋“œ๋กœ ๋™์ž‘ํ•˜์ง€๋งŒ, Node.js๋Š” ๋‚ด๋ถ€์ ์œผ๋กœ libuv์˜ ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ ํ’€์„ ์‚ฌ์šฉํ•˜์—ฌ ๋น„๋™๊ธฐ I/O ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•œ๋‹ค. 


์‰ฝ๊ฒŒ ์ƒ๊ฐํ•˜๋ฉด, ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ž์ฒด๋Š” ์‹ฑ๊ธ€์Šค๋ ˆ๋“œ์ด์ง€๋งŒ, Node.js ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ณณ์€ ์‹ฑ๊ธ€์Šค๋ ˆ๋“œ๊ฐ€ ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋…ผ๋ธ”๋กœํ‚น์ด ๊ฐ€๋Šฅํ•œ ๊ฒƒ์ด๋‹ค.

 

728x90