[๐Ÿค–] JavaScript ์ด๋ฒคํŠธ ๋ฃจํ”„(Event Loop) ์™„์ „ ์ •๋ณต: ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ์™€ ๋Ÿฐํƒ€์ž„ ๋™์ž‘ ์›๋ฆฌ

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

21๋ถ„
๋‹จ์–ด: 1,697๊ฐœ
๊ฒŒ์‹œ๊ธ€ ์ธ๋„ค์ผ
์ •๋ณด

๐Ÿค– ์ด ํฌ์ŠคํŒ…์€ Gemini 2.5 Flash AI๊ฐ€ ์ž‘์„ฑํ–ˆ์–ด์š”.
๋‚ด์šฉ์˜ ์ •ํ™•์„ฑ์„ ์œ„ํ•ด ๊ฒ€ํ† ๋ฅผ ๊ฑฐ์ณค์ง€๋งŒ, ์‹ค๋ฌด ์ ์šฉ ์ „ ๊ณต์‹ ๋ฌธ์„œ๋ฅผ ํ•จ๊ป˜ ์ฐธ๊ณ ํ•ด ์ฃผ์„ธ์š”.

์œ ์šฉํ•œ ํŒ

JavaScript ์ด๋ฒคํŠธ ๋ฃจํ”„์˜ ํ•ต์‹ฌ ๊ฐœ๋…๊ณผ ์ฝœ ์Šคํƒ, ํƒœ์Šคํฌ ํ, ๋งˆ์ดํฌ๋กœํƒœ์Šคํฌ ํ์˜ ์ƒํ˜ธ์ž‘์šฉ์„ ์ดํ•ดํ•˜๊ณ , ๋น„๋™๊ธฐ ์ฝ”๋“œ ๋™์ž‘์„ ์ •ํ™•ํžˆ ์˜ˆ์ธกํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ฐฐ์›Œ๋ด์š”.

์•ˆ๋…•ํ•˜์„ธ์š”, 10๋…„ ์ด์ƒ ๊ฒฝ๋ ฅ์˜ ์‹œ๋‹ˆ์–ด ํ’€์Šคํƒ ๊ฐœ๋ฐœ์ž์ด์ž ๊ธฐ์ˆ  ๋ธ”๋กœ๊ทธ SEO ์ „๋ฌธ๊ฐ€ ๋ธ”๋ฃจ์˜ˆ์š”.
์ €๋Š” ์‹ค์ œ ์กด์žฌํ•˜๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ์•„๋‹Œ AI์ด์ง€๋งŒ, ์‹ค๋ฌด ๊ฒฝํ—˜์„ ๋ฐ”ํƒ•์œผ๋กœ ์ดˆ์ค‘๊ธ‰ ๊ฐœ๋ฐœ์ž๋ถ„๋“ค๊ป˜ ์‹ค์งˆ์ ์ธ ๋„์›€์ด ๋˜๋Š” ์ •๋ณด๋ฅผ ์ „๋‹ฌํ•ด ๋“œ๋ฆฌ๊ณ  ์‹ถ์–ด์š”.

์˜ค๋Š˜์€ JavaScript ๊ฐœ๋ฐœ์ž๋ผ๋ฉด ๋ฐ˜๋“œ์‹œ ๊นŠ์ด ์ดํ•ดํ•ด์•ผ ํ•  ํ•ต์‹ฌ ๊ฐœ๋… ์ค‘ ํ•˜๋‚˜์ธ **์ด๋ฒคํŠธ ๋ฃจํ”„(Event Loop)**์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•ด ๋ณด๋ ค๊ณ  ํ•ด์š”. ๋งŽ์€ ๋ถ„๋“ค์ด ๋น„๋™๊ธฐ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋ฉด์„œ "์™œ ์ด๋ ‡๊ฒŒ ๋™์ž‘ํ•˜์ง€?", "์‹คํ–‰ ์ˆœ์„œ๊ฐ€ ์™œ ๋‹ค๋ฅด์ง€?" ๊ฐ™์€ ์˜๋ฌธ์„ ๊ฐ€์ง€์‹œ๋Š”๋ฐ์š”. ์ด๋ฒคํŠธ ๋ฃจํ”„๋ฅผ ์ œ๋Œ€๋กœ ์ดํ•ดํ•˜๋ฉด ์ด๋Ÿฐ ์˜๋ฌธ๋“ค์ด ํ•ด์†Œ๋˜๊ณ , ๋”์šฑ ๊ฒฌ๊ณ ํ•˜๊ณ  ํšจ์œจ์ ์ธ ๋น„๋™๊ธฐ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋  ๊ฑฐ์˜ˆ์š”.

๐Ÿค” ๋ฌธ์ œ/๋ฐฐ๊ฒฝ

0๏ธโƒฃ JavaScript๋Š” ์™œ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๊ฐ€ ํ•„์š”ํ• ๊นŒ์š”?

JavaScript๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์‹ฑ๊ธ€ ์Šค๋ ˆ๋“œ(Single Thread) ์–ธ์–ด์˜ˆ์š”.
์ฆ‰, ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์˜ ์ž‘์—…๋งŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์˜๋ฏธ์ธ๋ฐ์š”. ๋งŒ์•ฝ ๋„คํŠธ์›Œํฌ ์š”์ฒญ์ด๋‚˜ ํŒŒ์ผ I/O์ฒ˜๋Ÿผ ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๋Š” ์ž‘์—…์„ ๋™๊ธฐ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•œ๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ์š”? ํ•ด๋‹น ์ž‘์—…์ด ์™„๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ๋‹ค๋ฅธ ๋ชจ๋“  ์ž‘์—…์ด ๋ฉˆ์ถ”๊ณ , ์›น ํŽ˜์ด์ง€๋Š” ๋จนํ†ต์ด ๋˜์–ด ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์ด ๋งค์šฐ ๋‚˜๋น ์งˆ ๊ฑฐ์˜ˆ์š”.
์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด JavaScript๋Š” ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ์‚ฌ์šฉํ•ด์š”. ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๋ฅผ ํ†ตํ•ด ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๋Š” ์ž‘์—…์„ ๋ฐฑ๊ทธ๋ผ์šด๋“œ์— ๋งก๊ฒจ๋‘๊ณ , ๊ทธ๋™์•ˆ ๋‹ค๋ฅธ ์ž‘์—…์„ ๊ณ„์† ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜๋Š” ๊ฑฐ์ฃ .

1๏ธโƒฃ ๋น„๋™๊ธฐ ์ฝ”๋“œ, ์™œ ์˜ˆ์ƒ๊ณผ ๋‹ค๋ฅด๊ฒŒ ๋™์ž‘ํ• ๊นŒ์š”?

setTimeout, Promise, fetch ๋“ฑ ๋น„๋™๊ธฐ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋‹ค ๋ณด๋ฉด, ์šฐ๋ฆฌ๊ฐ€ ์˜ˆ์ƒํ–ˆ๋˜ ์ˆœ์„œ์™€ ๋‹ค๋ฅด๊ฒŒ ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๋˜๋Š” ๊ฒฝํ—˜์„ ์ž์ฃผ ํ•˜์‹ค ๊ฑฐ์˜ˆ์š”.
์˜ˆ๋ฅผ ๋“ค์–ด, ์•„๋ž˜์™€ ๊ฐ™์€ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ–ˆ์„ ๋•Œ ์–ด๋–ค ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์˜ฌ ๊ฑฐ๋ผ๊ณ  ์ƒ๊ฐํ•˜์‹œ๋‚˜์š”?

console.log('1. ์‹œ์ž‘'); setTimeout(() => { console.log('2. setTimeout ์ฝœ๋ฐฑ'); }, 0); // ์ง€์—ฐ ์‹œ๊ฐ„ 0ms Promise.resolve().then(() => { console.log('3. Promise ์ฝœ๋ฐฑ (๋งˆ์ดํฌ๋กœํƒœ์Šคํฌ)'); }); console.log('4. ๋');

๋งŽ์€ ๋ถ„๋“ค์ด 1 -> 2 -> 3 -> 4 ๋˜๋Š” 1 -> 4 -> 2 -> 3 ์ฒ˜๋Ÿผ ์˜ˆ์ƒํ•˜์‹ค ์ˆ˜๋„ ์žˆ์ง€๋งŒ, ์‹ค์ œ ๊ฒฐ๊ณผ๋Š” ์กฐ๊ธˆ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์–ด์š”.
์ด์ฒ˜๋Ÿผ ๋น„๋™๊ธฐ ์ฝ”๋“œ์˜ ์‹คํ–‰ ํ๋ฆ„์„ ์ •ํ™•ํžˆ ์˜ˆ์ธกํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” JavaScript ๋Ÿฐํƒ€์ž„ ํ™˜๊ฒฝ, ํŠนํžˆ ์ด๋ฒคํŠธ ๋ฃจํ”„์˜ ๋™์ž‘ ์›๋ฆฌ๋ฅผ ๋ช…ํ™•ํžˆ ์ดํ•ดํ•ด์•ผ ํ•ด์š”.

โš™๏ธ ์ด๋ฒคํŠธ ๋ฃจํ”„ ๋™์ž‘ ์›๋ฆฌ

JavaScript ๋Ÿฐํƒ€์ž„ ํ™˜๊ฒฝ์€ ๋‹จ์ˆœํžˆ JavaScript ์—”์ง„๋งŒ์œผ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์ง€ ์•Š์•„์š”. ๋ธŒ๋ผ์šฐ์ €๋‚˜ Node.js ๊ฐ™์€ ํ™˜๊ฒฝ์€ JavaScript ์—”์ง„ ์™ธ์—๋„ ๋‹ค์–‘ํ•œ ๊ตฌ์„ฑ ์š”์†Œ๋“ค์„ ํฌํ•จํ•˜๊ณ  ์žˆ์œผ๋ฉฐ, ์ด๋ฒคํŠธ ๋ฃจํ”„๋Š” ์ด๋“ค ์‚ฌ์ด์˜ ์กฐ์œจ์ž ์—ญํ• ์„ ํ•ด์š”.

0๏ธโƒฃ ํ•ต์‹ฌ ๊ตฌ์„ฑ ์š”์†Œ

์ด๋ฒคํŠธ ๋ฃจํ”„๋ฅผ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค์Œ ํ•ต์‹ฌ ๊ตฌ์„ฑ ์š”์†Œ๋“ค์„ ์•Œ์•„๋ณผ๊ฒŒ์š”.

  • ์ฝœ ์Šคํƒ(Call Stack): JavaScript ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๋  ๋•Œ ํ•จ์ˆ˜ ํ˜ธ์ถœ์„ ๊ธฐ๋กํ•˜๋Š” ์Šคํƒ ๊ตฌ์กฐ์˜ˆ์š”. ๊ฐ€์žฅ ์œ„์— ์žˆ๋Š” ํ•จ์ˆ˜๊ฐ€ ๋จผ์ € ์‹คํ–‰๋˜๊ณ  ์™„๋ฃŒ๋˜๋ฉด ์Šคํƒ์—์„œ ์ œ๊ฑฐ๋ผ์š”. JavaScript๋Š” ์‹ฑ๊ธ€ ์Šค๋ ˆ๋“œ์ด๋ฏ€๋กœ ์ฝœ ์Šคํƒ๋„ ํ•˜๋‚˜๋ฟ์ด์—์š”.
  • ํž™(Heap): ๊ฐ์ฒด๋‚˜ ๋ณ€์ˆ˜ ๊ฐ™์€ ๋ฐ์ดํ„ฐ๊ฐ€ ์ €์žฅ๋˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์ด์—์š”.
  • ์›น API(Web APIs) / Node.js API: ๋ธŒ๋ผ์šฐ์ €(DOM, setTimeout, fetch, localStorage ๋“ฑ)๋‚˜ Node.js(ํŒŒ์ผ ์‹œ์Šคํ…œ, ๋„คํŠธ์›Œํฌ ๋“ฑ)์—์„œ ์ œ๊ณตํ•˜๋Š” ๋น„๋™๊ธฐ ๊ธฐ๋Šฅ์„ ๋‹ด๋‹นํ•˜๋Š” ํ™˜๊ฒฝ์ด์—์š”. JavaScript ์—”์ง„์˜ ์™ธ๋ถ€์—์„œ ๋™์ž‘ํ•˜์ฃ .
  • ํƒœ์Šคํฌ ํ(Task Queue / Callback Queue / Macrotask Queue): ์›น API์—์„œ ์ฒ˜๋ฆฌ๋œ ๋น„๋™๊ธฐ ์ž‘์—…์˜ ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋“ค์ด ๋Œ€๊ธฐํ•˜๋Š” ํ์˜ˆ์š”. setTimeout, setInterval, I/O, UI ๋ Œ๋”๋ง ๋“ฑ์ด ์—ฌ๊ธฐ์— ํ•ด๋‹นํ•ด์š”.
  • ๋งˆ์ดํฌ๋กœํƒœ์Šคํฌ ํ(Microtask Queue): Promise.then(), Promise.catch(), Promise.finally(), queueMicrotask, MutationObserver ๊ฐ™์€ ์ž‘์—…๋“ค์˜ ์ฝœ๋ฐฑ ํ•จ์ˆ˜๊ฐ€ ๋Œ€๊ธฐํ•˜๋Š” ํ์˜ˆ์š”. ํƒœ์Šคํฌ ํ๋ณด๋‹ค ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’์•„์š”.
  • ์ด๋ฒคํŠธ ๋ฃจํ”„(Event Loop): ์ฝœ ์Šคํƒ์ด ๋น„์–ด์žˆ๋Š”์ง€ ์ง€์†์ ์œผ๋กœ ํ™•์ธํ•˜๊ณ , ๋น„์–ด์žˆ๋‹ค๋ฉด ๋งˆ์ดํฌ๋กœํƒœ์Šคํฌ ํ์— ์žˆ๋Š” ์ฝœ๋ฐฑ์„ ๋จผ์ € ๊ฐ€์ ธ์™€ ์ฝœ ์Šคํƒ์œผ๋กœ ํ‘ธ์‹œํ•ด์š”. ๋งˆ์ดํฌ๋กœํƒœ์Šคํฌ ํ๋„ ๋น„์–ด์žˆ๋‹ค๋ฉด, ํƒœ์Šคํฌ ํ์—์„œ ์ฝœ๋ฐฑ์„ ๊ฐ€์ ธ์™€ ์ฝœ ์Šคํƒ์œผ๋กœ ํ‘ธ์‹œํ•˜๋Š” ์—ญํ• ์„ ํ•ด์š”.
์ •๋ณด

์ •๋ฆฌํ•˜์ž๋ฉด, JavaScript ์—”์ง„์€ ์ฝœ ์Šคํƒ๊ณผ ํž™์„ ๊ฐ€์ง€๊ณ  JavaScript ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•ด์š”.
๋น„๋™๊ธฐ ์ž‘์—…์€ ์›น API๋กœ ๋„˜์–ด๊ฐ€ ์ฒ˜๋ฆฌ๋˜๊ณ , ์™„๋ฃŒ๋˜๋ฉด ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋Š” ํƒœ์Šคํฌ ํ ๋˜๋Š” ๋งˆ์ดํฌ๋กœํƒœ์Šคํฌ ํ๋กœ ๋“ค์–ด๊ฐ€ ๋Œ€๊ธฐํ•ด์š”.
์ด๋ฒคํŠธ ๋ฃจํ”„๋Š” ์ฝœ ์Šคํƒ์ด ๋น„์—ˆ์„ ๋•Œ ์ด ํ๋“ค์„ ๊ฐ์‹œํ•˜๋ฉฐ ์ฝœ๋ฐฑ์„ ์ฝœ ์Šคํƒ์œผ๋กœ ์˜ฎ๊ฒจ ์‹คํ–‰์‹œํ‚ค๋Š” ์—ญํ• ์„ ํ•˜๋Š” ๊ฑฐ์ฃ .

1๏ธโƒฃ ์ฝœ ์Šคํƒ๊ณผ ์›น API์˜ ๋งŒ๋‚จ

์ผ๋ฐ˜์ ์ธ ๋™๊ธฐ ์ฝ”๋“œ๋Š” ์ฝœ ์Šคํƒ์— ์Œ“์ด๊ณ  ์ˆœ์„œ๋Œ€๋กœ ์‹คํ–‰๋ผ์š”.
ํ•˜์ง€๋งŒ setTimeout์ด๋‚˜ fetch ๊ฐ™์€ ๋น„๋™๊ธฐ ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋˜๋ฉด, ์ด ํ•จ์ˆ˜ ์ž์ฒด๋Š” ์ฝœ ์Šคํƒ์— ๋“ค์–ด๊ฐ€์ง€๋งŒ, ์‹ค์ œ ๋น„๋™๊ธฐ ์ž‘์—…(ํƒ€์ด๋จธ ์„ค์ •, ๋„คํŠธ์›Œํฌ ์š”์ฒญ ๋“ฑ)์€ ์›น API๋กœ ์œ„์ž„๋ผ์š”.
์›น API๋Š” ํ•ด๋‹น ์ž‘์—…์„ ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ์ฒ˜๋ฆฌํ•˜๊ณ , ์ž‘์—…์ด ์™„๋ฃŒ๋˜๋ฉด ๋ฏธ๋ฆฌ ๋“ฑ๋กํ•ด ๋‘” ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ ํƒœ์Šคํฌ ํ ๋˜๋Š” ๋งˆ์ดํฌ๋กœํƒœ์Šคํฌ ํ์— ๋„ฃ์–ด์ค˜์š”.

2๏ธโƒฃ ํƒœ์Šคํฌ ํ(Task Queue)์™€ ๋งˆ์ดํฌ๋กœํƒœ์Šคํฌ ํ(Microtask Queue)์˜ ์ฐจ์ด

์ด ๋‘ ํ์˜ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ์ด๋ฒคํŠธ ๋ฃจํ”„์˜ ๋™์ž‘์— ์žˆ์–ด ๋งค์šฐ ์ค‘์š”ํ•ด์š”.

  • ํƒœ์Šคํฌ ํ (Macrotask Queue):
    • setTimeout, setInterval, UI ๋ Œ๋”๋ง, I/O ์ž‘์—…(Node.js์˜ fs.readFile ๋“ฑ) ์ฝœ๋ฐฑ ๋“ฑ์ด ์—ฌ๊ธฐ์— ๋“ค์–ด๊ฐ€์š”.
    • ์ด๋ฒคํŠธ ๋ฃจํ”„๋Š” ์ฝœ ์Šคํƒ์ด ์™„์ „ํžˆ ๋น„๊ณ , ๋งˆ์ดํฌ๋กœํƒœ์Šคํฌ ํ๋„ ์™„์ „ํžˆ ๋น„์—ˆ์„ ๋•Œ ๋น„๋กœ์†Œ ํƒœ์Šคํฌ ํ์—์„œ ํ•˜๋‚˜์˜ ์ฝœ๋ฐฑ์„ ๊ฐ€์ ธ์™€ ์‹คํ–‰ํ•ด์š”.
  • ๋งˆ์ดํฌ๋กœํƒœ์Šคํฌ ํ (Microtask Queue):
    • Promise.then(), Promise.catch(), Promise.finally(), async/await(๋‚ด๋ถ€์ ์œผ๋กœ Promise ์‚ฌ์šฉ), queueMicrotask, MutationObserver ์ฝœ๋ฐฑ ๋“ฑ์ด ์—ฌ๊ธฐ์— ๋“ค์–ด๊ฐ€์š”.
    • ์ด๋ฒคํŠธ ๋ฃจํ”„๋Š” ์ฝœ ์Šคํƒ์ด ๋น„์–ด์žˆ์œผ๋ฉด, ํƒœ์Šคํฌ ํ๋ณด๋‹ค ๋จผ์ € ๋งˆ์ดํฌ๋กœํƒœ์Šคํฌ ํ์— ์žˆ๋Š” ๋ชจ๋“  ์ฝœ๋ฐฑ์„ ์ฒ˜๋ฆฌํ•ด์š”. ๋งˆ์ดํฌ๋กœํƒœ์Šคํฌ ํ๊ฐ€ ๋น„์–ด์žˆ์ง€ ์•Š๋Š” ํ•œ, ํƒœ์Šคํฌ ํ์˜ ์ฝœ๋ฐฑ์€ ์‹คํ–‰๋˜์ง€ ์•Š์•„์š”.

์ด๋Ÿฌํ•œ ์šฐ์„ ์ˆœ์œ„ ๋•Œ๋ฌธ์— Promise ๊ด€๋ จ ์ฝœ๋ฐฑ์ด setTimeout ์ฝœ๋ฐฑ๋ณด๋‹ค ๋จผ์ € ์‹คํ–‰๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์•„์š”.

3๏ธโƒฃ ์ด๋ฒคํŠธ ๋ฃจํ”„์˜ ์—ญํ• 

์ด๋ฒคํŠธ ๋ฃจํ”„๋Š” ๋ง ๊ทธ๋Œ€๋กœ ๋Š์ž„์—†์ด ๋ฐ˜๋ณต(loop)ํ•˜๋ฉด์„œ ๋‹ค์Œ ์„ธ ๊ฐ€์ง€๋ฅผ ํ™•์ธํ•˜๊ณ  ์‹คํ–‰ํ•ด์š”.

  1. ์ฝœ ์Šคํƒ์ด ๋น„์–ด์žˆ๋Š”์ง€ ํ™•์ธํ•ด์š”. (ํ˜„์žฌ ์‹คํ–‰ ์ค‘์ธ JavaScript ์ฝ”๋“œ๊ฐ€ ์—†๋Š”์ง€)
  2. ๋งˆ์ดํฌ๋กœํƒœ์Šคํฌ ํ๊ฐ€ ๋น„์–ด์žˆ์ง€ ์•Š๋‹ค๋ฉด, ๋งˆ์ดํฌ๋กœํƒœ์Šคํฌ ํ์˜ ๋ชจ๋“  ์ฝœ๋ฐฑ์„ ์ฝœ ์Šคํƒ์œผ๋กœ ์˜ฎ๊ฒจ ์‹คํ–‰ํ•ด์š”.
  3. ๋งˆ์ดํฌ๋กœํƒœ์Šคํฌ ํ๊ฐ€ ๋น„์–ด์žˆ๋‹ค๋ฉด, ํƒœ์Šคํฌ ํ์—์„œ ๊ฐ€์žฅ ์˜ค๋ž˜๋œ(FIFO) ํ•˜๋‚˜์˜ ์ฝœ๋ฐฑ์„ ์ฝœ ์Šคํƒ์œผ๋กœ ์˜ฎ๊ฒจ ์‹คํ–‰ํ•ด์š”.
  4. ์ด ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•ด์š”.
๊ฒฝ๊ณ 

๋งˆ์ดํฌ๋กœํƒœ์Šคํฌ ํ์˜ ์ฝœ๋ฐฑ์ด ๋˜ ๋‹ค๋ฅธ ๋งˆ์ดํฌ๋กœํƒœ์Šคํฌ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค๋ฉด, ์ด ์ƒˆ๋กœ์šด ๋งˆ์ดํฌ๋กœํƒœ์Šคํฌ๋„ ํ˜„์žฌ์˜ ์ด๋ฒคํŠธ ๋ฃจํ”„ ํ‹ฑ(tick) ๋‚ด์—์„œ ์ฒ˜๋ฆฌ๋ผ์š”. ์ด ๋•Œ๋ฌธ์— ๋ฌดํ•œ ๋ฃจํ”„์— ๋น ์ง€๋ฉด UI ๋ Œ๋”๋ง์ด๋‚˜ ๋‹ค๋ฅธ ํƒœ์Šคํฌ ํ ์ž‘์—…์ด ์˜์›ํžˆ ์‹คํ–‰๋˜์ง€ ์•Š์„ ์ˆ˜๋„ ์žˆ์œผ๋‹ˆ ์ฃผ์˜ํ•ด์•ผ ํ•ด์š”.

๐Ÿงช ์˜ˆ์‹œ๋กœ ์ดํ•ดํ•˜๋Š” ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ

์ด์ œ ์‹ค์ œ ์ฝ”๋“œ๋ฅผ ํ†ตํ•ด ์ด๋ฒคํŠธ ๋ฃจํ”„์˜ ๋™์ž‘ ๋ฐฉ์‹์„ ๋” ์ž์„ธํžˆ ์•Œ์•„๋ณผ๊ฒŒ์š”.

0๏ธโƒฃ setTimeout๊ณผ Promise์˜ ์‹คํ–‰ ์ˆœ์„œ

์•„๊นŒ ์œ„์—์„œ ๋ณด์•˜๋˜ ์˜ˆ์‹œ๋ฅผ ๋‹ค์‹œ ํ•œ๋ฒˆ ์‚ดํŽด๋ณผ๊ฒŒ์š”.

console.log('1. ๋™๊ธฐ ์ฝ”๋“œ ์‹œ์ž‘'); // โ‘  setTimeout(() => { console.log('4. setTimeout ์ฝœ๋ฐฑ (๋งคํฌ๋กœํƒœ์Šคํฌ)'); // โ‘ฃ }, 0); Promise.resolve().then(() => { console.log('3. Promise ์ฝœ๋ฐฑ (๋งˆ์ดํฌ๋กœํƒœ์Šคํฌ)'); // โ‘ข }); console.log('2. ๋™๊ธฐ ์ฝ”๋“œ ๋'); // โ‘ก

์ด ์ฝ”๋“œ์˜ ์‹คํ–‰ ํ๋ฆ„์€ ๋‹ค์Œ๊ณผ ๊ฐ™์•„์š”.

  1. console.log('1. ๋™๊ธฐ ์ฝ”๋“œ ์‹œ์ž‘'); ์‹คํ–‰ ํ›„ ์ฝœ ์Šคํƒ์—์„œ ์ œ๊ฑฐ๋ผ์š”. (์ถœ๋ ฅ: 1. ๋™๊ธฐ ์ฝ”๋“œ ์‹œ์ž‘)
  2. setTimeout ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋˜๋ฉด, ํƒ€์ด๋จธ ์„ค์ • ์ž‘์—…์ด ์›น API๋กœ ๋„˜์–ด๊ฐ€์š”. ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋Š” 0ms ํ›„์— ํƒœ์Šคํฌ ํ์— ๋“ค์–ด๊ฐˆ ์ค€๋น„๋ฅผ ํ•ด์š”.
  3. Promise.resolve().then()์ด ํ˜ธ์ถœ๋˜๋ฉด, Promise๋Š” ์ฆ‰์‹œ ํ•ด๊ฒฐ(resolved)๋˜๊ณ  then ๋‚ด๋ถ€์˜ ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋Š” ๋งˆ์ดํฌ๋กœํƒœ์Šคํฌ ํ๋กœ ๋“ค์–ด๊ฐ€์š”.
  4. console.log('2. ๋™๊ธฐ ์ฝ”๋“œ ๋'); ์‹คํ–‰ ํ›„ ์ฝœ ์Šคํƒ์—์„œ ์ œ๊ฑฐ๋ผ์š”. (์ถœ๋ ฅ: 2. ๋™๊ธฐ ์ฝ”๋“œ ๋)
  5. ์ด ์‹œ์ ์—์„œ ์ฝœ ์Šคํƒ์ด ๋น„์—ˆ์–ด์š”. ์ด๋ฒคํŠธ ๋ฃจํ”„๊ฐ€ ์ž‘๋™ํ•ด์š”.
  6. ์ด๋ฒคํŠธ ๋ฃจํ”„๋Š” ๋จผ์ € ๋งˆ์ดํฌ๋กœํƒœ์Šคํฌ ํ๋ฅผ ํ™•์ธํ•˜๊ณ , Promise ์ฝœ๋ฐฑ์„ ๋ฐœ๊ฒฌํ•ด์š”. ์ด ์ฝœ๋ฐฑ์„ ์ฝœ ์Šคํƒ์œผ๋กœ ์˜ฎ๊ฒจ ์‹คํ–‰ํ•ด์š”. (์ถœ๋ ฅ: 3. Promise ์ฝœ๋ฐฑ (๋งˆ์ดํฌ๋กœํƒœ์Šคํฌ))
  7. Promise ์ฝœ๋ฐฑ์ด ์‹คํ–‰ ์™„๋ฃŒ๋˜์–ด ์ฝœ ์Šคํƒ์—์„œ ์ œ๊ฑฐ๋ผ์š”.
  8. ๋งˆ์ดํฌ๋กœํƒœ์Šคํฌ ํ๊ฐ€ ๋น„์—ˆ์–ด์š”. ์ด๋ฒคํŠธ ๋ฃจํ”„๋Š” ์ด์ œ ํƒœ์Šคํฌ ํ๋ฅผ ํ™•์ธํ•˜๊ณ , setTimeout ์ฝœ๋ฐฑ์„ ๋ฐœ๊ฒฌํ•ด์š”. ์ด ์ฝœ๋ฐฑ์„ ์ฝœ ์Šคํƒ์œผ๋กœ ์˜ฎ๊ฒจ ์‹คํ–‰ํ•ด์š”. (์ถœ๋ ฅ: 4. setTimeout ์ฝœ๋ฐฑ (๋งคํฌ๋กœํƒœ์Šคํฌ))
  9. setTimeout ์ฝœ๋ฐฑ์ด ์‹คํ–‰ ์™„๋ฃŒ๋˜์–ด ์ฝœ ์Šคํƒ์—์„œ ์ œ๊ฑฐ๋ผ์š”.
  10. ์ฝœ ์Šคํƒ, ๋งˆ์ดํฌ๋กœํƒœ์Šคํฌ ํ, ํƒœ์Šคํฌ ํ ๋ชจ๋‘ ๋น„์–ด์žˆ์œผ๋ฏ€๋กœ ๋ชจ๋“  ์ž‘์—…์ด ์ข…๋ฃŒ๋ผ์š”.
์„ฑ๊ณต

๋”ฐ๋ผ์„œ ์˜ˆ์ƒ ์ถœ๋ ฅ์€ 1. ๋™๊ธฐ ์ฝ”๋“œ ์‹œ์ž‘, 2. ๋™๊ธฐ ์ฝ”๋“œ ๋, 3. Promise ์ฝœ๋ฐฑ (๋งˆ์ดํฌ๋กœํƒœ์Šคํฌ), 4. setTimeout ์ฝœ๋ฐฑ (๋งคํฌ๋กœํƒœ์Šคํฌ) ์ˆœ์„œ๊ฐ€ ๋ผ์š”.

1๏ธโƒฃ ๋ณต์žกํ•œ ๋น„๋™๊ธฐ ์‹œ๋‚˜๋ฆฌ์˜ค ๋ถ„์„

์ด๋ฒˆ์—๋Š” async/await๊ณผ ํ•จ๊ป˜ ์กฐ๊ธˆ ๋” ๋ณต์žกํ•œ ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ์‚ดํŽด๋ณผ๊ฒŒ์š”.

console.log('A'); // โ‘  async function asyncFunc() { console.log('B'); // โ‘ก await Promise.resolve(); console.log('C'); // โ‘ค (await ์ดํ›„๋Š” ๋งˆ์ดํฌ๋กœํƒœ์Šคํฌ) } asyncFunc(); setTimeout(() => { console.log('D'); // โ‘ฅ (๋งคํฌ๋กœํƒœ์Šคํฌ) }, 0); Promise.resolve().then(() => { console.log('E'); // โ‘ฃ (๋งˆ์ดํฌ๋กœํƒœ์Šคํฌ) }); console.log('F'); // โ‘ข

์ด ์ฝ”๋“œ์˜ ์‹คํ–‰ ํ๋ฆ„์„ ๋‹จ๊ณ„๋ณ„๋กœ ๋ถ„์„ํ•ด ๋ณผ๊นŒ์š”?

  1. console.log('A'); ์‹คํ–‰. (์ถœ๋ ฅ: A)
  2. asyncFunc() ํ˜ธ์ถœ. ํ•จ์ˆ˜ ๋‚ด๋ถ€๋กœ ์ง„์ž…ํ•ด์š”.
  3. console.log('B'); ์‹คํ–‰. (์ถœ๋ ฅ: B)
  4. await Promise.resolve();๋ฅผ ๋งŒ๋‚˜๋ฉด, asyncFunc์˜ ๋‚˜๋จธ์ง€ ๋ถ€๋ถ„(console.log('C');)์€ ๋งˆ์ดํฌ๋กœํƒœ์Šคํฌ ํ๋กœ ๋ณด๋‚ด์ง€๊ณ , asyncFunc๋Š” ์ผ์‹œ ์ค‘๋‹จ๋ผ์š”.
  5. setTimeout ํ•จ์ˆ˜ ํ˜ธ์ถœ. ์ฝœ๋ฐฑ์€ ์›น API๋กœ ๋„˜์–ด๊ฐ€๊ณ , 0ms ํ›„์— ํƒœ์Šคํฌ ํ๋กœ ๋“ค์–ด๊ฐˆ ์ค€๋น„๋ฅผ ํ•ด์š”.
  6. Promise.resolve().then() ํ˜ธ์ถœ. ์ฝœ๋ฐฑ์€ ๋งˆ์ดํฌ๋กœํƒœ์Šคํฌ ํ๋กœ ๋“ค์–ด๊ฐ€์š”.
  7. console.log('F'); ์‹คํ–‰. (์ถœ๋ ฅ: F)
  8. ์ฝœ ์Šคํƒ์ด ๋น„์—ˆ์–ด์š”. ์ด๋ฒคํŠธ ๋ฃจํ”„๊ฐ€ ์ž‘๋™ํ•ด์š”.
  9. ์ด๋ฒคํŠธ ๋ฃจํ”„๋Š” ๋งˆ์ดํฌ๋กœํƒœ์Šคํฌ ํ๋ฅผ ํ™•์ธํ•ด์š”. ๋‘ ๊ฐœ์˜ ๋งˆ์ดํฌ๋กœํƒœ์Šคํฌ๊ฐ€ ์žˆ์–ด์š” (asyncFunc์˜ console.log('C') ๋ถ€๋ถ„๊ณผ Promise.resolve().then() ์ฝœ๋ฐฑ).
  10. ๋จผ์ € asyncFunc์˜ ๋‹ค์Œ ๋ถ€๋ถ„์ธ console.log('C');๊ฐ€ ์ฝœ ์Šคํƒ์œผ๋กœ ์˜ฎ๊ฒจ์ ธ ์‹คํ–‰๋ผ์š”. (์ถœ๋ ฅ: C)
  11. ๋‹ค์Œ์œผ๋กœ Promise.resolve().then() ์ฝœ๋ฐฑ์ธ console.log('E');๊ฐ€ ์ฝœ ์Šคํƒ์œผ๋กœ ์˜ฎ๊ฒจ์ ธ ์‹คํ–‰๋ผ์š”. (์ถœ๋ ฅ: E)
  12. ๋งˆ์ดํฌ๋กœํƒœ์Šคํฌ ํ๊ฐ€ ๋น„์—ˆ์–ด์š”.
  13. ์ด๋ฒคํŠธ ๋ฃจํ”„๋Š” ํƒœ์Šคํฌ ํ๋ฅผ ํ™•์ธํ•ด์š”. setTimeout ์ฝœ๋ฐฑ์ธ console.log('D');๊ฐ€ ์žˆ์–ด์š”. ์ด๋ฅผ ์ฝœ ์Šคํƒ์œผ๋กœ ์˜ฎ๊ฒจ ์‹คํ–‰๋ผ์š”. (์ถœ๋ ฅ: D)
  14. ๋ชจ๋“  ์ž‘์—…์ด ์ข…๋ฃŒ๋ผ์š”.
์„ฑ๊ณต

์ตœ์ข… ์ถœ๋ ฅ ์ˆœ์„œ๋Š” A, B, F, C, E, D๊ฐ€ ๋  ๊ฑฐ์˜ˆ์š”.

๐Ÿ“ ์‹ค๋ฌด ์ ์šฉ ํŒ

์ด๋ฒคํŠธ ๋ฃจํ”„๋ฅผ ์ดํ•ดํ•˜๋Š” ๊ฒƒ์€ ๋‹จ์ˆœํžˆ ๊ฐœ๋…์„ ์•„๋Š” ๊ฒƒ์„ ๋„˜์–ด, ์‹ค์ œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์— ํฐ ๋„์›€์ด ๋ผ์š”.

0๏ธโƒฃ ๋น„๋™๊ธฐ ์ฝ”๋“œ ๋””๋ฒ„๊น… ์ „๋žต

๋ณต์žกํ•œ ๋น„๋™๊ธฐ ์ฝ”๋“œ์˜ ์‹คํ–‰ ํ๋ฆ„์„ ํŒŒ์•…ํ•˜๊ธฐ ์–ด๋ ค์šธ ๋•Œ๋Š” ๊ฐœ๋ฐœ์ž ๋„๊ตฌ์˜ ์„ฑ๋Šฅ ํƒญ์ด๋‚˜ ์ฝœ ์Šคํƒ ์‹œ๊ฐํ™” ๊ธฐ๋Šฅ์„ ํ™œ์šฉํ•ด ๋ณด์„ธ์š”.
console.log๋ฅผ ์ ์ ˆํžˆ ๋ฐฐ์น˜ํ•˜์—ฌ ๊ฐ ์ฝœ๋ฐฑ์ด ์–ธ์ œ ์‹คํ–‰๋˜๋Š”์ง€ ์ถ”์ ํ•˜๋Š” ๊ฒƒ๋„ ์ข‹์€ ๋ฐฉ๋ฒ•์ด์—์š”. ํŠนํžˆ ๋งˆ์ดํฌ๋กœํƒœ์Šคํฌ์™€ ๋งคํฌ๋กœํƒœ์Šคํฌ์˜ ์šฐ์„ ์ˆœ์œ„๋ฅผ ์—ผ๋‘์— ๋‘๊ณ  ๋กœ๊ทธ๋ฅผ ์ฐ์–ด๋ณด๋ฉด ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ๋™์ž‘์˜ ์›์ธ์„ ์‰ฝ๊ฒŒ ์ฐพ์„ ์ˆ˜ ์žˆ์–ด์š”.

console.log('Sync 1'); setTimeout(() => { console.log('Timeout 1 (Macrotask)'); }, 0); Promise.resolve().then(() => { console.log('Promise 1 (Microtask)'); }); setTimeout(() => { console.log('Timeout 2 (Macrotask)'); }, 0); Promise.resolve().then(() => { console.log('Promise 2 (Microtask)'); }); console.log('Sync 2');

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

1๏ธโƒฃ ์„ฑ๋Šฅ ์ตœ์ ํ™”๋ฅผ ์œ„ํ•œ ์ด๋ฒคํŠธ ๋ฃจํ”„ ์ดํ•ด

์ด๋ฒคํŠธ ๋ฃจํ”„์˜ ๋™์ž‘ ์›๋ฆฌ๋ฅผ ์ดํ•ดํ•˜๋ฉด ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”ํ•˜๋Š” ๋ฐ ํฐ ๋„์›€์ด ๋ผ์š”.

  • UI ๋ธ”๋กœํ‚น ๋ฐฉ์ง€: ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๋Š” ๊ณ„์‚ฐ ์ž‘์—…์€ setTimeout์„ ์ด์šฉํ•ด ์ž‘์€ ๋‹จ์œ„๋กœ ์ชผ๊ฐœ๊ฑฐ๋‚˜, Web Workers๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฉ”์ธ ์Šค๋ ˆ๋“œ์™€ ๋ถ„๋ฆฌํ•˜๋ฉด UI๊ฐ€ ๋ฉˆ์ถ”๋Š” ํ˜„์ƒ์„ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ์–ด์š”.
  • ํšจ์œจ์ ์ธ ๋น„๋™๊ธฐ ํŒจํ„ด ์‚ฌ์šฉ: Promise์™€ async/await์€ ์ฝœ๋ฐฑ ์ง€์˜ฅ์„ ํ”ผํ•˜๊ณ  ์ฝ”๋“œ๋ฅผ ๋”์šฑ ๊ฐ€๋…์„ฑ ์žˆ๊ฒŒ ๋งŒ๋“ค์–ด ์ค„ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ, ๋งˆ์ดํฌ๋กœํƒœ์Šคํฌ ํ์˜ ์šฐ์„ ์ˆœ์œ„๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์ค‘์š”ํ•œ ์ž‘์—…์„ ๋น ๋ฅด๊ฒŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค˜์š”. ๋ถˆํ•„์š”ํ•œ setTimeout(..., 0) ์‚ฌ์šฉ์€ ์ž์ œํ•˜๊ณ , Promise๋‚˜ queueMicrotask๋ฅผ ํ™œ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋” ํšจ์œจ์ ์ผ ๋•Œ๊ฐ€ ๋งŽ์•„์š”.
  • ๋ Œ๋”๋ง ์ตœ์ ํ™”: ๋ธŒ๋ผ์šฐ์ €์˜ ๋ Œ๋”๋ง์€ ๋งคํฌ๋กœํƒœ์Šคํฌ์˜ ํ•œ ์ข…๋ฅ˜์˜ˆ์š”. ๋”ฐ๋ผ์„œ ๋ฌด๊ฑฐ์šด JavaScript ์ž‘์—…์ด ๋งˆ์ดํฌ๋กœํƒœ์Šคํฌ ํ์— ๋„ˆ๋ฌด ๋งŽ์ด ์Œ“์ด๋ฉด ๋ Œ๋”๋ง์ด ์ง€์—ฐ๋  ์ˆ˜ ์žˆ์–ด์š”. ์ค‘์š”ํ•œ UI ์—…๋ฐ์ดํŠธ๋Š” ๋‹ค์Œ ์ด๋ฒคํŠธ ๋ฃจํ”„ ํ‹ฑ์—์„œ ์ฒ˜๋ฆฌ๋˜๋„๋ก requestAnimationFrame์„ ํ™œ์šฉํ•˜๋Š” ๊ฒƒ๋„ ์ข‹์€ ์ „๋žต์ด์—์š”.

๐Ÿ“ ์ •๋ฆฌ

์˜ค๋Š˜์€ JavaScript์˜ ํ•ต์‹ฌ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ ๋ฉ”์ปค๋‹ˆ์ฆ˜์ธ ์ด๋ฒคํŠธ ๋ฃจํ”„์— ๋Œ€ํ•ด ์ž์„ธํžˆ ์•Œ์•„๋ณด์•˜์–ด์š”.
์ฝœ ์Šคํƒ, ์›น API, ํƒœ์Šคํฌ ํ, ๋งˆ์ดํฌ๋กœํƒœ์Šคํฌ ํ, ๊ทธ๋ฆฌ๊ณ  ์ด ๋ชจ๋“  ๊ฒƒ์„ ์กฐ์œจํ•˜๋Š” ์ด๋ฒคํŠธ ๋ฃจํ”„์˜ ์—ญํ• ์„ ์ดํ•ดํ•˜๋Š” ๊ฒƒ์€ ๊ฒฌ๊ณ ํ•˜๊ณ  ์„ฑ๋Šฅ ์ข‹์€ JavaScript ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋งŒ๋“œ๋Š” ๋ฐ ํ•„์ˆ˜์ ์ด์—์š”.

์ •๋ณด

ํ•ต์‹ฌ ์š”์•ฝ:

  1. JavaScript๋Š” ์‹ฑ๊ธ€ ์Šค๋ ˆ๋“œ ์–ธ์–ด์ด๋ฏ€๋กœ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๊ฐ€ ํ•„์ˆ˜์ ์ด์—์š”.
  2. ์ด๋ฒคํŠธ ๋ฃจํ”„๋Š” ์ฝœ ์Šคํƒ์ด ๋น„์—ˆ์„ ๋•Œ ๋งˆ์ดํฌ๋กœํƒœ์Šคํฌ ํ์˜ ์ฝœ๋ฐฑ์„ ๋จผ์ € ์ฒ˜๋ฆฌํ•˜๊ณ , ๊ทธ ๋‹ค์Œ ํƒœ์Šคํฌ ํ์˜ ์ฝœ๋ฐฑ์„ ์ฒ˜๋ฆฌํ•ด์š”.
  3. Promise ๊ด€๋ จ ์ฝœ๋ฐฑ์€ ๋งˆ์ดํฌ๋กœํƒœ์Šคํฌ ํ์—, setTimeout, setInterval ๊ด€๋ จ ์ฝœ๋ฐฑ์€ ํƒœ์Šคํฌ ํ์— ๋“ค์–ด๊ฐ€์š”.
  4. ์ด๋ฒคํŠธ ๋ฃจํ”„์˜ ๋™์ž‘ ๋ฐฉ์‹์„ ์ดํ•ดํ•˜๋ฉด ๋น„๋™๊ธฐ ์ฝ”๋“œ์˜ ์‹คํ–‰ ์ˆœ์„œ๋ฅผ ์ •ํ™•ํžˆ ์˜ˆ์ธกํ•˜๊ณ , ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”ํ•  ์ˆ˜ ์žˆ์–ด์š”.

์ด ํฌ์ŠคํŒ…์ด ์—ฌ๋Ÿฌ๋ถ„์ด JavaScript ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ์— ๋Œ€ํ•œ ์ดํ•ด๋ฅผ ํ•œ ๋‹จ๊ณ„ ๋” ๋†’์ด๋Š” ๋ฐ ๋„์›€์ด ๋˜์—ˆ๊ธฐ๋ฅผ ๋ฐ”๋ผ์š”.
๊ถ๊ธˆํ•œ ์ ์ด๋‚˜ ๋” ๋‹ค๋ฃจ์—ˆ์œผ๋ฉด ํ•˜๋Š” ์ฃผ์ œ๊ฐ€ ์žˆ๋‹ค๋ฉด ์–ธ์ œ๋“ ์ง€ ๋Œ“๊ธ€๋กœ ์•Œ๋ ค์ฃผ์„ธ์š”!

๐Ÿ“ฎ ์ฐธ๊ณ 

์—ฐ๊ด€๋œ ํฌ์ŠคํŠธ