๐ŸŽจ Frontend/JavaScript

[JavaScript] Event Loop

devCloud 2026. 3. 30. 17:24

๋ธŒ๋ผ์šฐ์ € ์ด๋ฒคํŠธ ๋ฃจํ”„(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. ์ด๋ฒคํŠธ ๋ฃจํ”„์˜ ๋™์ž‘ ๊ณผ์ •

์ˆœ์„œ ์š”์•ฝ

  1. ๋™๊ธฐ ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๋˜์–ด Call Stack์— ์Œ“์˜€๋‹ค๊ฐ€ ์ฒ˜๋ฆฌ๋ฉ๋‹ˆ๋‹ค.
  2. ๋น„๋™๊ธฐ ์ž‘์—…์ด ๋ฐœ์ƒํ•˜๋ฉด Web API๋กœ ๋„˜๊ฒจ์ง€๊ณ , ์™„๋ฃŒ ์‹œ ํƒœ์Šคํฌ ํ์— ์ฝœ๋ฐฑ์ด ์Œ“์ž…๋‹ˆ๋‹ค.
  3. ์ด๋ฒคํŠธ ๋ฃจํ”„๋Š” Call Stack์ด ์™„์ „ํžˆ ๋น„์–ด์žˆ๋Š”์ง€ ์ง€์†์ ์œผ๋กœ ๊ฐ์‹œํ•ฉ๋‹ˆ๋‹ค.
  4. ์Šคํƒ์ด ๋น„๋ฉด, ๋งˆ์ดํฌ๋กœํƒœ์Šคํฌ ํ์˜ ๋ชจ๋“  ์ž‘์—…์„ ๋จผ์ € ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
  5. ๊ทธ ํ›„ ์ผ๋ฐ˜ ํƒœ์Šคํฌ ํ์˜ ์ž‘์—…์„ ํ•˜๋‚˜์”ฉ ์Šคํƒ์œผ๋กœ ์˜ฎ๊ฒจ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
๐Ÿ’ก ๋ฉด์ ‘ ํฌ์ธํŠธ
"setTimeout(callback, 0)์ด 0์ดˆ ๋’ค์— ์‹คํ–‰๋˜์ง€ ์•Š๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ธ๊ฐ€์š”?"๋ผ๋Š” ์งˆ๋ฌธ์— ๋Œ€ํ•ด, ํ˜ธ์ถœ ์Šคํƒ์ด ๋น„์–ด์žˆ์–ด์•ผ ํ•˜๋ฉฐ ํƒœ์Šคํฌ ํ์—์„œ ์ž๊ธฐ ์ฐจ๋ก€๊ฐ€ ์˜ฌ ๋•Œ๊นŒ์ง€ ๋Œ€๊ธฐํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋ผ๊ณ  ๋‹ต๋ณ€ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

'๐ŸŽจ Frontend > JavaScript' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[JavaScript] ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ  (0) 2026.03.30
[JavaScript] ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ  (0) 2026.03.30