Seize your moment! ๐Ÿ‘พ

์•ˆ๋…•ํ•˜์„ธ์š”. Eric์ž…๋‹ˆ๋‹ค. ์ œ ๋ธ”๋กœ๊ทธ์— ๋ฐฉ๋ฌธํ•ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ’ป ๊ฐœ๋ฐœ๊ณต๋ถ€/JavaScript

[Eric's JS] ์ด๋ฒคํŠธ ๋ฃจํ”„(Event Loop) ๋ž€? ๐Ÿ”„ JavaScript, ๋ธŒ๋ผ์šฐ์ €

Eric_ko 2023. 5. 7. 19:34

์•ˆ๋…•ํ•˜์„ธ์š”! Eric์ž…๋‹ˆ๋‹ค

์›น ๋ธŒ๋ผ์šฐ์ €์˜ ํ•ต์‹ฌ ๊ธฐ๋Šฅ ์ค‘ ํ•˜๋‚˜์ธ ์ด๋ฒคํŠธ ๋ฃจํ”„(Event Loop)์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

์ด๋ฒคํŠธ ๋ฃจํ”„๋Š” ์›น ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋™์‹œ์„ฑ์„ ์œ ์ง€ํ•˜๊ณ , ๋‹ค์–‘ํ•œ ๋น„๋™๊ธฐ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•˜๋Š” ์—ญํ• ์„ ๋‹ด๋‹นํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋ฉด ์›น ๋ธŒ๋ผ์šฐ์ €์˜ ์ด๋ฒคํŠธ ๋ฃจํ”„๊ฐ€ ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€ ์•Œ์•„๋ณด์‹œ์ฃ !

 

โœ… ์ด๋ฒคํŠธ ๋ฃจํ”„(Event Loop)๋ž€?

์ด๋ฒคํŠธ ๋ฃจํ”„๋Š” ์›น ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋ฐœ์ƒํ•˜๋Š” ๋น„๋™๊ธฐ ์ด๋ฒคํŠธ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋Š” ์—ญํ• ์„ ํ•˜๋Š” ๋ฌดํ•œ ๋ฃจํ”„์ด๋‹ค.

JavaScript๋Š” ์‹ฑ๊ธ€ ์Šค๋ ˆ๋“œ ์–ธ์–ด์ด๋ฏ€๋กœ, ์ด๋ฒคํŠธ ๋ฃจํ”„๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋™์‹œ์„ฑ์„ ์œ ์ง€ํ•˜๋ฉฐ, ๋‹ค์–‘ํ•œ ์ž‘์—…์„ ๋™์‹œ์— ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.


๐Ÿ”„  ์ด๋ฒคํŠธ ๋ฃจํ”„์˜ ์ž‘๋™ ์›๋ฆฌ

์˜ˆ์‹œ)

ํ•˜๋‹จ์ฒ˜๋Ÿผ JavaScript ์ฝ”๋“œ๊ฐ€ ์ž‘์„ฑ๋˜์–ด์žˆ์œผ๋ฉด, ์–ด๋– ํ•œ ์ˆœ์„œ๋Œ€๋กœ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์˜ฌ๊นŒ?

console.log(1+1);
setTimeout(function() { console.log(2+3) }, 1000);
console.log(7+3);


// ๊ฒฐ๊ณผ๋Š”
2
10
5
//๋กœ ๋‚˜์˜ฌ๊ฒƒ์ด๋‹ค.

์ด๋ฒคํŠธ ๋ฃจํ”„๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ˆœ์„œ๋กœ ์ž‘๋™ํ•œ๋‹ค.

 

1. ํ˜ธ์ถœ ์Šคํƒ(Callback Stack)์„ ํ™•์ธ

2. ํ˜ธ์ถœ ์Šคํƒ์ด ๋น„์–ด ์žˆ์œผ๋ฉด, ํ(Queue)์—์„œ ๊ฐ€์žฅ ์˜ค๋ž˜๋œ ์ด๋ฒคํŠธ(๋˜๋Š” ํƒœ์Šคํฌ)๋ฅผ ๊บผ๋‚ธ๋‹ค.

3. ๊บผ๋‚ธ ์ด๋ฒคํŠธ๋ฅผ ํ˜ธ์ถœ ์Šคํƒ์— ์ถ”๊ฐ€ํ•˜๊ณ  ์‹คํ–‰.

4. ์ด๋ฒคํŠธ ์‹คํ–‰์ด ์™„๋ฃŒ๋˜๋ฉด ํ˜ธ์ถœ ์Šคํƒ์—์„œ ์ œ๊ฑฐ.

5. ์œ„ ๊ณผ์ •์„ ๋ฌดํ•œ ๋ฐ˜๋ณตํ•ฉ๋‹ˆ๋‹ค.

 

์ด๋ฒคํŠธ ๋ฃจํ”„๋Š” ํ˜ธ์ถœ ์Šคํƒ์ด ๋น„์–ด ์žˆ์„ ๋•Œ๋งŒ ํ์—์„œ ์ด๋ฒคํŠธ๋ฅผ ๊บผ๋‚ด์™€ ์‹คํ–‰ํ•˜๋ฏ€๋กœ,

๋™๊ธฐ ์ž‘์—…์ด ์ง„ํ–‰๋˜๋Š” ๋™์•ˆ ๋น„๋™๊ธฐ ์ž‘์—…์€ ๋Œ€๊ธฐํ•˜๊ฒŒ ๋œ๋‹ค.


๐Ÿ”„  ๋น„๋™๊ธฐ ์ž‘์—… ์ด๋ž€?

์›น ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋น„๋™๊ธฐ ์ž‘์—…๋“ค์ด ์ด๋ฒคํŠธ ๋ฃจํ”„์™€ ํ•จ๊ป˜ ์ž‘๋™ํ•œ๋‹ค.

 

- ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ(Event Listeners): ์‚ฌ์šฉ์ž ์ž…๋ ฅ, ๋„คํŠธ์›Œํฌ ์š”์ฒญ ๋“ฑ ๋‹ค์–‘ํ•œ ์ด๋ฒคํŠธ์— ๋ฐ˜์‘ํ•˜๋Š” ํ•จ์ˆ˜

- ํƒ€์ด๋จธ(Timers): setTimeout ๋ฐ setInterval๊ณผ ๊ฐ™์€ ํƒ€์ด๋จธ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ง€์ •๋œ ์‹œ๊ฐ„ ํ›„์— ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰

- AJAX ์š”์ฒญ: ๋น„๋™๊ธฐ ๋ฐฉ์‹์œผ๋กœ ์„œ๋ฒ„์™€ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” ๊ธฐ์ˆ 


โœ… ๊ฒฐ๋ก 

 

์ด๋ฒคํŠธ ๋ฃจํ”„๋Š” ์›น ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋™์‹œ์„ฑ์„ ์œ ์ง€ํ•˜๊ณ , ๋‹ค์–‘ํ•œ ๋น„๋™๊ธฐ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•˜๋Š” ํ•ต์‹ฌ ๋ฉ”์ปค๋‹ˆ์ฆ˜ ์‹œ์Šคํ…œ์ด๋‹ค.

JavaScript๋Š” ์‹ฑ๊ธ€ ์Šค๋ ˆ๋“œ ์–ธ์–ด์ด์ง€๋งŒ, ์ด๋ฒคํŠธ ๋ฃจํ”„๋ฅผ ํ†ตํ•ด ๋งˆ์น˜ ์—ฌ๋Ÿฌ ์ž‘์—…์ด ๋™์‹œ์— ์‹คํ–‰๋˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

์ด๋ฒคํŠธ ๋ฃจํ”„๋ฅผ ์ดํ•ดํ•˜๊ณ  ํ™œ์šฉํ•˜๋ฉด ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์„ฑ๋Šฅ๊ณผ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.

 

์˜ˆ๋ฅผ๋“ค์–ด์„œ, Stack์—์„œ for๋ฌธ์„ 100000๋ฒˆ ๋Œ๋ ค์„œ 5์ดˆ์˜ delay ๊ฐ€ ์ƒ๊ธด๋‹ค๊ณ  ์ƒ๊ฐํ•ด๋ณด์ž.

์ด๋•Œ, ๋งŒ์•ฝ User๊ฐ€ for๋ฌธ์ด ๋„๋Š” 5์ดˆ์˜ ์‹œ๊ฐ„๋™์•ˆ ๋ฒ„ํŠผ์„ ์—ฌ๋Ÿฌ๋ฒˆ ํด๋ฆญ(Event Listener)ํ•œ๋‹ค๋ฉด,

๋ธŒ๋ผ์šฐ์ ธ๋Š” Stack์— ์Œ“์—ฌ์žˆ๋Š” for๋ฌธ์„ ๋‹ค ๋„๋Š”๋™์•ˆ ํด๋ฆญ์ด๋ฒคํŠธ๋ฅผ ์ฒ˜๋ฆฌ ํ•  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ,

๋ฐ˜์‘์„ ํ•  ์ˆ˜ ๊ฐ€ ์—†๋‹ค. ์™œ๋ƒํ•˜๋ฉด, ๋น„๋™๊ธฐ์ž‘์—…(์ด ์˜ˆ์‹œ์—์„œ๋Š” ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜๋Š” Event Listener)์€ ๋Œ€๊ธฐ์‹ค์—์„œ ๋Œ€๊ธฐํ•˜๋‹ค๊ฐ€,

Queue์—์„œ ๋Œ€๊ธฐํ•˜๋‹ค๊ฐ€ Stack์ด ๋น„์–ด์žˆ์„๋•Œ๋งŒ Stack ์œผ๋กœ ์˜ฌ๋ผ๊ฐ€์„œ ๋ฐ˜์‘์„ํ•œ๋‹ค.

ํ•˜์ง€๋งŒ, ์ด ๊ฒฝ์šฐ์— for๋ฌธ์„ ๋Œ๊ณ  ์žˆ์œผ๋ฏ€๋กœ, ๋ฒ„ํŠผ ๋ˆ„๋ฅธ๊ฒƒ์— ๋ฐ˜์‘์„ ํ•˜์ง€ ์•Š์„๊ฒƒ์ด๋‹ค. (์™œ๋ƒํ•˜๋ฉด ์•„์ง Queue ์—์„œ ๋Œ€๊ธฐ์ค‘์ด๋‹ˆ๊นŒ)

 

-> ์ด๋ฅผํ†ตํ•ด์„œ Stack๊ณผ Queue๋ฅผ ๋ฐ”์˜๊ฒŒํ•˜๋ฉด ์•ˆ๋˜๊ฒ ๊ตฌ๋‚˜ ๋ผ๊ณ  ์ƒ๊ฐ์„...!

 

์ด๋ฒคํŠธ ๋ฃจํ”„์˜ ์ž‘๋™ ์›๋ฆฌ๋ฅผ ํ†ตํ•ด ์›น ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋ฐœ์ƒํ•˜๋Š” ๋™๊ธฐ ๋ฐ ๋น„๋™๊ธฐ ์ž‘์—…์„ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค.

์ด๋Ÿฌํ•œ ์ง€์‹์„ ํ™œ์šฉํ•˜์—ฌ ํšจ์œจ์ ์ธ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์„ฑ๋Šฅ ๋ฐ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ์ตœ์ ํ™”ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋œ๋‹ค.

์ด๋ฒคํŠธ ๋ฃจํ”„๋Š” ์›น ๊ฐœ๋ฐœ์ž๊ฐ€ ๋˜๊ธฐ ์œ„ํ•œ ์ค‘์š”ํ•œ ๊ฐœ๋… ์ค‘ ํ•˜๋‚˜์ด๋ฏ€๋กœ, ๊ผญ ์ˆ™์ง€ํ•˜๊ณ  ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๋…ธ๋ ฅํ•˜๋„๋ก ํ•˜์ž.