Node.js์ ๋ฑ์ฅ
Node.js๋ ์๋ฐ์คํฌ๋ฆฝํธ ๋ฐํ์์ ๋๋ค. Node.js๊ฐ ๋ฑ์ฅํ๊ธฐ ์ ์๋ ์๋ฐ์คํฌ๋ฆฝํธ๋ ๋ธ๋ผ์ฐ์ ํ๊ฒฝ์์๋ง ๊ตฌ๋๋ ์ ์์์ง๋ง Node.js์ ๋ฑ์ฅ ์ดํ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์ปดํจํฐ์์ ์คํํ ์ ์๊ฒ ๋์์ต๋๋ค. 2008๋ ๊ตฌ๊ธ์ด V8์์ง์ ์ฌ์ฉํ์ฌ ํฌ๋กฌ์ ์ถ์ํ๊ณ , V8 ์์ง์ ํตํด ์๋ฐ์คํฌ๋ฆฝํธ์ ์๋ ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋์์ต๋๋ค. ๋ฐ๋ผ์ 2009๋ ์ ๋ผ์ด์ธ ๋ฌ์ด V8 ์์ง ๊ธฐ๋ฐ์ ๋ ธ๋ ํ๋ก์ ํธ๋ฅผ ์์ํ๋ฉฐ Node.js๊ฐ ๋ฑ์ฅํ์ต๋๋ค. Node.js๋ V8๊ณผ ๋๋ถ์ด libuv๋ผ๋ C์ C++๋ก ๊ตฌํ๋ I/O ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ๊ตฌ์ฑ๋์ด ์์ต๋๋ค. ๋๋ถ์ Node.js๋ ๋น๋๊ธฐ์ ์ด๋ฉฐ ๋น ๋ฅธ ์คํ ํ๊ฒฝ์ ์ ๊ณตํ ์ ์๊ฒ ๋์์ต๋๋ค.
Node.js์ ๋์ ์๋ฆฌ
1. ์ด๋ฒคํธ ๊ธฐ๋ฐ
์ด๋ฒคํธ ๊ธฐ๋ฐ ์์คํ ์์๋ ํน์ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ ๋ ์ด๋ค ๋์์ ๋ฐ์์ํฌ์ง ๋ฏธ๋ฆฌ ๋ฑ๋กํด๋์ด์ผํฉ๋๋ค. ์ด๊ฒ์ด ๋ฐ๋ก ์ด๋ฒคํธ ๋ฆฌ์ค๋์ ์ฝ๋ฐฑ ํจ์๋ฅผ ๋ฑ๋กํ๋ ๊ฒ์ ๋๋ค.
์ด๋ฒคํธ ๊ธฐ๋ฐ ์์คํ ์ ์ด๋ฒคํธ ๋ฃจํ, ์ฝ์คํ, ํ ์คํฌ ํ, ๋ฐฑ๊ทธ๋ผ์ด๋๋ฅผ ์กฐํฉํ์ฌ ๋์ํฉ๋๋ค. ๋จผ์ , ๊ฐ๊ฐ์ ๊ตฌ์ฑ์์๊ฐ ํ๋ ์ญํ ์ ๊ฐ๋จํ๊ฒ ์ง๊ณ ๋์ด๊ฐ๊ฒ ์ต๋๋ค.
- ์ด๋ฒคํธ ๋ฃจํ: ์ด๋ฒคํธ ๋ฐ์ ์ ์ฝ๋ฐฑ ํ์์ ์ด๋ค ์ฝ๋ฐฑ ํจ์๋ฅผ ํธ์ถํ ์ง ๊ด๋ฆฌํฉ๋๋ค. ํธ์ถ๋ ์ฝ๋ฐฑ ํจ์์ ์คํ ์์๋ฅผ ๊ฒฐ์ ํ๋ ์ญํ ์ ๋ด๋นํฉ๋๋ค. ํ๋ก๊ทธ๋จ ์ข ๋ฃ์๊น์ง ์ด๋ฒคํธ ์ฒ๋ฆฌ๋ฅผ ์ํด ๊ณ์ ๋ฐ๋ณตํ๊ธฐ ๋๋ฌธ์ ๋ฃจํ๋ผ๊ณ ๋ถ๋ฆ ๋๋ค.
- ๋ฐฑ๊ทธ๋ผ์ด๋: setTimeout๊ฐ์ ํ์ด๋จธ๋ ์ด๋ฒคํธ ๋ฆฌ์ค๋๋ค์ด ๋๊ธฐํ๋ ๊ณณ์ ๋๋ค. ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ๋ฉด ์ด๊ณณ์ ์๋ ํ์ด๋จธ๋ ์ฝ๋ฐฑ ํจ์๊ฐ ํ ์คํฌ ํ๋ก ๋ณด๋ด์ง๋๋ค.
- ํ ์คํฌ ํ: ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ๋ฉด ์ด๋ฒคํธ ๋ฃจํ๊ฐ ํ ์คํฌ ํ๋ก ์ด๋ฒคํธ๋ ํ์ด๋จธ์ ์ฝ๋ฐฑ ํจ์๋ฅผ ๋ณด๋ ๋๋ค. ์ ํด์ง ์์๋๋ก ์ฝ๋ฐฑ๋ค์ด ์ค์ ์์๊ณ , ํ ์๋ฃ๊ตฌ์กฐ์ฒ๋ผ ๋งจ ์์ ์๋ ์ฝ๋ฐฑ์ด ์ฝ์คํ์ผ๋ก ๋ณด๋ด์ง๊ธฐ ๋๋ฌธ์ ์ฝ๋ฐฑ ํ๋ผ๊ณ ๋ ๋ถ๋ฆฝ๋๋ค. ํ์ง๋ง ์ฝ๋ฐฑ๋ค์ ์์๊ฐ ๋ฐ๋๋ ๊ฒฝ์ฐ๋ ์์ต๋๋ค.
- ์ฝ์คํ: ํ์ฌ ์คํ ์ค์ธ ํจ์์ ํธ์ถ ์ ๋ณด๋ฅผ ์ ์ฅํ๋ ๊ณต๊ฐ์ ๋๋ค. Javascript ์์ง์ด ํจ์๋ฅผ ์คํํ๋ฉด ์ฝ์คํ์ ํจ์ ํธ์ถ ์ ๋ณด๊ฐ ์ถ๊ฐ๋๊ณ , ํจ์ ์คํ์ด ์๋ฃ๋๋ฉด ํด๋น ์ ๋ณด๊ฐ ์ ๊ฑฐ๋ฉ๋๋ค.
์์ ๊ตฌ์ฑ์์๋ค์ด ์ด๋ป๊ฒ ์ด๋ฒคํธ ๊ธฐ๋ฐ ์์คํ ์ ๋์ํ๊ฒ ํ๋์ง ์๋ ์์๋ฅผ ํตํด ์ด๋ฒคํธ ๋ฐฉ์์ด ์ด๋ป๊ฒ ๋์ ํ๋์ง ์ดํด๋ณด๊ฒ ์ต๋๋ค.
1-1. Node.js์ ์ด๋ฒคํธ ์์คํ ๋์ ๊ณผ์
function run() {
console.log("์ฌ์ค ์์ง ์๊ฐ์ง๋กฑ~");
}
console.log("์๋
");
setTimeout(run, 1000);
console.log("์๊ฐ");์ด ์ฝ๋๋ฅผ ์คํํ๋ฉด console.log๊ฐ ์ด๋ค ์์๋ก ์ถ๋ ฅ๋ ๊น์?
๋ก๊ทธ์ ๋ด์ฉ์ผ๋ก๋ ์ ์ถํ ์ ์๊ฒ ์ง๋ง โ์๋
โ โ โ์๊ฐโ โ โ์ฌ์ค ์์ง ์๊ฐ์ง๋กฑ~โ์์๋ก ์ถ๋ ฅ๋ฉ๋๋ค. ๋ด๋ถ์ ์ผ๋ก ์ด๋ค ๋์์ ํด์ ๋ค์๊ณผ ๊ฐ์ ๋ก๊ทธ๊ฐ ์ถ๋ ฅ๋๋์ง gif๋ฅผ ํตํด ์ดํด๋ณด๊ฒ ์ต๋๋ค.

- ๋จผ์ ์ ์ญ ์ปจํ
์คํธ์ธ
anonymous๊ฐ ํธ์ถ ์คํ์ ๋ค์ด๊ฐ๋๋ค. console.log(โ์๋ โ)์ด ํธ์ถ ์คํ์ ๋ค์ด๊ฐ๋๋ค.- ํธ์ถ ์คํ์ ๋งจ ์์ ์๋
console.log(โ์๋ โ)์ด ํธ์ถ๋๊ณ โ์๋ โ์ด๋ผ๋ ๋ก๊ทธ๊ฐ ์ฐํ๊ฒ ๋ฉ๋๋ค. setTimeout(run,1000)์ด ํธ์ถ ์คํ์ ๋ค์ด๊ฐ๋๋ค.setTimeout(run,1000)์ด ํธ์ถ๋๋ฉด ํ์ด๋จธ์ ํจ๊ปrun์ฝ๋ฐฑ์ ๋ฐฑ๊ทธ๋ผ์ด๋๋ก ๋ณด๋ ๋๋ค.- ๋ฐฑ๊ทธ๋ผ์ด๋ ์์ญ์์ 1์ด๋ฅผ ์ธ๋ ๋์
console.log(โ์๊ฐโ)๊ฐ ํธ์ถ ์คํ์ ๋ค์ด๊ฐ๋ค๊ฐ pop๋๋ฉด์ ์คํ๋๊ณ , โ์๊ฐโ๋ผ๋ ๋ก๊ทธ๊ฐ ์ฐํ๊ฒ ๋ฉ๋๋ค. - ๋ฐฑ๊ทธ๋ผ์ด๋์์ 1์ด๋ฅผ ์ผ ํ
runํจ์๋ฅผ ํ์คํฌ ํ๋ก ๋ณด๋ ๋๋ค. - ์ด๋ฒคํธ ๋ฃจํ๋ ํธ์ถ ์คํ์ด ๋น์ด์์ผ๋ฉด ํ์คํธ ํ์ ์๋
runํจ์๋ฅผ ๊บผ๋ด ํธ์ถ ์คํ์ ์ฌ๋ฆฝ๋๋ค. runํจ์๊ฐ ํธ์ถ๋๋ฉฐ ์คํ์์ ๊บผ๋ด์ง๊ณ โ์ฌ์ค ์์ง ์๊ฐ์ง๋กฑ~โ์ด๋ผ๋ ๋ก๊ทธ๊ฐ ์ถ๋ ฅ๋ฉ๋๋ค.
1-2. Javascript ๋ธ๋ผ์ฐ์ ํ๊ฒฝ์์ ์ด๋ฒคํธ ๋ฐฉ์์ ๋์ ๊ณผ์
Node.js ํ๊ฒฝ๊ณผ ๋ค๋ฅด๊ฒ ๋ธ๋ผ์ฐ์ ํ๊ฒฝ์์๋ ์ด๋ฒคํธ ๋ฐฉ์์ด ์ด๋ป๊ฒ ๋์ํ๋์ง ๋ค์ ์์๋ฅผ ํตํด ์ดํด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
$.on("button", "click",
function () {
console.log("hello");
}
)์์ ์ฝ๋๊ฐ ์คํ๋๋ฉด ํด๋ฆญ ์ด๋ฒคํธ ๋ฆฌ์ค๋์ console.log("hello")๋ฅผ ์ถ๋ ฅํ๋ ์ฝ๋ฐฑ ํจ์๊ฐ ๋ฑ๋ก๋ฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ธ๋ผ์ฐ์ ํด๋ฆญ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ๋ฉด Call Stack, Web Apis, Callback
Queue์ ๋ค์๊ณผ ๊ฐ์ ์ผ์ด ์ผ์ด๋ฉ๋๋ค.
๐ ๋งจ ์ผ์ชฝ ์๋ถํฐ ํ์ดํ ๋ฐฉํฅ๋๋ก ์งํ๋ฉ๋๋ค.

- ํ๋ก๊ทธ๋จ์ ์คํํ๋ฉด ์ ์ฒด ์ฝ๋๊ฐ ์ฝ์คํ์ ๋ฑ๋ก๋ฉ๋๋ค.
- ์ฝ์คํ์ ์ฝ๋๋ฅผ ํด์ํด์ ํด๋ฆญ ์ด๋ฒคํธ ๋ฆฌ์ค๋์ ์ฝ๋ฐฑํจ์๋ฅผ ๋ฑ๋กํฉ๋๋ค.
- ๋ฒํผ์ด ํด๋ฆญ๋๋ ์๊ฐ callback queue์
anoymous๊ฐ ๋ฑ๋ก๋ฉ๋๋ค.anoymous๋ ์ฒ์ ์คํ ์์ ์ ์ญ ์ปจํ ์คํธ๋ฅผ ์๋ฏธํฉ๋๋ค. ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๋ ์คํ๋๋ ์๊ฐ ์ ์ญ ์ปจํ ์คํธ ์์์ ๋์ํ๋ค๊ณ ์๊ฐํด์ฃผ์ธ์. - ์ด๋ฒคํธ ๋ฃจํ์ ์ํด callback queue์ ์๋ ์ ์ญ ์ปจํ
์คํธ๊ฐ ์ฝ์คํ์ผ๋ก ์ฎ๊ฒจ์ง๊ณ , ํด๋ฆญ ์ด๋ฒคํธ ๋ฆฌ์ค๋์ ์ฝ๋ฐฑํจ์ ์์ ์๋
console.log๋ ์ฝ์คํ ์์ญ์ผ๋ก push๋ฉ๋๋ค. - ์ฝ์คํ ๋งจ ์์ ์๋ ๋์๋ถํฐ pop๋๋ฉด์ ์ฝ๋๊ฐ ์คํ๋ฉ๋๋ค.
2. ๋ ผ ๋ธ๋กํน I/O
- ๋ ผ ๋ธ๋กํน์ด๋ ์ด์ ์์ ์ด ์๋ฃ๋๋ ๊ฒ์ ๊ธฐ๋ค๋ฆฌ์ง ์๊ณ ๋ค์ ์์ ์ ์ํํ๊ฑฐ๋, ์ฌ๋ฌ ์์ ์ ๋์์ ์ฒ๋ฆฌํ๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค.
- ๋ธ๋กํน์ ์ด์ ์์ ์ด ๋๋์ผ๋ง ๋ค์ ์์ ์ ์ํํ๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค.
- I/O๋ ์ ๋ ฅ/์ถ๋ ฅ ์ ์๋ฏธํฉ๋๋ค. Javascript์ I/O์๋ ํ์ผ ์์คํ ์ ๊ทผ, ๋คํธ์ํฌ ์์ฒญ ๋ฑ์ด ์์ต๋๋ค.
Node.js์์๋ I/O ์์ ์ ๋ฐฑ๊ทธ๋ผ์ด๋๋ก ๋๊ฒจ์ ๋์์ ์ฒ๋ฆฌํฉ๋๋ค. ๋ฐ๋ผ์ ๋์์ ์ฒ๋ฆฌ๋ ์ ์๋ ์์ ์ ์ต๋ํ ๋ฌถ์ด์ ๋ฐฑ๊ทธ๋ผ์ด๋๋ก ๋๊ฒจ์ผ ์๊ฐ์ ์ ์ฝํ ์ ์์ต๋๋ค.
โ์ด์ฏค๋๋ฉด ์๊ธฐ๋ ๊ถ๊ธ์ฆ!!
Javascript๋ ์ฑ๊ธ ์ค๋ ๋ ์ธ์ด์ธ๋ฐ ๋ฐฑ๊ทธ๋ผ์ด๋์ I/O ์์ ์ ์ด๋ป๊ฒ ๋์์ ์คํ๋ ๊น์? ๋ง์ฝ ๋ฐฑ๊ทธ๋ผ์ด๋์ ์์ ์ด ๋์์ ์คํ๋๋ค๋ฉด, setTimeout๋ฑ์ ํตํด ์ฐ๋ฆฌ๊ฐ ์์ฑํ ํจ์๋ฅผ ์ฝ๋ฐฑ์ผ๋ก ๋๊ธฐ๋ฉด ๋์์ ์คํ๋ ๊น์?
์ฐ๋ฆฌ๊ฐ ์์ฑํ ํจ์๋ ์ ๋๋ก ๋์์ ์คํ๋ ์ ์์ต๋๋ค. ์๋ํ๋ฉด Javascript๋ ์ฑ๊ธ ์ค๋ ๋ ์ธ์ด์ด๊ธฐ ๋๋ฌธ์ ๋๋ค. ๊ทธ๋ผ ์ฌ๊ธฐ์ ๋ ์๋ฌธ์ ์ด ์๊น๋๋ค. ๋ฐฑ๊ทธ๋ผ์ด๋ ์์ญ์ ํ์ด๋จธ๊ฐ ์ฌ๋ฌ๊ฐ์ด๊ฑฐ๋, ๋คํธ์ํฌ ์์ฒญ์ด ์ฌ๋ฌ๊ฐ์ธ ๊ฒฝ์ฐ ๋ชจ๋ ๋์์ ์คํ๋๊ธฐ ๋๋ฌธ์ ๋๋ค. ์ด๋ป๊ฒ ์ด๊ฒ์ด ๊ฐ๋ฅํ ๊น์?
๋ฐ๋ก libuv๋ผ๋ Nodejs์ ์ฝ์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋๋ถ์ ๋๋ค. libuv์์ ํ์ด๋จธ, ํ์ผ I/O, ๋คํธ์ํฌ ์์ฒญ ๋ฑ์ ๋น๋๊ธฐ์ ์ผ๋ก ์ฒ๋ฆฌํฉ๋๋ค. ์ด ์์ ๋ค์ ๋ฐฑ๊ทธ๋ผ์ด๋์์ ๋ณ๋ ฌ๋ก ์ฒ๋ฆฌ๋๊ณ , ์์ ์ด ์๋ฃ๋๋ฉด ํด๋น ์์ ์ ์ฝ๋ฐฑ ํจ์๊ฐ ์คํ๋ฉ๋๋ค.
๊ทธ๋ ๋ค๋ฉด ์ฐ๋ฆฌ๋ ์ setImmediate๊ฐ์ ๊ฒ์ ์ฌ์ฉํด์ ์ฝ๋ฐฑ ํจ์๋ฅผ ๋ฑ๋กํ๋ ๊ฑธ๊น์? ์ด์ฐจํผ ๋์์ ์คํ๋ ์๋ ์๋๋ฐโฆ ๊ทธ๊ฒ์ ๋ฐ๋ก ์์ ์ ์์๋ฅผ ๋ณ๊ฒฝํด์ฃผ๊ธฐ ์ํด์ ์ ๋๋ค. ์์ ์ ์์๋ฅผ ์์๋ฅผ ๋ณ๊ฒฝํจ์ผ๋ก์จ ์์ฒญ๋๊ฒ ์ค๋๊ฑธ๋ฆฌ๋ ์์ ๋๋ฌธ์ ๊ฐ๋จํ ์์ ๋ค์ด ๋๊ธฐํ๋ ์ํฉ์ ๋ง์ ์ ์์ต๋๋ค.
3. ์ฑ๊ธ ์ค๋ ๋
Node.js๋ ์ฑ๊ธ ์ค๋ ๋, ๋ ผ ๋ธ๋กํน ๋ฐฉ์์ผ๋ก ๋์ํฉ๋๋ค. ์ฑ๊ธ ์ค๋ ๋๋ฅผ ์ดํดํ๊ธฐ ์ํด์ ํ๋ก์ธ์ค์ ์ค๋ ๋๊ฐ ๋ฌด์์ธ์ง์ ๋ํด ์ดํด๋ณด๊ฒ ์ต๋๋ค.
ํ๋ก์ธ์ค
ํ๋ก์ธ์ค๋ ์ด์์ฒด์ ์ ์ํด ์คํ๋๋ ๋ ๋ฆฝ์ ์ธ ์์ ๋จ์์ ๋๋ค. (๋น๊ณต์์ ์ผ๋ก๋ ํ๋ก์ธ์ค๋ ์คํ์ค์ธ ํ๋ก๊ทธ๋จ์ ๋๋ค) ํ๋ก์ธ์ค์ ๋ฉ๋ชจ๋ฆฌ ๋ฐฐ์น๋ ์ผ๋ฐ์ ์ผ๋ก ์คํ, ํ, ๋ฐ์ดํฐ, ํ ์คํธ ์์ญ์ผ๋ก ๊ตฌ๋ถ๋์ด์์ต๋๋ค. ๊ฐ ํ๋ก์ธ์ค๋ ๋ ๋ฆฝ๋ ์ฃผ์ ๊ณต๊ฐ์ ํ ๋น๋ฐ์์ ์์ ๋ง์ ์์์ ์ฌ์ฉํฉ๋๋ค. ๋๋ฌธ์ ํ ํ๋ก์ธ์ค์ ๋ฌธ์ ๊ฐ ์๊ฒจ๋ ๋ค๋ฅธ ํ๋ก์ธ์ค์ ์ํฅ์ ๋ฏธ์น์ง ์์ต๋๋ค. ์ด๋ฌํ ํ๋ก์ธ์ค์ ํน์ฑ์ผ๋ก ์์ ์ฑ๊ณผ ๊ฒฉ๋ฆฌ์ฑ์ด ๋์ง๋ง ํ๋ก์ธ์ค ๊ฐ์ ์ ํ ๋ฐ ์์ ๊ณต์ ์๋ ์ค๋ฒํค๋๊ฐ ๋ฐ์ํฉ๋๋ค.
์ค๋ ๋
์ค๋ ๋๋ ํ๋ก์ธ์ค ๋ด์์ ์คํ๋๋ ์์ ์์ ์ ๋จ์์ ๋๋ค. ํ๋์ ํ๋ก์ธ์ค ์์ ์ฌ๋ฌ๊ฐ์ ์ค๋ ๋๋ฅผ ๊ฐ์ง ์ ์์ต๋๋ค. ์ค๋ ๋๋ ๊ฐ์ ํ๋ก์ธ์ค์ ์ํ ๋ค๋ฅธ ์ค๋ ๋์ ์ฝ๋, ๋ฐ์ดํฐ ์น์ , ์ด๋ฆฐ ํ์ผ์ด๋ ์ ํธ์ ๊ฐ์ ์ด์์ฒด์ ์์๋ค์ ๊ณต์ ํฉ๋๋ค.
๋ ธ๋ ํ๋ก์ธ์ค์๋ ์ค๋ ๋๊ฐ ํ๋๋ฟ์ผ๊น?
Node.js๋ฅผ ์คํํ๋ฉด ํ๋ก์ธ์ค๊ฐ ํ๋ ์์ฑ๋ฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ทธ ํ๋ก์ธ์ค์์ ์ค๋ ๋๋ค์ ์์ฑํ๋๋ฐ ํ๋๊ฐ ์๋ ์ฌ๋ฌ ๊ฐ์ ์ค๋ ๋๋ฅผ ์์ฑํฉ๋๋ค. ํ์ง๋ง ๊ทธ ์ค์์ ์ฐ๋ฆฌ๊ฐ ์ง์ ์ ์ดํ ์ ์๋ ์ค๋ ๋๋ ํ๋๋ฟ์ ๋๋ค. ์ด๊ฒ์ดNode.js๋ฅผ ์ฑ๊ธ ์ค๋ ๋๋ผ๊ณ ๋ถ๋ฅด๋ ์ด์ ์ ๋๋ค.
์ฑ๊ธ ์ค๋ ๋, ๋ ผ ๋ธ๋กํน
Node.js๋ ์ฑ๊ธ ์ค๋ ๋ ๋ฐฉ์์ ๋๋ค. ๋ฐ๋ผ์ Node.js๋ ๋์์ ํ๋์ ์์ ๋ง ์ฒ๋ฆฌํ ์ ์์ต๋๋ค. ํ์ง๋ง ์์์ ์ค๋ช ํ ๋ ผ ๋ธ๋กํน ๋ฐฉ์์ผ๋ก ์ธํด ๋น๋๊ธฐ ํ๋ก๊ทธ๋๋ฐ์ ๊ฐ๋ฅํ๊ฒ ํ๊ณ , ๋์์ฑ์ ๊ตฌํํ ์ ์์ต๋๋ค.
์ฐธ๊ณ ๋ฌธ์
- https://nodejs.org/ko/docs/guides/event-loop-timers-and-nexttick
- https://nodejs.org/ko/docs/guides/blocking-vs-non-blocking
- http://docs.libuv.org/en/v1.x/design.html
- http://latentflip.com/loupe/
- https://codingjuny.tistory.com/58
- ์กฐํ์, ใNode.js ๊ต๊ณผ์ใ, ๊ธธ๋ฒ, p29-42
- Abraham Silberschatz,Peter Baer Galvin,Greg Gagne, ใ์ด์์ฒด์ ใ, p118-119, p176-177