let's get IT with DAVINA ๐Ÿ’ป

JavaScript Event Loop๋ž€? ๋ณธ๋ฌธ

DEV_IN/JavaScript

JavaScript Event Loop๋ž€?

๋‹ค๋นˆ์น˜์ฝ”๋“œ๐Ÿ’Ž 2023. 2. 22. 18:25
MDN์— ๋”ฐ๋ฅด๋ฉด, ์ด๋ฒคํŠธ ๋ฃจํ”„๋ž€, "JS์˜ ๋Ÿฐํƒ€์ž„ ๋ชจ๋ธ์€ ์ฝ”๋“œ์˜ ์‹คํ–‰, ์ด๋ฒคํŠธ์˜ ์ˆ˜์ง‘๊ณผ ์ฒ˜๋ฆฌ, ํ์— ๋Œ€๊ธฐ ์ค‘์ธ ํ•˜์œ„ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•˜๋Š” ์ด๋ฒคํŠธ ๋ฃจํ”„์— ๊ธฐ๋ฐ˜ํ•˜๊ณ  ์žˆ๋‹ค" ๋ผ๊ณ  ๋‚˜์˜จ๋‹ค..
๋ฌด์Šจ๋ง์ธ์ง€ ๋„ํ†ต ๋ชจ๋ฅด๊ฒ ์œผ๋‹ˆ, ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์˜ ์‹คํ–‰ ์›๋ฆฌ๋ฅผ ์‚ด์ง ์•Œ์•„๋ณด์ž

JavaScript, what r u?

  • ์‹ฑ๊ธ€ ์Šค๋ ˆ๋“œ ์–ธ์–ด์ด๋‹ค.
    • ๋ญ”๋ง์ด๋ƒ? โ–ท ํ•˜๋‚˜์˜ ํ”„๋กœ๊ทธ๋žจ์€ ๋™์‹œ์— ํ•˜๋‚˜์˜ ์ฝ”๋“œ๋งŒ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.
    • one thread === one call stack === one thing at a time (๋ฉ€ํ‹ฐ๊ฐ€ ์•ˆ๋ผ!!)
  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์€ Memory Heap & Call Stack์œผ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋‹ค. (๊ฐ€์žฅ ์œ ๋ช…ํ•œ ๊ฒƒ์ด ๊ตฌ๊ธ€์˜ V8 Engine)
    • Memory Heap : ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น์ด ์ผ์–ด๋‚˜๋Š” ์žฅ์†Œ 
      • ex) ์šฐ๋ฆฌ๊ฐ€ ํ”„๋กœ๊ทธ๋žจ์— ์„ ์–ธํ•œ ๋ณ€์ˆ˜, ํ•จ์ˆ˜ ๋“ฑ์ด ๋‹ด๊ธด๋‹ค
    • Call Stack : Memory Heap์— ์žˆ๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์ž‘์„ฑํ•œ ์ฝ”๋“œ๋“ค์ด ์‹คํ–‰๋  ๋•Œ ํ•˜๋‚˜์”ฉ stack์˜ ํ˜•ํƒœ๋กœ ์Œ“์ด๋Š” ์žฅ์†Œ
      • ์ด๋•Œ, ๋™๊ธฐ ํ•จ์ˆ˜๋“ค์€ ๊ทธ๋Œ€๋กœ ์‹คํ–‰๋˜๊ณ , ๋น„๋™๊ธฐ ํ•จ์ˆ˜๋“ค์€ Web API๋กœ ์ฒ˜๋ฆฌํ•˜๊ฒŒ ๋˜๋ฉฐ ์ผ์„ ๋ถ„๋ฐฐํ•ฉ๋‹ˆ๋‹ค. 
      • stack : ์ž๋ฃŒ๊ตฌ์กฐ ์ค‘ ํ•˜๋‚˜, ์„ ์ž…ํ›„์ถœ(LIFO, Last In First Out)์˜ ๋ฐฉ์‹์„ ๋”ฐ๋ฅธ๋‹ค.
  • ๋”ฐ๋ผ์„œ, ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ๋‹จ์ผ ์Šค๋ ˆ๋“œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์ด์ง€๋งŒ, Web API, Callback Queue, Event Loop ๋•๋ถ„์— ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ์ฒ˜๋Ÿผ ๋ณด์—ฌ์ง„๋‹ค!! ๐Ÿ‘€

Web API

  • ์ƒ๊ธฐ ๊ทธ๋ฆผ์˜ ์˜ค๋ฅธ์ชฝ์„ ๋ณด๋ฉด ๋ณด๋ฉด, Web API๋Š” JS Engine ๋ฐ–์— ๊ทธ๋ ค์ ธ ์žˆ๋‹ค. ์ฆ‰, ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์ด ์•„๋‹ˆ๋‹ค.
  • ๋ธŒ๋ผ์šฐ์ €์—์„œ ์ œ๊ณตํ•˜๋Š” API๋กœ, DOM, Ajax, Timeout ๋“ฑ์ด ์žˆ๋‹ค.
  • Call Stack์—์„œ ์‹คํ–‰๋œ ๋น„๋™๊ธฐ ํ•จ์ˆ˜๋Š” Web API์—์„œ ์ฒ˜๋ฆฌ๋ฅผ ํ•˜๊ฒŒ ๋˜๊ณ  ๊ทธ๋™์•ˆ์— Call Stack์€ ๋‚˜๋จธ์ง€ ๋™๊ธฐ ํ•จ์ˆ˜๋“ค์„ ์ฒ˜๋ฆฌํ•œ๋‹ค.
  • Web API๋Š” ๋น„๋™๊ธฐ ํ•จ์ˆ˜๋“ค์„ ์ฒ˜๋ฆฌํ•˜๋ฉฐ ์ž‘์—…์ด ์™„๋ฃŒ๋œ ๋น„๋™๊ธฐ ํ•จ์ˆ˜๋“ค์„ Callback Queue๋กœ ๋„˜๊ฒจ์ค€๋‹ค.

Callback Queue

  • ๋น„๋™๊ธฐ ํ•จ์ˆ˜๋“ค์„ ๋ณด๊ด€ํ•˜๋Š” ์žฅ์†Œ
  • Event Loop์—์„œ ๋น„๋™๊ธฐ ํ•จ์ˆ˜๋ฅผ ๊บผ๋‚ด ์ „๊นŒ์ง€๋Š” ๊ณ„์† Queue ๋ฐฉ์‹์œผ๋กœ ๋ณด๊ด€ํ•˜๊ฒŒ ๋œ๋‹ค.
    • Queue: ์ž๋ฃŒ๊ตฌ์กฐ ์ค‘ ํ•˜๋‚˜, ์„ ์ž…์„ ์ถœ(FIFO-First In First Out)์˜ ๋ฐฉ์‹์„ ๋”ฐ๋ฅธ๋‹ค.

Event Loop

  • Call Stack๊ณผ Callback Queue์˜ ์ƒํƒœ๋ฅผ ๊ณ„์† ๊ฐ์‹œํ•˜๋ฉฐ
  • Call Stack์— ํ•จ์ˆ˜๋“ค์ด ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด
  • Callback Queue์— ์žˆ๋Š” ๋น„๋™๊ธฐ ํ•จ์ˆ˜๋“ค์„ Call Stack์— ๋ฐ€์–ด๋„ฃ๋Š”๋‹ค.
  • ๊ทธ ํ›„, Call Stack์—์„œ ๋น„๋™๊ธฐ ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰์‹œํ‚จ๋‹ค.

์ •๋ฆฌํ•œ๋‹ค๋ฉด?
- V8 ์—”์ง„์—์„œ ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๋˜๋ฉด, Call Stack์— ์Œ“์ธ๋‹ค.
- Stack์˜ ์„ ์ž…ํ›„์ถœ์˜ ๋ฐฉ์‹์— ๋”ฐ๋ผ ์ œ์ผ ๋งˆ์ง€๋ง‰์— ๋“ค์–ด์˜จ ํ•จ์ˆ˜๊ฐ€ ๋จผ์ € ์‹คํ–‰๋˜๋ฉฐ, Stack์— ์Œ“์—ฌ์ง„ ํ•จ์ˆ˜๊ฐ€ ๋ชจ๋‘ ์‹คํ–‰๋œ๋‹ค.
- ๋น„๋™๊ธฐ ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰๋œ๋‹ค๋ฉด, Web API๊ฐ€ ํ˜ธ์ถœ๋˜๊ณ 
- Web API๋Š” ๋น„๋™๊ธฐ ํ•จ์ˆ˜์˜ ์ฝœ๋ฐฑํ•จ์ˆ˜๋ฅผ Callback Queue์— ๋ฐ€์–ด๋„ฃ๋Š”๋‹ค.
- Event Loop๋Š” Call Stack์ด ๋นˆ ์ƒํƒœ๊ฐ€ ๋˜๋ฉด
- Callback Queue์— ์žˆ๋Š” ์ฒซ๋ฒˆ์งธ ์ฝœ๋ฐฑ๋ถ€ํ„ฐ Call Stack์œผ๋กœ ์ด๋™์‹œํ‚จ๋‹ค. 

โ–ถ ์ด๋Ÿฌํ•œ ๋ฐ˜๋ณต์ ์ธ ํ–‰๋™์„ ํ‹ฑ(tick)์ด๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

์ฐธ๊ณ  ์˜์ƒ 

'DEV_IN > JavaScript' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[Inside JavaScript] Chapter 1. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ธฐ๋ณธ ๊ฐœ์š”  (0) 2023.03.27
Module  (2) 2023.02.28
This  (6) 2023.02.28
Prototype  (5) 2023.02.28
priceFormatter  (0) 2023.02.08
Comments