๐ปNode.js์ ๋ ผ ๋ธ๋กํน IO, ์ฑ๊ธ์ค๋ ๋, ์ด๋ฒคํธ ๋ฃจํ
Block IO vs Non-Block IO & Sync vs Async์ ๋ํ ์ค๋ช ์ ์ฌ๊ธฐ๋ฅผ ์ฐธ๊ณ ํด์ฃผ์ธ์.
Node.js์ ๋ชจ๋ I/O ๋ฉ์๋๋ ๋ ผ๋ธ๋กํน์ธ ๋น๋๊ธฐ ๋ฐฉ์์ ์ ๊ณตํ๊ณ ์ฝ๋ฐฑ ํจ์๋ฅผ ๋ฐ๋๋ค. ์ผ๋ถ ๋ฉ์๋๋ ๊ฐ์ ์์ ์ ํ๋ ๋ธ๋กํน ๋ฉ์๋๋ ๊ฐ์ง๋๋ฐ ์ด๋ฆ ๋ง์ง๋ง์ Sync๊ฐ ๋ถ๋๋ค.
Node.js์ non-blocking I/O
Node.js์์์ ๋ ผ๋ธ๋กํน I/O ๋ชจ๋ธ์ ๋ธ๋กํน ์์ (Input, Output๊ณผ ๊ด๋ จ๋ ์์ / http, Database CRUD, third party api, filesystem)๋ค์ ๋ฐฑ๊ทธ๋ผ์ด๋(libuv์ ์ค๋ ๋ ํ)์์ ์ํํ๊ณ , ์ด๋ฅผ ๋น๋๊ธฐ ์ฝ๋ฐฑํจ์๋ก ์ด๋ฒคํธ ๋ฃจํ์ ์ ๋ฌํ๋ ๊ฒ์ ๋งํ๋ค.
Node.js๋ ์ฑ๊ธ์ค๋ ๋์ธ๊ฐ์?
- ์ฑ๊ธ ์ค๋ ๋ : ํ๋ก์ธ์ค ๋ด์์ ํ๋์ ์ค๋ ๋๊ฐ ํ๋์ ์์ฒญ๋ง์ ์ํํ๋ค. ํด๋น ์์ฒญ์ด ์ํ๋ ๋ ๋ค๋ฅธ ์์ฒญ์ ํจ๊ป ์ํํ ์ ์๋ค.
- ๋ฉํฐ์ค๋ ๋ : ์ค๋ ๋ ํ์์ ์คํ์ ์์ฒญ๋งํผ ์ค๋ ๋๋ฅผ ๋งค์นญํ์ฌ ์์ ์ ์ํํ๋ค.
Node.js๋ ์ฑ๊ธ์ค๋ ๋ ๋ ผ๋ธ๋กํน ๋ชจ๋ธ๋ก ๊ตฌ์ฑ๋์ด ์๋ค. ํ๋์ ์ค๋ ๋๋ก ๋์ํ์ง๋ง, ๋น๋๊ธฐ I/O ์์ ์ ํตํด ์์ฒญ๋ค์ ์๋ก ๋ธ๋กํนํ์ง ์๋๋ค.
์ฆ, ๋์์ ๋ง์ ์์ฒญ๋ค์ ๋น๋๊ธฐ๋ก ์ํํจ์ผ๋ก์จ ์ฑ๊ธ์ค๋ ๋์ผ์ง๋ผ๋ ๋ ผ๋ธ๋กํน์ด ๊ฐ๋ฅํ๋ค.
Node.js๋ ์์ ํ ์ฑ๊ธ์ค๋ ๋์ธ๊ฐ์?
- Node.js๊ฐ ์์ ํ ์ฑ๊ธ์ค๋ ๋๊ฐ ์๋ ์ด์ ๋ ์ผ๋ถ Blocking ์์ ๋ค์ libuv์ ์ค๋ ๋ ํ(Thread pool)์์ ์ํ๋๋๋ฐ, ์ด ์ค๋ ๋ ํ์ด ๋ฉํฐ์ค๋ ๋์ด๊ธฐ ๋๋ฌธ์ด๋ค.
Node.js
ํํ Node.js๋ฅผ ์ฑ๊ธ ์ค๋ ๋ ๋ ผ ๋ธ๋กํน์ด๋ผ๊ณ ํ๋ค. Node.js๋ ํ๋์ ์ค๋ ๋๋ก ๋์ํ์ง๋ง I/O ์์ ์ด ๋ฐ์ํ ๊ฒฝ์ฐ ์ด๋ฅผ ๋น๋๊ธฐ์ ์ผ๋ก ์ฒ๋ฆฌํ ์ ์๋ค. ๋ถ๋ช ํ๋์ ์ค๋ ๋๋ ํ๋์ ์คํ ํ๋ฆ๋ง์ ๊ฐ์ง๊ณ ์๊ณ ํ์ผ ์ฝ๊ธฐ์ ๊ฐ์ด ๊ธฐ๋ค๋ ค์ผ ํ๋ ์์ ์ ์คํํ๋ฉด ๊ทธ ์์ ์ด ๋๋๊ธฐ ์ ์๋ ์๋ฌด๊ฒ๋ ํ ์ ์์ด์ผ๋ง ํ๋ค. ๊ทธ๋ฌ๋ Node.js๋ ํ๋์ ์ค๋ ๋๋ง์ผ๋ก ์ฌ๋ฌ ๋น๋๊ธฐ ์์ ๋ค์ ๋ธ๋กํน ์์ด ์ํํ ์ ์๊ณ ๊ทธ ๊ธฐ๋ฐ์๋ ์ด๋ฒคํธ ๋ฃจํ๊ฐ ์กด์ฌํ๋ค.
Node.js์ ๋ด๋ถ ๊ตฌ์กฐ
๋
ธ๋์ ๊ตฌ์กฐ๋
- libuv๋ C++๋ก ์์ฑ๋, Node.js๊ฐ ์ฌ์ฉํ๋ ๋น๋๊ธฐ I/O ๋ผ์ด๋ธ๋ฌ๋ฆฌ
- libuv์ ๋ค๋ฅธ ์ ์์ค ๊ธฐ๋ฅ๋ค์ ๋ฉํํ๊ณ ํ์ถ์ํค๊ธฐ ์ํ ๋ฐ์ธ๋ฉ ์ธํธ(socket, http, ...)
- V8, ํฌ๋กฌ ๋ธ๋ผ์ฐ์ ๋ฅผ ์ํ ๊ตฌ๊ธ์ด ๊ฐ๋ฐํ JavaScript ์์ง์ผ๋ก Node.js๊ฐ ๋งค์ฐ ๋น ๋ฅด๊ณ ํจ์จ์ ์ธ ์ด์ ์ค ํ๋์ด๊ธฐ๋ ํฉ๋๋ค. V8์ ํ์ ์ ์ธ ์ค๊ณ์ ์๋ ๊ทธ๋ฆฌ๊ณ ํจ์จ์ ์ธ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๋ก ๋์ ํ๊ฐ๋ฅผ ๋ฐ๊ณ ์์ต๋๋ค.
- ๊ณ ์์ค Node.js API๋ฅผ ๊ตฌํํ๊ณ ์๋ ์ฝ์ด JavaScript ๋ผ์ด๋ธ๋ฌ๋ฆฌ
์ 4๊ฐ์ง๋ก Node.js์ ํ๋ซํผ์ ๊ตฌ์ถํ๊ณ ์์ต๋๋ค.
Libuv ํ์, Node.js์ I/O ์์ง
๊ฐ ์ด์์ฒด์ ๋ API์ ๊ฐ์ ์ด๋ฒคํธ ๋๋ฉํฐํ๋ ์๋ฅผ ์ํ ์์ฒด ์ธํฐํ์ด์ค๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค. ๊ฒ๋ค๊ฐ I/O ์์ ์ ๋์ผํ OS ๋ด์์๋ ๋ฆฌ์์ค ์ ํ์ ๋ฐ๋ผ ๋งค์ฐ ๋ค๋ฅด๊ฒ ๋์ํ ์ ์์ต๋๋ค.
์๋ฅผ ๋ค์ด Unix์์ ์ผ๋ฐ ํ์ผ ์์คํ ์ ๋ ผ ๋ธ๋กํน ์์ ์ ์ง์ํ์ง ์๊ธฐ ๋๋ฌธ์ ๋ ผ ๋ธ๋กํน ๋์์ ์ํด์๋ ์ด๋ฒคํธ ๋ฃจํ ์ธ๋ถ์ ๋ณ๋์ ์ค๋ ๋๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
์๋ก ๋ค๋ฅธ ์ด์์ฒด์ ๊ฐ์ ๋ถ์ผ์น์ฑ์ ์ด๋ฒคํธ ๋๋ฉํฐํ๋ ์๋ฅผ ์ํ ๋ณด๋ค ๋์ ๋ ๋ฒจ์ ์ถ์ํ๋ฅผ ํ์๋ก ํ๊ฒ ๋์์ต๋๋ค. ์ด๋ฐํ ์ด์ ๋ก Node.js ์ฝ์ด ํ์ด Node.js๋ฅผ ์ฃผ์ ์ด์์ฒด์ ์์ ํธํ๋๊ฒ ํด์ฃผ๋ฉฐ ์๋ก ๋ค๋ฅธ ๋ฆฌ์์ค ์ ํ์ ๋ ผ ๋ธ๋กํน ๋์์ ํ์คํํ๊ธฐ ์ํด libuv๋ผ๊ณ ๋ถ๋ฆฌ๋ C๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ง๋ค์์ต๋๋ค. Node.js์ ๊ตฌ์ฑ์์ ์ค์์ ๊ฐ์ฅ ์ค์ํ๋ค๊ณ ๋งํ ์ ์์ต๋๋ค.
Libuv๋ ๊ธฐ๋ณธ ์์คํ ํธ์ถ์ ์ถ์ํํ๋ ๊ฒ ์ธ์๋ ์ด๋ฒคํธ ๋ฃจํ์ ์์ฑ, ์ด๋ฒคํธ ํ์ ๊ด๋ฆฌ, ๋น๋๊ธฐ I/O ์์ ์ ์คํ ๋ฐ ๋ค๋ฅธ ์ ํ์ ์์ ์ ํ์ ๋ด๊ธฐ ์ํ API๋ค์ ์ ๊ณตํฉ๋๋ค.
Libuv ๋์
libuv ์๊ฒ ํ์ผ ์ฝ๊ธฐ์ ๊ฐ์ ๋น๋๊ธฐ ์์ ์ ์์ฒญํ๋ฉด libuv๋ ์ด ์์ ์ ์ปค๋์ด ์ง์ํ๋์ง ํ์ธํ๋ค. ๋ง์ฝ ์ง์ํ๋ค๋ฉด libuv๊ฐ ๋์ ์ปค๋์๊ฒ ๋น๋๊ธฐ์ ์ผ๋ก ์์ฒญํ๋ค๊ฐ ์๋ต์ด ์ค๋ฉด ๊ทธ ์๋ต์ ์ฐ๋ฆฌ์๊ฒ ์ ๋ฌํด์ค๋ค.
๋ง์ฝ ์์ฒญํ ์์ ์ ์ปค๋์ด ์ง์ํ์ง ์๋๋ค๋ฉด ์ด๋ป๊ฒ ํ ๊น? ๋ฐ๋ก ์์ ๋ง์ ์์ปค ์ค๋ ๋๊ฐ ๋ด๊ธด ์ค๋ ๋ ํ์ ์ฌ์ฉํ๋ค.
libuv๋ ๊ธฐ๋ณธ์ ์ผ๋ก 4๊ฐ์ ์ค๋ ๋๋ฅผ ๊ฐ์ง๋ ์ค๋ ๋ ํ์ ์์ฑํ๋ค. ํ๊ฒฝ ๋ณ์ ์ค์ ์ผ๋ก ์ต๋ 128๊ฐ๊น์ง ์ค๋ ๋ ๊ฐ์๋ฅผ ๋๋ฆด ์ ์๋ค. ๊ทธ๋ฆฌ๊ณ ์ค๋ ๋ ํ์ ์๋ ์ค๋ ๋๊ฐ ์์ ์ ์๋ฃํ๋ฉด libuv๊ฐ ์ฐ๋ฆฌ์๊ฒ ์์ฒญํ ์์ ์ด ์๋ฃ๋์๋ค๊ณ ์น์ ํ๊ฒ ์๋ ค์ค๋ค.
์ฆ, ์ ๋ฆฌํ๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
- libuv๋ ์ด์์ฒด์ ์ ์ปค๋์ ์ถ์ํํด์ ๋น๋๊ธฐ API๋ฅผ ์ง์ํ๋ค.
- libuv๋ ์ปค๋์ด ์ด๋ค ๋น๋๊ธฐ API๋ฅผ ์ง์ํ๊ณ ์๋์ง ์๊ณ ์๋ค.
- ๋ง์ฝ ์ปค๋์ด ์ง์ํ๋ ๋น๋๊ธฐ ์์ ์ libuv์๊ฒ ์์ฒญํ๋ฉด libuv๋ ๋์ ์ปค๋์๊ฒ ์ด ์์ ์ ๋น๋๊ธฐ์ ์ผ๋ก ์์ฒญํด์ค๋ค.
- ๋ง์ฝ ์ปค๋์ด ์ง์ํ์ง ์๋ ๋น๋๊ธฐ ์์ ์ libuv์๊ฒ ์์ฒญํ๋ฉด livuv๋ ๋ด๋ถ์ ๊ฐ์ง๊ณ ์๋ ์ค๋ ๋ ํ์๊ฒ ์ด ์์ ์ ์์ฒญํด์ค๋ค.
Node.js๋ I/O ์์ ์ ์์ ์ ๋ฉ์ธ ์ค๋ ๋๊ฐ ์๋ ๋ค๋ฅธ ์ค๋ ๋์ ์์ํจ์ผ๋ก์จ ์ฑ๊ธ ์ค๋ ๋๋ก ๋ ผ ๋ธ๋กํน I/O๋ฅผ ์ง์ํ๋ค. ๋ค๋ฅด๊ฒ ๋งํ๋ฉด Node.js๋ I/O ์์ ์ libuv์๊ฒ ์์ํจ์ผ๋ก์จ ๋ ผ ๋ธ๋กํน I/O๋ฅผ ์ง์ํ๊ณ ๊ทธ ๊ธฐ๋ฐ์๋ ์ด๋ฒคํธ ๋ฃจํ๊ฐ ์๋ค.
Node.js์์์ ์ด๋ฒคํธ ๋ฃจํ
- ์ด๋ฒคํธ ๋ฃจํ๋ Node.js๊ฐ ์ฌ๋ฌ ๋น๋๊ธฐ ์์ ์ ๊ด๋ฆฌํ๊ธฐ ์ํ ๊ตฌํ์ฒด๋ค.
- ๋๊ธฐ ์์ ์ด ์๋๋ผ file.readFile('test.txt', callback)๊ณผ ๊ฐ์ ๋น๋๊ธฐ ์์ ๋ค์ ๋ชจ์์ ๊ด๋ฆฌํ๊ณ ์์๋๋ก ์คํํ ์ ์๊ฒ ํด์ฃผ๋ ๋๊ตฌ์ด๋ค.
์ด๋ฒคํธ ๋ฃจํ๋ 6๊ฐ์ ํ์ด์ฆ๋ฅผ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ, ํ์ด์ฆ๋ฅผ ๋ผ์ด๋ ๋ก๋น(RR) ๋ฐฉ์์ผ๋ก ์ํํ๋ค. ํ์ด์ฆ๋ ๊ฐ์๋ง๋ค ํ๋ฅผ ๊ฐ์ง๊ณ ์๊ณ , FIFO(First In First Out) ์์๋ก ์ฝ๋ฐฑ ํจ์๋ค์ ์ฒ๋ฆฌํ๋ค.
๋ผ์ด๋ ๋ก๋น ์ค์ผ์ค๋ง
- ์๋ถํ ์์คํ ์ ์ํด ์ค๊ณ๋ ์ ์ ํ ์ค์ผ์ค๋ง์ ํ๋๋ก์, ํ๋ก์ธ์ค๋ค ์ฌ์ด์ ์ฐ์ ์์๋ฅผ ๋์ง ์๊ณ , ์์๋๋ก ์๊ฐ๋จ์๋ก CPU๋ฅผ ํ ๋นํ๋ ๋ฐฉ์์ CPU ์ค์ผ์ค๋ง ์๊ณ ๋ฆฌ์ฆ์ ๋๋ค.
- ์ฆ, 6๊ฐ์ ํ์ด์ฆ์ ๋ชจ๋ ์ผ์ ํ ์๊ฐ์ ํ ๋นํ๊ณ ์ฐจ๋ก๋๋ก ์ํํ๋ ์ค์ผ์ค๋ง ๋ฐฉ์์ ๋๋ค.
์ด๋ฒคํธ ๋ฃจํ์ "๋จ๊ณ" ์ค๋ช
๊ฐ ๋จ๊ณ๋ ์คํํ ์ฝ๋ฐฑ์ FIFO ํ๋ฅผ ๊ฐ์ง๋๋ค. ์ด ํ์๋ ์ด๋ฒคํธ ๋ฃจํ๊ฐ ์คํํด์ผ ํ๋ ์์ ๋ค์ด ์์๋๋ก ๋ด๊ฒจ์๋ค. ๊ฐ ๋จ๊ณ๋ ์์ ๋ง์ ๋ฐฉ๋ฒ์ ์ ํ์ ์ด๋ฏ๋ก ๋ณดํต ์ด๋ฒคํธ ๋ฃจํ๊ฐ ํด๋น ๋จ๊ณ์ ์ง์ ํ๋ฉด ํด๋น ๋จ๊ณ์ ํ์ ๋ ์์ ์ ์ํํ๊ณ ํ๋ฅผ ๋ชจ๋ ์์งํ๊ฑฐ๋ ์ฝ๋ฐฑ์ ์ต๋ ๊ฐ์๋ฅผ ์คํํ ๋๊น์ง ํด๋น ๋จ๊ณ์ ํ์์ ์ฝ๋ฐฑ์ ์คํํฉ๋๋ค. ํ๋ฅผ ๋ชจ๋ ์์งํ๊ฑฐ๋ ์ฝ๋ฐฑ ์ ํ์ ์ด๋ฅด๋ฉด ์ด๋ฒคํธ ๋ฃจํ๋ ๋ค์ ๋จ๊ณ๋ก ์ด๋ํฉ๋๋ค.
1. timers Phase
- setTimeout()๊ณผ setInterval() ๊ฐ์ ํจ์๊ฐ ๋ง๋ค์ด ๋ด๋ ํ์ด๋จธ๋ค์ ๋ค๋ฃฌ๋ค.
- Timer Phase๋ min-heap์ ์ด์ฉํด์ ํ์ด๋จธ๋ฅผ ๊ด๋ฆฌํ๋ค. ์ด ๋๋ถ์ ์คํ ์๊ฐ์ด ๊ฐ์ฅ ์ด๋ฅธ ํ์ด๋จธ๋ฅผ ํจ์จ์ ์ผ๋ก ์ฐพ์ ์ ์๋ค.
2. pending callbacks Phase
- I/O ์์ ๋ธ๋ก ๋ด์ ์ฝ๋ฐฑํจ์๋ค์ poll๋จ๊ณ์ ํ๋ก ๋๊ฒจ์ค๋ค.
- ์ด ํ์ด์ฆ๋ pending_queue์ ๋ด๊ธฐ๋ ์ฝ๋ฐฑ๋ค์ ๊ด๋ฆฌํ๋ค. ์ด ํ์ ๋ด๊ธฐ๋ ์ฝ๋ฐฑ๋ค์ ์ด์ ์ด๋ฒคํธ ๋ฃจํ ๋ฐ๋ณต์์ ์ํ๋์ง ๋ชปํ๋ I/O ์ฝ๋ฐฑ๋ค์ด๋ค.
- ์์คํ ์ ์คํ ํ๋ ์ ํ์ ์ํด ํ์ ์์ธ ๋ชจ๋ ์์ ์ ์คํํ์ง ๋ชปํ๊ณ ๋ค์ ํ์ด์ฆ๋ก ๋์ด๊ฐ ์๋ ์๋ค. ์ด๋ ์ฒ๋ฆฌํ์ง ๋ชปํ๊ณ ๋์ด๊ฐ ์์ ๋ค์ ์์๋๊ณ ์คํํ๋ ํ์ด์ฆ๋ค.
3. Idle, Prepare Phase
- ์ด ํ์ด์ฆ๋ค์ Node.js์ ๋ด๋ถ์ ์ธ ๊ด๋ฆฌ๋ฅผ ์ํ ํ์ด์ฆ๋ก ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์คํํ์ง ์๋๋ค. ๊ณต์ ๋ฌธ์์์๋ ๋ณ๋ค๋ฅธ ์ค๋ช ์ด ์๊ณ ์ฝ๋์ ์ง์ ์ ์ธ ์คํ์ ์ํฅ์ ๋ฏธ์น์ง ์๋๋ค.
4. poll Phase
- ์ด ํ์ด์ฆ๋ ์๋ก์ด I/O ์ด๋ฒคํธ๋ฅผ ๋ค๋ฃจ๋ฉฐ watcher_queue์ ์ฝ๋ฐฑ๋ค์ ์คํํ๋ค. watcher_queue์๋ I/O์ ๋ํ ๊ฑฐ์ ๋ชจ๋ ์ฝ๋ฐฑ๋ค์ด ๋ด๊ธด๋ค. ์ฝ๊ฒ ๋งํ๋ฉด setTimeout, setImmediate, close ์ฝ๋ฐฑ ๋ฑ์ ์ ์ธํ ๋ชจ๋ ์ฝ๋ฐฑ์ด ์ฌ๊ธฐ์ ์คํ๋๋ค๊ณ ์๊ฐํ๋ฉด ๋๋ค. ์๋ฅผ ๋ค๋ฉด ์๋์ ๊ฐ์ ์ฝ๋ฐฑ๋ค์ด ์คํ๋๋ค.
- ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฟผ๋ฆฌ๋ฅผ ๋ณด๋ธ ํ ๊ฒฐ๊ณผ๊ฐ ์์ ๋ ์คํ๋๋ ์ฝ๋ฐฑ
- HTTP ์์ฒญ์ ๋ณด๋ธ ํ ์๋ต์ด ์์ ๋ ์คํ๋๋ ์ฝ๋ฐฑ
- ํ์ผ์ ๋น๋๊ธฐ๋ก ์ฝ๊ณ ๋ค ์ฝ์์ ๋ ์คํ๋๋ ์ฝ๋ฐฑ
- ์ด๋ฒคํธ ๋ฃจํ๊ฐ ์ข
๋ฃ๋์๋ค๋ฉด ๋ฐ๋ก ๋ค์ ํ์ด์ฆ๋ก ๋์ด๊ฐ๋ค.
- ๋ง์ฝ Close Callbacks Phase, Pending Callbacks Phase์์ ์คํํ ์์ ์ด ์๋ค๋ฉด ๋ฐ๋ก ๋ค์ ํ์ด์ฆ๋ก ๋์ด๊ฐ๋ค.
- ๋ง์ฝ Timer Phase์์ ์ฆ์ ์คํํ ์ ์๋ ํ์ด๋จธ๊ฐ ์๋ค๋ฉด ๋ฐ๋ก ๋ค์ ํ์ด์ฆ๋ก ๋์ด๊ฐ๋ค.
- ๋ง์ฝ Timer Phase์์ ์ฆ์ ์คํํ ์ ์๋ ํ์ด๋จธ๋ ์์ง๋ง n์ด ํ์ ์คํํ ์ ์๋ ํ์ด๋จธ๊ฐ ์๋ค๋ฉด n์ด ๊ธฐ๋ค๋ฆฐ ํ ๋ค์ ํ์ด์ฆ๋ก ๋์ด๊ฐ๋ค.
5. check Phase
- ์ด ํ์ด์ฆ๋ ์ค์ง setImmediate์ ์ฝ๋ฐฑ๋ง์ ์ํ ํ์ด์ฆ๋ค. setImmediate๊ฐ ํธ์ถ๋๋ฉด Check Phase์ ํ์ ๋ด๊ธฐ๊ณ Node.js๊ฐ Check Phase์ ์ง์ ํ๋ฉด ์ฐจ๋ก๋๋ก ์คํ๋๋ค.
- ๊ณต์ ๋ฌธ์์์ setImmediate์ process.nextTick์ ์ฐจ์ด์ ์ฃผ๋ชฉํ๊ณ ์๋ค. ์ ๋ฆฌํ๋ฉด ์๋์ ๊ฐ๋ค.
- process.nextTick์ ๊ฐ์ ํ์ด์ฆ์์ ํธ์ถํ ์ฆ์ ์คํ๋๋ค.
- setImmediate๋ ๋ค์ ํฑ์์ ์คํ๋๋ค. ์ ํํ๋ Node.js๊ฐ ํฑ์ ๊ฑฐ์ณ Check Phase์ ์ง์ ํ๋ฉด ์คํ๋๋ค.
- ๋ฐ๋ผ์ ๋์๋ง ๋ณด๋ฉด process.nextTick์ ์ฆ์ ์คํ๋๊ณ setImmediate๋ ๋ค์ ํฑ์ ์คํ๋๋ค.
6. close callbacks Phase
- socket.on('close', () => {});๊ณผ ๊ฐ์ close ์ด๋ฒคํธ ํ์ ์ ํธ๋ค๋ฌ๋ฅผ ์ฒ๋ฆฌํ๋ ํ์ด์ฆ๋ค. ์ ํํ๊ฒ๋ uv_close()๋ฅผ ๋ถ๋ฅด๋ฉด์ ์ข ๋ฃ๋ ํธ๋ค๋ฌ์ ์ฝ๋ฐฑ๋ค์ ์ฒ๋ฆฌํ๋ ํ์ด์ฆ๋ค.
'SERVER > Node.js' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Block IO vs Non-Block IO & Sync vs Async (0) | 2022.06.28 |
---|---|
๐ป webRTC Process (0) | 2022.06.22 |
๐๋์์ฑ๊ณผ ๋ณ๋ ฌ์ฑ (0) | 2022.06.11 |
๐Observer Pattern์ด๋? (0) | 2022.05.11 |
SOA, MSA ์ํคํ ์ฒ๋? (0) | 2022.05.10 |