๐ ๊ธฐ์กด Velog์์ ์ด์ ํ ๊ฒ์๋ฌผ์ ๋๋ค. JS Deep Dive์ ๋ํ ๋ ๋ง์ ๊ฒ์๊ธ์ด ์์ด์.
์ด๋ฒคํธ ๋ฃจํ๋ฅผ ์๊ธฐ ์ํด์๋ ๋จผ์ ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ๋ํด ์์์ผ ํ๋ค. ์์๋ณด์!๐
์๋ฐ์คํฌ๋ฆฝํธ ์์ง
- ์๋ฐ์คํฌ๋ฆฝํธ ์ธ์ด๋ ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ด๋ผ๋ ๋ ์์ ํตํด ์คํ๋๋ค!
- ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ๊ฐ๋จํ๊ฒ...
- V8, SpiderMonkey, Webkit...
- ์น ๋ธ๋ผ์ฐ์ ๋ด๋ถ ๋๋ Node.js ์์ ๊ตฌ์ฑ๋์ด ์๋ค.
- ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๋ฅผ ํด์ํ๊ณ ์คํํ๋ ์ธํฐํ๋ฆฌํฐ
- ํ(Memory Heap)๊ณผ ํธ์ถ ์คํ(Call Stack)์ผ๋ก ์ด๋ฃจ์ด์ ธ ์๋ค.
- ์ ํต์ ์ผ๋ก๋ ์ธํฐํ๋ฆฌํฐ ๋ฐฉ์์ผ๋ก ๊ตฌํ๋์ง๋ง, ํน์ ํ ๋ฐฉ์์ผ๋ก ๋ฐ์ดํธ์ฝ๋๋ก JIT๋ฅผ ์ ์ฅํด๋จ๋ค๊ฐ ์ปดํ์ผ ํ ์๋ ์๋ค.
๐ก ์ธํฐํ๋ฆฌํฐ vs ์ปดํ์ผ๋ฌ
์ธํฐํ๋ฆฌํฐ : ๋ฐ๋ก ํด์ํ๊ณ ์คํ
์ปดํ์ผ๋ฌ : ์ฌ๋์ด ์์ฑํ ์์ค์ฝ๋ → ๊ธฐ๊ณ์ด
์๋ฐ์คํฌ๋ฆฝํธ ์์ง & ์ธ๋ถ ๊ตฌ์กฐ
์์ง์ ํฌ๊ฒ Call Stack๊ณผ Heap์ผ๋ก ๋๋๊ณ ,
์์ง ์ธ๋ถ์ ๋ค๋ฅธ ์์๋ค๊ณผ ์ํธ์์ฉํ์ฌ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๋ฅผ ์คํ์ํจ๋ค.
์๋ฐ์คํฌ๋ฆฝํธ ์์ง ๊ตฌ์กฐ
Call Stack
- ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ๋จ ํ๋์ ํธ์ถ ์คํ์ ์ฌ์ฉํ๋ค.
- ํ ๋ฒ์ ํ๋์ ์์ ๋ง ์คํํ ์ ์๋ค.
- ๊ฐ Task๋ ์์ฐจ์ ์ผ๋ก ํธ์ถ ์คํ์ ๋ด์ ์ฒ๋ฆฌ๋๋ค.
Heap
- ๋์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ด๋ค.
- ๊ฐ๋น์ง ์ปฌ๋ ์ . ์๋์ผ๋ก ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํ๊ณ ์ ๊ฑฐํ๋ค.
์๋ฐ์คํฌ๋ฆฝํธ ์์ง ์ธ๋ถ์ ์์
Web APIs
- ์น ๋ธ๋ผ์ฐ์ ์์ ์ ๊ณตํ๋ ๋ฉ์๋๋ค (DOM, Ajax, Timeout...)
- CallStack์์ ์คํ๋ ๋น๋๊ธฐ ํจ์๋ Web API๋ฅผ ํธ์ถํ๊ณ , Web API๋ ์ฝ๋ฐฑํจ์๋ฅผ Task Queue์ ๋ฃ๋๋ค.
Callback Queue
- = Task Queue = Event Queue
- ๋น๋๊ธฐ ์ฝ๋ฐฑ ํจ์๋ค์ด ๋ด๊ธฐ๋ ํ ๋ฆฌ์คํธ (→ ์ฝ๋ฐฑ์ด ํ์ฒ๋ผ ์์)
- FIFO(First in First Out) ๋ฐฉ์
- ์ด๋ฒคํธ ๋ฃจํ๋ฅผ ํตํด ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ์ฝ ์คํ์ด ๋น์์ก๋์ง ์์๋ก ํ์ธํ๋ค๊ฐ, ๋น์์ง ์๊ฐ Task Queue์ ์๋ ํจ์๋ค์ Call Stack์ผ๋ก ํ๋์ฉ ๋๊ฒจ ์คํ์ํจ๋ค.
Event Loop
- ์น ๋ธ๋ผ์ฐ์ ์ Node.js์์ ์ฑ๊ธ ์ค๋ ๋(ํ ๋ฒ์ ํ ์์ ๋ง ์ฒ๋ฆฌ ๊ฐ๋ฅ)์ธ ์๋ฐ ์คํฌ๋ฆฝํธ๋ฅผ ๋น๋๊ธฐ ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํ๋๋ก ํ๋ ํต์ฌ ์์
- Call Stack๊ณผ Task Queue์ ์ํ๋ฅผ ๊ณ์ ์ฒดํฌํ๋ค.
- Call Stack์ด ๋น์ด์์ ๋, Task Queue์ ์ฒซ๋ฒ์งธ ์ฝ๋ฐฑ์ Call Stack์ผ๋ก ๋ฐ์ด๋ฃ๋๋ค.
Nexttick Queue
Microtask Queue
Animation Frames
- requestAnimationFrame API๊ฐ ์คํ๋๋ฉด ์ฝ๋ฐฑ์ด Animation Frames์ผ๋ก ๋ด๊ธด๋ค.
Event Queue
- Task Queue์ ๋์ผํ ์ญํ
Job Queue
- Microtask Queue์ ๋์ผํ ์ญํ
์ฐ์ ์์
- ํฌ๋กฌ ๊ธฐ์ค
- Nexttic Queue → Microtask Queue → Animation Frames → Task Queue