Node.js์ ๋์ ์๋ฆฌ: ์ฑ๊ธ ์ค๋ ๋ ๊ธฐ๋ฐ ์ด๋ฒคํธ ๋ฃจํ, ๋ ผ๋ธ๋กํน I/O
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 ์์ฒญ์ ์ฒ๋ฆฌํ๋ ๊ณณ์ ์ฑ๊ธ์ค๋ ๋๊ฐ ์๋๊ธฐ ๋๋ฌธ์ ๋ ผ๋ธ๋กํน์ด ๊ฐ๋ฅํ ๊ฒ์ด๋ค.