Node.js๋ž€?


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

  • ์ฆ‰, Javascript ๋กœ ๋ธŒ๋ผ์šฐ์ € ๋ฐ–์—์„œ ์„œ๋ฒ„๋ฅผ ๊ตฌ์ถ•ํ•˜๋Š” ๋“ฑ์˜ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ๋Ÿฐํƒ€์ž„ ํ™˜๊ฒฝ์ž„.

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

  • Node ์˜ ํ•ต์‹ฌ ์ฒ ํ•™์€ ๋น„๋™๊ธฐ๋กœ ๋™์ž‘ํ•˜์—ฌ I/O ์ž‘์—…์ผ ๊ฒฝ์šฐ ์›Œ์ปค์Šค๋ ˆ๋“œ์— ๋˜์ ธ๋‘๊ณ  ์ด๋ฒคํŠธ ๋ฃจํ”„๋Š” ๋‹ค๋ฅธ์ผ์„ ํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋ฉฐ ์ด๋•Œ I/O์ž‘์—… ์ฒ˜๋ฆฌ๋Š” libuv๊ฐ€ ๋‹ด๋‹นํ•จ.

  • ๊ทธ๋Ÿฌ๋ฉด, Node.js ์‹ฑ๊ธ€ ์Šค๋ ˆ๋“œ์ผ๊นŒ์š”?

    ๋ณดํ†ต Javascript๋Š” ์‹ฑ๊ธ€ ์Šค๋ ˆ๋“œ๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿผ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์‹คํ–‰๋˜๋Š” ํ™˜๊ฒฝ์ธ ๋…ธ๋“œ๋Š” ์‹ฑ๊ธ€์ผ๊นŒ?

    โ‡’ ์ •ํ™•ํ•˜๊ฒŒ ๋งํ•˜๋ฉด ๋…ธ๋“œ๋Š” ์‹ฑ๊ธ€์Šค๋ ˆ๋“œ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.

    โ€œ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ์Šค๋ ˆ๋“œ๋Š” ๋‹จ ํ•˜๋‚˜์ด๋ฏ€๋กœโ€ฆโ€

  • ๊ทธ๋Ÿฌ๋ฉด, libuv๋Š” ๋ญ”๊ฐ€์š”?

    libuv๋ž€ C/C++๋กœ ์ž‘์„ฑ๋œ, Node.js๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ๋น„๋™๊ธฐ I/O ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ž…๋‹ˆ๋‹ค.

    ์ด๋Š” ์‚ฌ์‹ค ์šด์˜์ฒด์ œ์˜ ์ปค๋„์„ ์ถ”์ƒํ™”ํ•œ Wrapping๋œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ์ปค๋„์ด ์–ด๋–ค ๋น„๋™๊ธฐ API๋กœ ์ง€์›ํ•˜๋Š”์ง€ ์•Œ๊ณ  ์žˆ๋‹ค๊ณ ํ•ฉ๋‹ˆ๋‹ค.

    • ๊ทธ๋Ÿฌ๋ฉด, ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌ๋ฅผํ•˜๋‚˜์š”?

      ์šฐ๋ฆฌ๊ฐ€ libuv์—๊ฒŒ ํŒŒ์ผ ์ฝ๊ธฐ์™€ ๊ฐ™์€ ๋น„๋™๊ธฐ ์ž‘์—…์„ ์š”์ฒญํ•˜๋ฉด libuv๋Š” ์ด ์ž‘์—…์„ ์ปค๋„์ด ์ง€์›ํ•˜๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ๋งŒ์•ฝ ์ง€์›ํ•œ๋‹ค๋ฉด libuv๊ฐ€ ์ปค๋„์—๊ฒŒ ๋น„๋™๊ธฐ์ ์œผ๋กœ ์š”์ฒญํ–ˆ๋‹ค๊ฐ€ ์‘๋‹ต์ด ์˜ค๋ฉด ๊ทธ ์‘๋‹ต์„ ์šฐ๋ฆฌ์—๊ฒŒ ์ „๋‹ฌํ•ด์คŒ. ๋งŒ์•ฝ ์š”์ฒญํ•œ ์ž‘์—…์„ ์ปค๋„์ด ์ง€์›ํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ์ž์‹ ๋งŒ์˜ ์›Œ์ปค์Šค๋ ˆ๋“œ๊ฐ€ ๋‹ด๊ธด ์Šค๋ ˆ๋“œ ํ’€์„ ์‚ฌ์šฉํ•จ.

      libuv๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ 4๊ฐœ์˜ ์Šค๋ ˆ๋“œ๋ฅผ ๊ฐ€์ง„ ์Šค๋ ˆ๋“œ ํ’€์„ ์ƒ์„ฑํ•จ.

      ๊ฒฐ๊ตญ์—๋Š”, ์ด๋ฒคํŠธ ๋ฃจํ”„๊ฐ€ ์‹ฑ๊ธ€ ์Šค๋ ˆ๋“œ์ด๋ฉฐ, ๋ธ”๋กœํ‚น I/O ๊ด€๋ จ๋œ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฑ๊ทธ๋ผ์šด๋“œ๋Š” ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ๋กœ ์ด๋ฃจ์–ด์ ธ์žˆ๋‹ค. I/O๊ด€๋ จ ๋ธ”๋กœํ‚น ์ž‘์—…์€ OS๋˜๋Š” libuv์˜ thread pool์—์„œ ์ฒ˜๋ฆฌํ•˜์—ฌ ์ด๋ฒคํŠธ ๋ฃจํ”„๊ฐ€ blocking๋˜์ง€ ์•Š๊ฒŒ ํ•จ.

      ์—ฌ๊ธฐ์„œ ๊ทธ๋Ÿฌ๋ฉด, libuv์™€ Event loop์™€์˜ ๊ด€๊ณ„๊ฐ€ ๋ญ๊ธธ๋ž˜, ์–ด๋–ป๊ฒŒ ์‹ฑ๊ธ€ ์Šค๋ ˆ๋“œ๋กœ ๋…ผ๋ธ”๋กœํ‚น ๋น„๋™๊ธฐ ์ž‘์—…์„ ์ง€์›ํ•˜๋Š”๊ฐ€์— ๋Œ€ํ•ด ๊ถ๊ธˆ์ฆ์ด ์ƒ๊น๋‹ˆ๋‹ค.

      ๊ฐ„๋‹จํ•˜๊ฒŒ ์ •๋ฆฌํ•˜์ž๋ฉด, Node.js๋Š” I/O์ž‘์—…์„ ์ž์‹ ์˜ ๋ฉ”์ธ ์Šค๋ ˆ๋“œ๊ฐ€ ์•„๋‹Œ ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ์— ์œ„์ž„ํ•จ์œผ๋กœ์จ ์‹ฑ๊ธ€ ์Šค๋ ˆ๋“œ๋กœ ๋…ผ ๋ธ”๋กœํ‚น I/O๋ฅผ ์ง€์›ํ•จ. ๋‹ค์‹œ ๋งํ•ด, Node.js๋Š” I/O์ž‘์—…์„ libuv์— ์œ„์ž„ํ•จ์œผ๋กœ์จ ๋…ผ ๋ธ”๋กœํ‚น I/O๋ฅผ ์ง€์›ํ•˜๊ณ  ๊ทธ ๊ธฐ๋ฐ˜์—๋Š” ์ด๋ฒคํŠธ ๋ฃจํ”„๊ฐ€ ์žˆ์Œ.

  • ๊ทธ๋Ÿฌ๋ฉด, ์‹ฑ๊ธ€ ์Šค๋ ˆ๋“œ๋ผ๋ฉด์„œ ๋น„๋™๊ธฐ ์ž‘์—…์€ ์–ด๋–ป๊ฒŒ ๊ฐ€๋Šฅํ• ๊นŒ์š”?

    ์Šค๋ ˆ๋“œ๊ฐ€ ํ•˜๋‚˜๋ผ๋ฉด ๋™์‹œ์— ํ•˜๋‚˜์˜ ์ž‘์—…๋งŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์–ด๋–ป๊ฒŒ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ• ๊นŒ์š”?

    ๋น„๋™๊ธฐ๋ž€ ๋จผ์ € ์‹คํ–‰๋œ ์ฝ”๋“œ์˜ ์ž‘์—…์ด ๋๋‚˜๊ธฐ ์ „์— ๋” ๋‚˜์ค‘์— ์‹คํ–‰๋œ ์ฝ”๋“œ์˜ ์ž‘์—…์ด ๋๋‚  ์ˆ˜ ์žˆ์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ๋™์‹œ์„ฑ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์ฝ”๋“œ๋“ค์ด์ฃ .

    ์Šค๋ ˆ๋“œ๊ฐ€ ํ•˜๋‚˜์ž„์—๋„ ๋™์‹œ์„ฑ์ด ์ง€์›๋˜๋Š” ์ด์œ ๋Š” ๋ฐ”๋กœ โ€œ์ด๋ฒคํŠธ ๋ฃจํ”„โ€ ๋ผ๋Š” ์นœ๊ตฌ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

    ๊ทธ๋ ‡๋‹ค๋ฉด ์ด๋ฒคํŠธ ๋ฃจํ”„๋Š” ๋ฌด์—‡์ผ๊นŒ์š”?

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

      • ์ด๋ฒคํŠธ ๋ฃจํ”„๋Š” Node.js๊ฐ€ ์—ฌ๋Ÿฌ ๋น„๋™๊ธฐ ์ž‘์—…์„ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ๊ตฌํ˜„์ฒด์ž…๋‹ˆ๋‹ค.

      • ์ด๋ฒคํŠธ ๋ฃจํ”„๋Š” ์‹ฑ๊ธ€ ์Šค๋ ˆ๋“œ์ด๋ฉฐ ๋ฉ”์ธ ์“ฐ๋ ˆ๋“œ์ด๋ฉฐ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

        console.log(โ€™โ€ฆโ€™) ์™€ ๊ฐ™์€ ๋™๊ธฐ ์ž‘์—…์ด ์•„๋‹ˆ๋ผ file.readFile(โ€™test.txtโ€™,callback)๊ณผ ๊ฐ™์€ ๋น„๋™๊ธฐ ์ž‘์—…๋“ค์„ ๋ชจ์•„์„œ ๊ด€๋ฆฌํ•˜๊ณ  ์ˆœ์„œ๋Œ€๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ๋„๊ตฌ์ž„.

        Timer Phase, Pending Callbacks Phase, Idel,Prepare Phase, Poll Phase, Check Phase, Close Callbacks Phase๋กœ ๊ตฌ์„ฑ๋˜์–ด์žˆ์Œ.

        ํ•œ ํŽ˜์ด์ฆˆ์—์„œ ๋‹ค์Œ ํŽ˜์ด์ฆˆ๋กœ ๋„˜์–ด๊ฐ€๋Š” ๊ฒƒ์„ ํ‹ฑ(Tick)์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

'Web > JavaScript' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

JavaScript๋ž€?  (0) 2024.03.05
[Node.js] ์ด๋ฒคํŠธ ๋””๋ฉ€ํ‹ฐํ”Œ๋ ‰์‹ฑ  (0) 2024.03.05
[Javascript] ์–•์€ ๋ณต์‚ฌ์™€ ๊นŠ์€ ๋ณต์‚ฌ  (0) 2024.02.05

+ Recent posts