Node.js

Node.js๊ฐ€ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•

  • ๋Ÿฐํƒ€์ž„ ํ™˜๊ฒฝ์—์„œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ ๊ฐ’์„ ์ฒ˜๋ฆฌํ•˜๋Š” ์ž‘์—…์€ V8 ์—”์ง„์„ ํ†ตํ•ด์„œ ํ•˜๊ฒŒ๋จ

  • ํ•˜์ง€๋งŒ ํŒŒ์ผ์„ ์ฝ๋Š” ๊ฒƒ(*DB ์ ‘๊ทผ ๋“ฑ)์€ V8 ์—”์ง„์œผ๋กœ๋Š” ๋ถˆ๊ฐ€๋Šฅ

  • ์ด๋Ÿฌํ•œ ๋ถ€๋ถ„์€ libuv ๋ฅผ ํ†ตํ•ด์„œ ์ž‘์—…ํ•˜๊ฒŒ๋จ

  • Node.js๋Š” V8 ์—”์ง„๊ณผ libuv๋ฅผ ์—ฐ๊ฒฐ(๋ฐ”์ธ๋”ฉ)

  • V8์ด ์ฝ”๋“œ๋ฅผ ๋ณผ ๋•Œ ํŒŒ์ผ ์‹œ์Šคํ…œ ๊ฐ™์€ ๊ธฐ๋Šฅ์ด ํ•„์š”ํ•˜๋‹ค๋ฉด Node.js API๋ฅผ ํ˜ธ์ถœํ•จ

  • API๋Š” JS๋กœ ์ž‘์„ฑ๋œ๊ฒƒ๋„ ์žˆ์ง€๋งŒ low level ์—์„œ๋Š” C++, C ์–ธ์–ด๋กœ ๋˜์–ด์žˆ์Œ

    • ๊ทธ๋ž˜์„œ JS๊ฐ€ C๋‚˜ C++๋ฅผ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๊ฒŒ Node.js binding์„ ์‚ฌ์šฉ

  • libuv๋Š” ๋น„๋™๊ธฐ input/output task๋ฅผ ์ฒ˜๋ฆฌ (C๋กœ ์ž‘์„ฑ๋จ)

circle-info

์ฆ‰, V8์ด ์ฝ”๋“œ๋ฅผ ํ•ด์„ํ•˜๊ณ  Node.js APIs ์ค‘ ํ•˜๋‚˜์˜ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๊ณ  Node.js ๋ฐ”์ธ๋”ฉ์„ ํ†ตํ•ด์„œ libuv์— ์˜ํ•ด ์›ํ•˜๋Š” ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•˜๊ฒŒ ํ•จ

libuvarrow-up-right (์œ ๋‹ˆ์ฝ˜ ๋ฒจ๋กœ์‹œ๋ ™ํ„ฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ)

์ด๋ฒคํŠธ ๋ฃจํ”„๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋‘” ๋น„๋™๊ธฐ I/O๋ฅผ ์ง€์›ํ•˜๋Š” ๋ฉ€ํ‹ฐ ํ”Œ๋žซํผ C ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

  • ์ฃผ๋กœ node.js์—์„œ ์‚ฌ์šฉ๋˜๋„๋ก ๊ฐœ๋ฐœ๋˜์—ˆ์ง€๋งŒ ๋‹ค๋ฅธ ๋„๊ตฌ์—์„œ๋„ ์‚ฌ์šฉ๋จ

  • ๊ฐ ํ”Œ๋žซํผ(๋งฅ, ์œˆ๋„์šฐ)์˜ ๊ฐ€์žฅ ๋น ๋ฅธ ๋น„๋™๊ธฐ I/O ์ธํ„ฐํŽ˜์ด์Šค๋กœ ํ†ต์ผ๋œ ์ฝ”๋“œ๋กœ ๋Œ๋ฆด ์ˆ˜ ์žˆ๋Š” ์žฅ์ ์žˆ์Œ

  • ํŒŒ์ผ์‹œ์Šคํ…œ, DNS, ๋„คํŠธ์›Œํฌ, ํŒŒ์ดํ”„, ์‹ ํ˜ธ ์ฒ˜๋ฆฌ, ํด๋ง ๋ฐ ์ŠคํŠธ๋ฆฌ๋ฐ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฉ”์ปค๋‹ˆ์ฆ˜ ์ œ๊ณต

circle-info

unix(๋ฆฌ๋ˆ…์Šค or ๋งฅ)๊ณผ window์—์„œ ํŒŒ์ผ์„ ์ปจํŠธ๋กคํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋‹ค๋ฅด์ง€๋งŒ libuv์—์„œ ์„œ๋กœ ํ˜ธํ™˜๋˜๊ฒŒ ํ•ด์ฃผ๋ฏ€๋กœ ๋…ธ๋“œ์—์„œ๋Š” ์ด ๋ถ€๋ถ„์„ ์‹ ๊ฒฝ์“ฐ์ง€ ์•Š๊ณ  ๋™์ผํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ๋จ

Last updated