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 |