๋ธ๋ผ์ฐ์ ์ด๋ฒคํธ ๋ฃจํ(Event Loop) ์ ๋ฆฌ
๋ชฉ์ฐจ
1. ์ด๋ฒคํธ ๋ฃจํ๋?
์๋ฐ์คํฌ๋ฆฝํธ๋ ์ฑ๊ธ ์ค๋ ๋(Single Thread) ์ธ์ด์ ๋๋ค. ํ ๋ฒ์ ํ๋์ ์์ ๋ง ์ฒ๋ฆฌํ ์ ์์์๋ ๋ถ๊ตฌํ๊ณ , ๋ธ๋ผ์ฐ์ ์์ ์ฌ๋ฌ ์์ ์ ๋์์ ์ฒ๋ฆฌํ๋ ๊ฒ์ฒ๋ผ ๋๊ปด์ง๋ ์ด์ ๋ ๋ฐ๋ก ์ด๋ฒคํธ ๋ฃจํ ๋๋ถ์ ๋๋ค. ์ด๋ฒคํธ ๋ฃจํ๋ ํธ์ถ ์คํ์ด ๋น์ด์๋์ง ํ์ธํ๊ณ , ๊ธฐ๋ค๋ฆฌ๊ณ ์๋ ๋น๋๊ธฐ ์์ ๋ค์ ์ ์ ํ ์์ ์ ์คํํด์ฃผ๋ ์ญํ ์ ํฉ๋๋ค.
2. ๋ธ๋ผ์ฐ์ ํ๊ฒฝ์ ๊ตฌ์กฐ
- Call Stack: ํ์ฌ ์คํ ์ค์ธ ํจ์๋ค์ด ์์ด๋ ๊ณต๊ฐ (LIFO ๊ตฌ์กฐ)
- Web APIs: ๋ธ๋ผ์ฐ์ ์์ ์ ๊ณตํ๋ API (setTimeout, DOM, AJAX ๋ฑ). ๋น๋๊ธฐ ์์ ์ ์ค์ ๋ก ์ํํฉ๋๋ค.
- Task Queue: ๋น๋๊ธฐ ์์ ์ ์ฝ๋ฐฑ ํจ์๋ค์ด ๋๊ธฐํ๋ ๊ณต๊ฐ์ ๋๋ค.
- Event Loop: ์คํ์ด ๋น์ด์์ ๋ ํ์ ์๋ ํจ์๋ฅผ ์คํ์ผ๋ก ์ฎ๊ฒจ์ค๋๋ค.
3. ํ์คํฌ ํ์ ์ข ๋ฅ์ ์ฐ์ ์์
์ค์: ๋ง์ดํฌ๋กํ์คํฌ ํ๊ฐ ํญ์ ๋จผ์ ์คํ๋ฉ๋๋ค โญ
- Microtask Queue (์ฐ์ ์์ ์): Promise.then, MutationObserver ๋ฑ
- (Macro)task Queue (์ฐ์ ์์ ํ): setTimeout, setInterval, setImmediate ๋ฑ
4. ์ด๋ฒคํธ ๋ฃจํ์ ๋์ ๊ณผ์
์์ ์์ฝ
- ๋๊ธฐ ์ฝ๋๊ฐ ์คํ๋์ด Call Stack์ ์์๋ค๊ฐ ์ฒ๋ฆฌ๋ฉ๋๋ค.
- ๋น๋๊ธฐ ์์ ์ด ๋ฐ์ํ๋ฉด Web API๋ก ๋๊ฒจ์ง๊ณ , ์๋ฃ ์ ํ์คํฌ ํ์ ์ฝ๋ฐฑ์ด ์์ ๋๋ค.
- ์ด๋ฒคํธ ๋ฃจํ๋ Call Stack์ด ์์ ํ ๋น์ด์๋์ง ์ง์์ ์ผ๋ก ๊ฐ์ํฉ๋๋ค.
- ์คํ์ด ๋น๋ฉด, ๋ง์ดํฌ๋กํ์คํฌ ํ์ ๋ชจ๋ ์์ ์ ๋จผ์ ์ฒ๋ฆฌํฉ๋๋ค.
- ๊ทธ ํ ์ผ๋ฐ ํ์คํฌ ํ์ ์์ ์ ํ๋์ฉ ์คํ์ผ๋ก ์ฎ๊ฒจ ์คํํฉ๋๋ค.
๐ก ๋ฉด์ ํฌ์ธํธ
"setTimeout(callback, 0)์ด 0์ด ๋ค์ ์คํ๋์ง ์๋ ์ด์ ๋ ๋ฌด์์ธ๊ฐ์?"๋ผ๋ ์ง๋ฌธ์ ๋ํด, ํธ์ถ ์คํ์ด ๋น์ด์์ด์ผ ํ๋ฉฐ ํ์คํฌ ํ์์ ์๊ธฐ ์ฐจ๋ก๊ฐ ์ฌ ๋๊น์ง ๋๊ธฐํด์ผ ํ๊ธฐ ๋๋ฌธ์ด๋ผ๊ณ ๋ต๋ณํ ์ ์์ด์ผ ํฉ๋๋ค.
"setTimeout(callback, 0)์ด 0์ด ๋ค์ ์คํ๋์ง ์๋ ์ด์ ๋ ๋ฌด์์ธ๊ฐ์?"๋ผ๋ ์ง๋ฌธ์ ๋ํด, ํธ์ถ ์คํ์ด ๋น์ด์์ด์ผ ํ๋ฉฐ ํ์คํฌ ํ์์ ์๊ธฐ ์ฐจ๋ก๊ฐ ์ฌ ๋๊น์ง ๋๊ธฐํด์ผ ํ๊ธฐ ๋๋ฌธ์ด๋ผ๊ณ ๋ต๋ณํ ์ ์์ด์ผ ํฉ๋๋ค.
'๐จ Frontend > JavaScript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [JavaScript] ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ (0) | 2026.03.30 |
|---|---|
| [JavaScript] ๋น๋๊ธฐ ์ฒ๋ฆฌ (0) | 2026.03.30 |