Node.js๋ Chrome V8 JavaScript ์์ง์ผ๋ก ๋น๋๋ JavaScript ๋ฐํ์์ด๋ค.
์ฆ, Node.js๋ JS๋ฅผ ๋ธ๋ผ์ฐ์ ๋ง๊ณ ๋ ๋ก์ปฌ PC์์๋ ์คํ์์ผ ์ค ์ ์๋ค. ๋ฐ๋ผ์ Node.js๋ฅผ ํตํ์ฌ ๋ค์ํ JS ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ ์๋ฒ๊น์ง ์คํํ ์ ์๋ค.
ํฌ๋กฌ, ์ต์คํ๋ก์ด, ํ์ด์ดํญ์ค ๋ฑ์ ๋ธ๋ผ์ฐ์ ๋ JS๋ฅผ ์ฝ๊ณ ํด์ํ ์ ์๋ค. JS๋ฅผ ์ฝ๊ณ ํด์ํ๋๊ฒ ๋น ๋ฅผ์๋ก ์น์ฌ์ดํธ ๋ ๋๋ง ์ฑ๋ฅ์ด ์ข์์ง๊ธฐ ๋๋ฌธ์ ๋ธ๋ผ์ฐ์ ๊ฐ๋ฐ์๋ค์ JS ํด์์์ง์ ๊ฐ๋ฐํ๋๋ฐ ์ด์ฑ์ด์๋ค. ์ด๋ Chrome ๋ธ๋ผ์ฐ์ ๊ฐ๋ฐ์๋ค์ด JS ํด์์์ง์ธ V8์ด๋ผ๋ ํ๋ก๊ทธ๋จ์ ๋ง๋ค์๊ณ V8์ ์ฑ๋ฅ์ด ๋๋ฌด ์ข์์ V8์ ๋ ๋ผ์ด ๋ง๋ ๊ฒ์ด Node.js์ด๋ค.
JavaScript์ ๊ฐ์ ์คํฌ๋ฆฝํธ ์ธ์ด๋ ํน์ ํ ํ๋ก๊ทธ๋จ ์์์๋ง ๋์ํ๊ธฐ ๋๋ฌธ์ ์น๋ธ๋ผ์ฐ์ ํ๋ก๊ทธ๋จ ์์์๋ง ๋์ํ๋ค. ์ฆ, ์น๋ธ๋ผ์ฐ์ ํ๋ก๊ทธ๋จ์ด ์๋ค๋ฉด JS๋ ์ฌ์ฉํ ์ ์๋ค๋ ์๋ฏธ์ด๋ค. ์ฌ๊ธฐ์ Node.js๊ฐ ๋์ค๋ ์ด์ ๊ฐ ๋๋ฉฐ Node๋ฅผ ์ค์นํ๋ฉด cmd์ ๊ฐ์ ํฐ๋ฏธ๋ ํ๋ก๊ทธ๋จ์์ Node.js๋ฅผ ์ ๋ ฅํ์ฌ ๋ธ๋ผ์ฐ์ ์์ด JS๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
โจ ์ฌ๊ธฐ์ ์ค์ํ ์ ์ Server-Client ์น์ฌ์ดํธ๋ฅผ ๋ง๋ค ๋ ์น์์ ํ์๋๋ ๋ถ๋ถ์ JS๋ฅผ ์ฌ์ฉํ๊ณ , ์๋ฒ๋ Java๋ฑ์ ์ธ์ด๋ฅผ ์ฌ์ฉํด์ผํ์ง๋ง Node.js๋ฅผ ํตํด์ ์๋ฒ๋ฅผ ๋ง๋ค ์ ์์ผ๋ฉฐ, ๋ฐ๋ผ์ FE์ BE์์ JS ํ ๊ฐ์ง ์ธ์ด๋ฅผ ์ฌ์ฉํด ๊ฐ๋ฐํ ์ ์๋ค.
๊ทธ๋ฆฌํ์ฌ Node.js์ ์์๊ฐ ์ ์ ๋์ด๋๋ค๋ ์ ..!
Node.js๋ event loop, event queue, call stack์ผ๋ก ๊ตฌ์ฑ์ด ๋์ด์์ผ๋ฉฐ ํน์ ์ํฉ์ O/S kernel์ ์์ ์ ์์ํ๋ค.
์ฑ๊ธ์ค๋ ๋๋ ๋ฉ์ธ์ค๋ ๋ ํ๋๋ง ๊ฐ์ง๊ณ ์์ฐจ์ ์ผ๋ก ์์ ์ ์ฒ๋ฆฌํ๋ค.
event loop์ call stack์ ๊ด๋ฆฌํ๋ค.
node.js์์ ๊ฐ์ฅ ์ค์ํ ์ญํ ์ด๋ฉฐ ํ๋ก๊ทธ๋จ์ด ์คํ๋๋ฉด event loop๋ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ๊ธฐ ์ ๊น์ง ๋๊ธฐ์ํ์ด๋ค.
์ด๋ฒคํธ๊ฐ ๋ฐ์ํ๋ฉด event loop๋ ํด๋น ์ด๋ฒคํธ๊ฐ ๋๊ธฐ์ธ์ง, ๋น๋๊ธฐ์ธ์ง ํ๋ณํ๋ค.
call stack์ผ๋ก ํด๋น ์ด๋ฒคํธ๊ฐ ์ด๋ํ๋ค. ๋ง์ฝ ์ด๋ฒคํธ๊ฐ callback ํจ์๋ฅผ ๊ฐ์ง๊ณ ์๋ค๋ฉด callback์ event queue๋ก ๋ณด๋ธ๋ค.
O/S kernel์๊ฒ ํด๋น ์์ ์ ์์ํ๋ค.
call stack์ event loop์์ ํ๋ณ๋ ๋๊ธฐ ์ด๋ฒคํธ ์์ ๋ง ์ํํ๋ค.
event loop์ ์ํด call stack์ผ๋ก ์ด๋๋ ์ด๋ฒคํธ๊ฐ ์์ ์ด ์ด๋ฃจ์ด์ง๋ ๋์ event loop๋ call stack์ด ์์ ์ ์๋ฃํ๋์ง, call stack์ด ๋น์์ก๋์ง ํ์ธํ๋ฉฐ blocked ๋๋ค.
event loop๋ ์ด๋ฒคํธ ์ค callbackํจ์๋ฅผ ๊ฐ์ง๊ณ ์๋ค๋ฉด ๊ทธ callbackํจ์๋ฅผ event queue๋ก ๋๊ฒจ์ค๋ค. ๊ทธ๋ฆฌ๊ณ ์ฒ์ ์ด๋ฒคํธ ์์ ์ด call stack์์ ์๋ฃ๋ ์ event loop๋ ์ ์ blocked ๋์๋ค๊ฐ event queue์ ์๋ callback์ call stack์ผ๋ก ๋ณด๋ด์ค๋ค.
์ด๋ ๊ฒ call stack์ผ๋ก ๋ณด๋ธ ํ ์๋๋๋ก ์์ ์ ์ํํ๋ค. ์ด๋ฌํ ๋ฐฉ์์ ํตํด event loop๋ ๋๊ธฐ ์์ ์ ์ํํ๋ค.
๋น๋๊ธฐ ์ด๋ฒคํธ๋ง ์ํํ๋ค.
O/S kernel์ Node.js์ ์ธ๋ถ ํ๊ฒฝ์ด๋ฏ๋ก event loop๋ ๊ณ์ํด์ ๋ค๋ฅธ ์ด๋ฒคํธ๋ฅผ ๋ง๋ ์ ์๋ค. ์ด๊ฒ์ด node.js๋ฅผ ํจ์จ์ ์ผ๋ก ๋ง๋ค์ด์ฃผ๋ ๋น๋๊ธฐ ๋ฐฉ์ ๊ณผ์ ์ด๋ค.
โจ => event loop๊ฐ ๋น๋๊ธฐ ์ด๋ฒคํธ๋ฅผ ๋ง๋ฌ์ ๋ O/S kernel์๊ฒ ํด๋น ์์ ์ ์์ํ๋ฏ๋ก event loop๋ non-blocked ์ํ๋ฅผ ์ ์งํ ์ ์๊ณ , ๋ค๋ฅธ ์ด๋ฒคํธ๋ฅผ ๊ณ์ํด์ ๋ง๋ ์ ์๋ค.
O/S kernel๋ก๋ถํฐ ๋น๋๊ธฐ ์์ ์ ๋ง์น ์ด๋ฒคํธ๊ฐ ๋ง์ฝ callback์ด ์๋ค๋ฉด O/S kernel์ ์ด๋ฅผ event loop์๊ฒ ์๋ฆฌ๋ฉฐ event loop๋ event queue๋ก ๋ณด๋ธ๋ค.
Node.js๋ ์ฑ๊ธ์ค๋ ๋, ๋ ผ ๋ธ๋กํน ๋ชจ๋ธ๋ก ์ฑ๊ธ์ค๋ ๋๊ฐ ํผ์์ ์ผ์ ์ฒ๋ฆฌํ์ง๋ง, ๋ ผ ๋ธ๋กํน ๋ฐฉ์์ผ๋ก ์ด์ ์์ ์ด ์๋ฃ๋ ๋๊น์ง ๋๊ธฐํ์ง ์๊ณ ๋ค์ ์์ ์ ์ํํ ์ ์๋ค!!
Node๋ ์ฑ๊ธ์ค๋ ๋๋ก, ๋ฉํฐ์ค๋ ๋์ ๋นํด ์ ์ ์ปดํจํฐ ์์์ ์ฌ์ฉํ๋ค.
I/0 ์์ฒญ์ด ๋ง์ด ๋ฐ์ํ๋ค๋ฉด Node๋ ์๋ฒ๋ก ์ฌ์ฉํ๋ ๊ฒ์ด ์ ํฉํ๋ค.
JS๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ JSON ํ์๊ณผ ์ฝ๊ฒ ํธํ๋๋ค.