๐ ์๋ฐ์คํฌ๋ฆฝํธ ๋์์๋ฆฌ
์๋ฐ ์คํฌ๋ฆฝํธ ๋์๊ตฌ์กฐ
- js๋ฅผ ์คํํ๊ธฐ ์ํด์๋ js ์์ง์ด ํ์ํจ
- V8, Rhino, SpiderMonkey ๋ฑ ๋ค์ํ ์์ง์ด ์กด์ฌํจ
- ๊ฐ์ฅ ๋ํ์ ์ธ๊ฑด, google์์ ๋ง๋ V8(๊ตฌ๊ธ ์ฌ๋ํด์)
js ์์ง์ 2๊ฐ์ง ๊ตฌ์ฑ์์๋ก ๊ตฌ์ฑ๋จ
- ๋ฉ๋ชจ๋ฆฌ ํ(Memory Heap) -> ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ด ๋ฐ์
- Call Stack(ํธ์ถ ์คํ) -> ์ฝ๋ ์คํ์ ๋ฐ๋ผ ์คํ์ด ํ๋์ฉ ์์ด๋ ๊ณณ
ํ์ง๋ง ์ด์ธ์๋ ์๋ง์ API๋ค์ ์ฌ์ฉํ๋๋ฐ,
3. Web API๋ผ๊ณ ํด์ ์น ๋ธ๋ผ์ฐ์ ํน์ node.js ๊ฐ์ ์๋ฐ์คํฌ๋ฆฝํธ ๋ฐํ์์์ ์ง์ํด์ฃผ๋ API ๊ทธ๋ฌ๋๊น ๋ธ๋ผ์ฐ์ ์ ๋ฐ๋ผ ์ง์ํด์ค ์ ๋ ์๊ณ ์ํด์ค ์ ๋ ์์
์๋ฐ์คํฌ๋ฆฝํธ ์์ฒด์๋ ๋น๋๊ธฐ ์ฝ๋๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํ ๊ฐ๋
์ ๊ฐ์ง๊ณ ์์ง ์์
๊ทธ๋ฌ๋ฉด ์ด๋ป๊ฒ ๋น๋๊ธฐ ์ฒ๋ฆฌ ํจ? -> ์ด๋ฒคํธ๋ฃจํ์ ์ฝ๋ฐฑ ํ์ ํ์ฅ์ ์ฝ๋ผ๋ณด๋ก ๊ฐ๋ฅํจ
์ด๊ฒ ๋ญ๋ฐ?
์ฌ์ค ๋น๋ฐ์ด์ง๋ง ๋ธ๋ผ์ฐ์ ๋ ๋ฐํ์์์๋ Web API๋ฅผ ํฌํจํด์ Event Loop์ Callback Queue๋ผ๋๊ฒ๋ ์ง์ํด์ค
๋ฐํ์์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๊ฐ ๊ตฌ๋๋๋ ํ๊ฒฝ์ ๋งํ๋๊ฑฐ์ (๋ค๋ค ์๊ฒ ์ง๋ง)
์ํผ ์ ๋ฆฌํ๋ ๋ด์ฉ์ด๋๊นโฆ
์ Call Back Queue๊ฐ ๋น์์ ธ ์์ด์ผ ํ๋ ๊ฑธ๊น?
V8 ์์ง ๊ฐ๋ฐ์๋ถ์ด ๋ง์ํ์๊ธธโฆ.
- ์๋ฅผ ๋ค์ด Call Stack์ ์ ์์ ์ผ๋ก ์ฒ๋ฆฌ๋๊ณ ์๋ ํจ์๋ค์ด ์๋ค๊ณ ๊ฐ์ ์ ํด๋ด
- ๊ทธ๋ฐ๋ฐ ์ด๋ค ํจ์๋ฅผ ์ ์ฒ๋ฆฌํ๊ณ ์๋ ์์ค์ ๊ฐ์๊ธฐ Event Loop์์ Callback Queue์ ๋ด์ฉ์ Call Stack์ผ๋ก Push ํด์ ์ฒ๋ฆฌํด์ผ ํ๋ค๊ณ ํจ
- ๊ทธ๋์ ์ด์ฉ ์ ์์ด ์ ์ฒ๋ฆฌํ๊ณ ์๋ ํจ์๋ฅผ ์ค๋จํ๊ณ Event Loop๊ฐ ๋ณด๋ธ ํจ์๋ฅผ ์ฒ๋ฆฌํ์
- ๊ทธ๋ฐ๋ฐ ๋ ๊ฐ์๊ธฐ Event Loop์์ Callback Queue์ ๋ด์ฉ์ Call Stack์ผ๋ก Push ํด์ ์ฒ๋ฆฌํด์ผ ํ๋ค๊ณ ํจ
- ๊ณผ์ฐ ์ด ๊ฒฝ์ฐ ์คํ์ ๊ฒฐ๊ด๊ฐ์ ์ด๋ป๊ฒ ๋ ๊น?
- ๊ณผ์ฐ ๋ด๊ฐ ์ฒ๋ฆฌํ๋ ค๊ณ ํ๋ ํจ์๋ ๋ด๊ฐ ์์ํ๋ ์๊ฐ์ ๋๋๊ณ ๊ฐ์ ์ ๋๋ก ๋์ถํ ์ ์์๊น?
๊ฐ๋จํ ๋งํ์๋ฉด ์ด๋ฒคํธ ๋ฃจํ๊ฐ ๋ฐ๋์ Call Stack์ด ๋น์ด์ ธ์๋ ์ํ์์๋ง Call Stack์ผ๋ก Push ํ๋ ์ด์ ๋ ์๋ฐ์คํฌ๋ฆฝํธ๋ผ๋ ์ธ์ด๊ฐ ๋๊ธฐํ ๋ฌธ์ ๋ฅผ ์๋ ๊ฒ์ ํผํ๊ณ ๋จ์ผ ์ค๋ ๋ ์ธ์ด๋ผ๋ ๊ฒ์ ๋ณด์ฅํด์ฃผ๊ธฐ ์ํจ
๋ง์ฝ ๋จ์ผ ์ค๋ ๋ ํ๊ฒฝ์์ ์์์ ์๋ฅผ ๋ค์๋ ๊ฒ ๊ฐ์ ์ํฉ์ด ๋ฐ์ํ๋ค๋ฉด, ๊ทธ๊ฒ์ ๋ฉํฐ ์ค๋ ๋์์ ๋ฐ์ํ๋ ๋ฌธ์ ์ํฉ์ ๊ทธ๋๋ก ๋จ์ผ ์ค๋ ๋ ์ธ์ด๊ฐ ์๊ฒ ๋์ด๋ฆผ
๋ฐ๋ผ์ ๋จ์ผ ์ค๋ ๋ ์ธ์ด์์ โํด๋น ํจ์๋ฅผ ์ค๋จํ์ง ๋ง๊ณ ์คํ์ด ๋๋ ๋ค์ Event Loop๊ฐ ๋ณด๋ด์ค ํจ์๋ฅผ ์ฒ๋ฆฌํด์ผ ํด!โ๊ฐ์ ๋๊ธฐํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๋ ์์๊ฐ ์ถ๊ฐ๋ก ํ์ํด์ง
๊ฒฐ๊ตญ์๋ Event Loop๊ฐ Call Stack์ด ๋น์ด์๋์ง๋ฅผ ํ์ธํ๊ฒ ํจ์ผ๋ก์จ ํ๋ก๊ทธ๋๋จธ๋ ๋๊ธฐํ ๋ฌธ์ ์ ๋ํด ๊ณจ๋จธ๋ฆฌ๋ฅผ ์์ ํ์๊ฐ ์์ด์ง๋ ๊ฒ์
์ ๋ฆฌ(์ต์ข ๋ณธ?)
JS๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ฑ๊ธ ์ฐ๋ ๋์ ๋๊ธฐ ์ธ์ด์ง๋ง(๋๊ธฐ์ฌ๋..ใ
, ๋
ผ-๋ธ๋กํน์ด๋ผ๊ณ ๋ ๋ถ๋ฆฌ์), ์น ๋ธ๋ผ์ฐ์ ธ or ๋ฐํ์์ ๋์์ ๋ฐ์์ ๋น๋๊ธฐ ์์
์ ์ฒ๋ฆฌ ํ ์ ์๊ณ
๋ง์น ์ ์ฌ ๋ฉํฐ ์ฐ๋ ๋์ธ๊ฒ ๋ง๋ฅ ๋์ํ๋ ์ด์ํ ์น๊ตฌ
๊น๋ฐํ๋๋ฐ ์ฌ์ค
Render Queue๋ผ๋๊ฒ๋ ์กด์ฌํจ
์ด๋ฒคํธ ํ๋ ๋น์ทํ๋ฐโฆ ๋ ๋ํ๊ฐ ๋ ๋์ ์ฐ์ ์์๋ฅผ ์ฐจ์งํจ(์ด ์ฝ๋ฐฑ์ด ๋จผ์ ์ฝ์คํ์ ์ฌ๋ผ๊ฐ)
์์์?
- ๋ธ๋ผ์ฐ์ ๋ 1์ด์ 60ํ๋ ์ ์๋๋ก ํ๋ฉด์ ๋ค์ ๊ทธ๋ฆผ(repaint)
- ํ์ง๋ง js๊ฐ ํ๋ ์ผ๋ค๋ก ์ธํด ๋ค์ ๊ทธ๋ฆฌ๋ ์์ ์ ์ํฅ์ ๋ฐ์
- ๋ ๋๋ ํ์ ์์ฌ์๋ ํ๋์ ์ฝ๋ฐฑ์ฒ๋ผ ๋์, ๋ฐ๋ผ์ ์ฝ์คํ์ ์ฝ๋๊ฐ ์์? ๋์ ๋ชปํ์
- ๊ทธ๋์ ๋๋ฆฐ ๋๊ธฐ์ ๋ฃจํ๋ฅผ ์คํํ๋ฉด, ์ฝ ์คํ์ ์ฝ๋๊ฐ ์์ฌ ์์ด์ ๋ ๋๊ฐ ๋์ํ์ง ์์
- ์ด๋ฒคํธ ๋ฃจํ๋ฅผ ๋ง์ง ๋ง๋ผ๊ณ ํ๋๊ฒ์ด ์ด๋ฐ ํ์์ ๋ปํจ
- ๋ฐ๋ผ์ ์ธ๋ฐ์๋ ๋๋ฆฐ์ฝ๋ ๊ทธ๋ง ์๊ณ ์ ๋นํ ํ์ฅ ^^
๋๊ธ๋จ๊ธฐ๊ธฐ