Jieunny์˜ ๋ธ”๋กœ๊ทธ

[JS] JS์˜ ๋น„๋™๊ธฐ์  ์ฒ˜๋ฆฌ ๋ณธ๋ฌธ

Study/JavaScript

[JS] JS์˜ ๋น„๋™๊ธฐ์  ์ฒ˜๋ฆฌ

Jieunny 2022. 12. 30. 15:09

๐Ÿ“Œ ๊ธฐ์ˆ  ๋ฉด์ ‘ ์งˆ๋ฌธ์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๋‹ค๊ฐ€ ๋‚ด์šฉ์ด ๋งŽ์•„์„œ ๋”ฐ๋กœ ์ •๋ฆฌ
 

 ๐Ÿ“ฃ  ๋™๊ธฐ์  ์ฒ˜๋ฆฌ & ๋น„๋™๊ธฐ์  ์ฒ˜๋ฆฌ

โœ”๏ธ ๋™๊ธฐ์  ์ฒ˜๋ฆฌ : ์„œ๋ฒ„์—์„œ ์š”์ฒญ์„ ๋ณด๋ƒˆ์„ ๋•Œ ์‘๋‹ต์ด ๋Œ์•„์™€์•ผ ๋‹ค์Œ ๋™์ž‘์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.
โœ”๏ธ ๋น„๋™๊ธฐ์  ์ฒ˜๋ฆฌ : ์„œ๋ฒ„์—์„œ ์š”์ฒญ์„ ๋ณด๋ƒˆ์„ ๋•Œ ์‘๋‹ต ์ƒํƒœ์™€ ์ƒ๊ด€์—†์ด ๋‹ค์Œ ๋™์ž‘์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.


๐Ÿ“ฃ  ์ž๋ฐ” ์Šคํฌ๋ฆฝํŠธ๋Š” ์–ด๋–ค ์–ธ์–ด์ธ๊ฐ€?

โœ”๏ธ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ์‹ฑ๊ธ€ ์Šค๋ ˆ๋“œ ์–ธ์–ด(๋™๊ธฐ์  ์ผ ์ฒ˜๋ฆฌ)
โœ”๏ธ ํ•˜๋‚˜์˜ ํž™ ์˜์—ญ๊ณผ ํ•˜๋‚˜์˜ ์ฝœ ์Šคํƒ์„ ๊ฐ€์ง„๋‹ค. (ํ•œ๋ฒˆ์— ํ•˜๋‚˜์˜ ์ผ ๋ฐ–์— ๋ชปํ•œ๋‹ค๋Š” ์˜๋ฏธ)

function SignThreadTest() {
  console.log(1);
  for( let i=0; i<10000; i++ ) {
    console.log('์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ์‹ฑ๊ธ€ ์Šค๋ ˆ๋“œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์ด๋‹ค.');
  }
  console.log(2);
}
// '์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ์‹ฑ๊ธ€ ์Šค๋ ˆ๋“œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์ด๋‹ค.'๊ฐ€ 10,000๋ฒˆ ์‹คํ–‰์ด ์™„๋ฃŒ ๋  ๋•Œ๊นŒ์ง€
// ์ฝ˜์†” ์ฐฝ์— '2' ๊ฐ€ ์ฐํžˆ๋Š” ๊ฒƒ์„ ๊ธฐ๋‹ค๋ ค์•ผํ•œ๋‹ค.
SignThreadTest();

โž• ์ฝœ ์Šคํƒ์ด๋ž€?

๋”๋ณด๊ธฐ

โžฐ ์ฝœ ์Šคํƒ์€ ์ฝ”๋“œ๋ฅผ ์ฝ๊ณ  ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰๋˜๋Š” ์ˆœ์„œ๋ฅผ ๊ธฐ์–ตํ•˜๊ณ  ์žˆ๋‹ค.

โžฐ ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•˜๋ ค๋ฉด ํ•จ์ˆ˜๋ฅผ ์Šคํƒ ๊ฐ€์žฅ ์œ„์— ๋„ฃ๊ณ , ํ•จ์ˆ˜์—์„œ ๋ฆฌํ„ด์ด ์ผ์–ด๋‚˜๋ฉด ์Šคํƒ์˜ ๊ฐ€์žฅ ์œ„์ชฝ์œผ๋กœ ํ•จ์ˆ˜๋ฅผ ๊บผ๋‚ธ๋‹ค.

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

๋”๋ณด๊ธฐ

โžฐ ๋Š๋ฆฌ๊ฒŒ ๋™์ž‘๋˜๋Š” ์ฝ”๋“œ

โžฐ ๋Š๋ฆฐ ๋™์ž‘์ด ์Šคํƒ์— ๋‚จ์•„ ์žˆ๋Š” ๊ฒƒ

โžฐ ์›น ๋ธŒ๋ผ์šฐ์ €์—์„œ ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๋˜๋Š”๋ฐ ์ฝ”๋“œ๊ฐ€ ์ข…๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ์œ ์ €๊ฐ€ ํด๋ฆญ์„ ํ•ด๋„ ์–ด๋– ํ•œ ๋ฐ˜์‘๋„ ํ•˜์ง€ ์•Š๋Š” ์ƒํƒœ

โžฐ ์ฝœ ์Šคํƒ์ด ๋ฉˆ์ถ˜ ์ƒํƒœ


๐Ÿ“ฃ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๋น„๋™๊ธฐ์™€ ๋…ผ ๋ธ”๋กœํ‚น

๐Ÿ‘‰ ๋™๊ธฐ์  ์ฒ˜๋ฆฌ์˜ ๋ฌธ์ œ์  ๋•Œ๋ฌธ์— ๋ธŒ๋ผ์šฐ์ €๋Š” AJAX ์š”์ฒญ์„ ๋น„๋™๊ธฐ์ ์œผ๋กœ ์‹คํ–‰ํ•œ๋‹ค.
โžฐ ๋ฌธ์ œ์  : ํšจ์œจ์ ์ด์ง€ ๋ชปํ•จ
โžฐ ๋ธŒ๋ผ์šฐ์ € : ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์‹คํ–‰๋˜๋Š” ํ™˜๊ฒฝ(๋Ÿฐํƒ€์ž„)
 
โž• AJAX ๋ž€?

๋”๋ณด๊ธฐ

โžฐ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ด์šฉํ•ด ์„œ๋ฒ„์— ๋ฐ์ดํ„ฐ๋ฅผ ๋น„๋™๊ธฐ ๋ฐฉ์‹์œผ๋กœ ์š”์ฒญํ•˜๋Š” ๊ฒƒ

โžฐ ์ „์ฒด ํŽ˜์ด์ง€๋ฅผ ์ƒˆ๋กœ๊ณ ์นจ ํ•˜์ง€ ์•Š์•„๋„ ํŽ˜์ด์ง€ ์ผ๋ถ€๋งŒ์„ ์œ„ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋กœ๋“œํ•˜๋Š” ๋ฐฉ๋ฒ•

 
โœ”๏ธ ์›น ๋ธŒ๋ผ์šฐ์ €์˜ Web APIs๋Š” ๋น„๋™๊ธฐ์ ๋กœ ์ฒ˜๋ฆฌํ•œ๋‹ค.
โžฐ ์›น ๋ธŒ๋ผ์šฐ์ €์˜ Web APIs์—๋Š” setTimeout, DOM, AJAX๊ฐ€ ์žˆ๋‹ค.
โžฐ + ์ด๋ฒคํŠธ ๋ฃจํ”„์™€ ์ฝœ๋ฐฑ ํ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.
โžฐ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ž์ฒด๋Š” ๋น„๋™๊ธฐ์ ์œผ๋กœ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์—†์–ด์„œ ๋Ÿฐํƒ€์ž„ ์•ˆ์— ์ง€์›ํ•˜๋Š” API๋กœ ๋น„๋™๊ธฐ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.
 
โž• ๋Ÿฐํƒ€์ž„์ด๋ž€?

๋”๋ณด๊ธฐ

โžฐ ๋Ÿฐํƒ€์ž„ ํ™˜๊ฒฝ์€ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๊ฐ€ ๊ตฌ๋™๋˜๋Š” ํ™˜๊ฒฝ์ด๋‹ค.

โžฐ Js๊ฐ€ ๋ธŒ๋ผ์šฐ์ €์—์„œ ์‹คํ–‰๋œ๋‹ค๋ฉด ๋Ÿฐํƒ€์ž„ ํ™˜๊ฒฝ์€ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ๋˜๊ณ , Node.js์—์„œ ์‹คํ–‰๋œ๋‹ค๋ฉด Node.js๊ฐ€ ๋œ๋‹ค.

 
โž• Web API ๋ž€?

๋”๋ณด๊ธฐ

โžฐ ์›น ์„œ๋ฒ„ ๋˜๋Š” ์›น ๋ธŒ๋ผ์šฐ์ €๋ฅผ ์œ„ํ•œ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ธํ„ฐํŽ˜์ด์Šค ์ด๋‹ค.

โžฐ HTTP ์„œ๋น„์Šค์ด๊ณ , ๋‹ค์–‘ํ•œ ํด๋ผ์ด์–ธํŠธ์—์„œ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ์„ค๊ณ„๋˜์–ด ์žˆ๋‹ค.

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

๋”๋ณด๊ธฐ

โžฐ ๋‹ค๋ฅธ ํ•จ์ˆ˜์— ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋„˜๊ฒจ์ค€ ํ•จ์ˆ˜์ด๋‹ค.

โžฐ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋„˜๊ฒจ๋ฐ›์€ ํ•จ์ˆ˜๋Š” ์ผ๋‹จ ๋„˜๊ฒจ๋ฐ›๊ณ , ๋•Œ๊ฐ€ ๋˜๋ฉด ๋‚˜์ค‘์— ํ˜ธ์ถœ(called back)ํ•œ๋‹ค.

โžฐ ์ฆ‰์‹œ ์‹คํ–‰ํ•  ์ˆ˜๋„ ์žˆ๋‹ค.


๐Ÿ“ฃ  ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋Ÿฐํƒ€์ž„์—์„œ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ ๋ฐฉ๋ฒ•

๐Ÿ‘‰ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋Ÿฐํƒ€์ž„์—์„œ ์ œ๊ณตํ•˜๋Š” ๋น„๋™๊ธฐ ์ฝœ๋ฐฑ์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์€ ์ด๋ฒคํŠธ ๋ฃจํ”„์ด๋‹ค.
 
โœ”๏ธ ์ด๋ฒคํŠธ ๋ฃจํ”„์™€ ๋น„๋™๊ธฐ ํ•จ์ˆ˜ ์‹คํ–‰
โžฐ ์ฝœ ์Šคํƒ๊ณผ ์ฝœ๋ฐฑ ํ๋ฅผ ์ฃผ์‹œํ•˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.
โžฐ ์ฝœ ์Šคํƒ์ด ๋น„์–ด์žˆ์œผ๋ฉด ํ์˜ ์ฒซ ๋ฒˆ์งธ ์ฝœ๋ฐฑ์„ ์Šคํƒ์— ์Œ“์•„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค.
โžฐ ์ด๋ฒคํŠธ ๋ฃจํ”„๋Š” ์ฝœ ์Šคํƒ์ด ๋น„์–ด์งˆ ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฐ ํ›„ ์ฝœ๋ฐฑ ํ์— ์žˆ๋Š” ์ฝœ๋ฐฑ์„ ์ฝœ ์Šคํƒ์— ๋„ฃ์–ด ์ฃผ๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.
โžฐ Web API์˜ ์ฝœ๋ฐฑ์ด ์™„๋ฃŒ๋˜์—ˆ๋‹ค๋ฉด ์ฝœ๋ฐฑ์€ ํ์— ์Œ“์ด๊ฒŒ ๋˜๊ณ , ์ด๋ฒคํŠธ ๋ฃจํ”„์— ์˜ํ•ด์„œ ์‹คํ–‰๋œ๋‹ค.
โžฐ ์ด ๊ณผ์ •์€ ๋น„๋™๊ธฐ ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋˜๋Š” ๋ฐฉ์‹์ด๋‹ค.
 
โž• ์ฝœ๋ฐฑ ํ๋ž€?

๋”๋ณด๊ธฐ

โžฐ ์ฝœ๋ฐฑ ํ๋Š” Web API ๊ฒฐ๊ณผ๊ฐ’์„ ์Œ“์•„๋‘๋Š” ํ์ด๋‹ค.

โžฐ ์˜ˆ๋ฅผ ๋“ค์–ด, ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ setTImeout(cd, 5000)์„ ํ˜ธ์ถœํ•˜๋ฉด Web API๋Š” ํƒ€์ด๋จธ๋ฅผ ๋™์ž‘์‹œ์ผœ 5์ดˆ ํ›„์— ์ฝœ๋ฐฑ ํ์— cd๋ฅผ ์Œ“๋Š”๋‹ค.

 
โž• ์ด๋ฒคํŠธ ๋ฃจํ”„๋ฅผ ๋ง‰์ง€ ๋ง๋ผ๋Š” ์˜๋ฏธ(๋ธ”๋กœํ‚น)

๋”๋ณด๊ธฐ

โžฐ ์Šคํƒ์— ํ•„์š”์—†์ด ๋Š๋ฆฐ ์ฝ”๋“œ๋ฅผ ์Œ“์•„์„œ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ํ•  ์ผ์„ ๋ชปํ•˜๊ฒŒ ๋งŒ๋“ค์ง€ ๋ง๋ผ๋Š” ๋œป์ด๋‹ค.


โœ๏ธ  ์ •๋ฆฌ

โœ”๏ธ JS ์—”์ง„์€ ๋น„๋™๊ธฐ ํ•จ์ˆ˜๊ฐ€ ์—†๋‹ค. (JS๋Š” ์‹ฑ๊ธ€์Šค๋ ˆ๋“œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์ด๋ฏ€๋กœ)
โœ”๏ธ JS ๋Ÿฐํƒ€์ž„(๋ธŒ๋ผ์šฐ์ €, Node.js)์—์„œ ์ œ๊ณตํ•˜๋Š” API๋ฅผ ์ด์šฉํ•˜๋Š” ๊ฒƒ์ด๋‹ค.
โœ”๏ธ JS๋Š” ์ฝœ ์Šคํƒ์ด ํ•˜๋‚˜๋ฐ–์— ์—†๋‹ค.
โœ”๏ธ ๋‹ค์‹œ ๋งํ•˜๋ฉด, ๋น„๋™๊ธฐ ํ•จ์ˆ˜๋ฅผ ์ œ๊ณตํ•˜๊ณ  ๋น„๋™๊ธฐ ํ•จ์ˆ˜๊ฐ€ ์ฝœ ์Šคํƒ์— ์Œ“์ด๋„๋ก ๋„์™€์ฃผ๋Š” ๊ฒƒ์€ JS ๋Ÿฐํƒ€์ž„์—์„œ ์ œ๊ณต๋˜๋Š” ๊ฒƒ์ด๋‹ค.
 


๐Ÿ“ฃ  ๋น„๋™๊ธฐ์˜ ์ฃผ์š” ์‚ฌ๋ก€

1๏ธโƒฃ DOM Element์˜ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ
โžฐ ๋งˆ์šฐ์Šค, ํ‚ค๋ณด๋“œ ์ž…๋ ฅ (click, keydown ๋“ฑ)
โžฐ ํŽ˜์ด์ง€ ๋กœ๋”ฉ 
 
2๏ธโƒฃ ํƒ€์ด๋จธ
โžฐ ํƒ€์ด๋จธ API (setTImeout ๋“ฑ)
โžฐ ์• ๋‹ˆ๋ฉ”์ด์…˜ API
 
3๏ธโƒฃ ์„œ๋ฒ„์— ์ž์› ์š”์ฒญ ๋ฐ ์‘๋‹ต
โžฐ Fetch API
โžฐ AJAX


๐Ÿ“ฃ  ๋น„๋™๊ธฐ ์ œ์–ดํ•˜๋Š” ๋ฐฉ๋ฒ•

1๏ธโƒฃ ์ฝœ๋ฐฑ
โžฐ ์ฝœ๋ฐฑ์„ ์ด์šฉํ•œ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๋Š” ์ฝœ๋ฐฑ ์ง€์˜ฅ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.
 
โž• ์ฝœ๋ฐฑ์ง€์˜ฅ

๋”๋ณด๊ธฐ

โžฐ ์ฝœ๋ฐฑ ์•ˆ์— ํ•จ์ˆ˜ ํ˜ธ์ถœ์ด ๋ฐ˜๋ณต๋˜์–ด ์ฝ”๋“œ์˜ ๋“ค์—ฌ์“ฐ๊ธฐ ์ˆ˜์ค€์ด ๊ฐ๋‹นํ•˜๊ธฐ ํž˜๋“ค ์ •๋„๋กœ ๊นŠ์–ด์ง€๋Š” ํ˜„์ƒ

 
๐Ÿšจ ์ฝœ๋ฐฑ์ง€์˜ฅ ํƒˆ์ถœ ๋น„๋™๊ธฐ ์ œ์–ด ๋ฐฉ๋ฒ•
 
1๏ธโƒฃ Promise 
โžฐ new ์—ฐ์‚ฐ์ž์™€ ํ•จ๊ป˜ ํ˜ธ์ถœํ•˜๊ณ  ์ธ์ž๋กœ ์ฝœ๋ฐฑ์„ ๋ฐ›๋Š”๋‹ค.
โžฐ Promise๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
โžฐ Promise๋Š” ํ˜ธ์ถœ๋  ๋•Œ ๋ฐ”๋กœ ์‹คํ–‰๋˜์ง€๋งŒ, ๊ทธ ์•ˆ์— ์ฝœ๋ฐฑ์€ resolve, reject ๋‘˜ ์ค‘ ํ•˜๋‚˜๊ฐ€ ํ˜ธ์ถœ ๋˜๊ธฐ ์ „์— then ๋˜๋Š” catch๋กœ ๋„˜์–ด๊ฐ€์ง€ ์•Š๋Š”๋‹ค.
โžฐ resolve, reject ๋กœ ์„ฑ๊ณต ํ˜น์€ ์‹คํŒจ๋กœ ๊ฒฐ๊ณผ ๊ฐ’์„ ๋‚˜ํƒ€๋‚ด์–ด ๋‹ค์Œ ์ž‘์—…์„ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๋‹ค. (๋น„๋™๊ธฐ ์ œ์–ด๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค)
โžฐ then์œผ๋กœ ์ž‘์—…์„ ์ด์–ด๊ฐ€๊ธฐ ์œ„ํ•ด์„œ๋Š” resolve() ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค.
โžฐ ์ž‘์—…์„ ์ค‘๋‹จ ๋˜๋Š” err์ฒ˜๋ฆฌ๋ฅผ ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” reject() ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค.

// Promise ๊ธฐ๋ณธ ํŒจํ„ด 1 : ์„ฑ๊ณต์ธ ๊ฒฝ์šฐ
function fn() {
  new Promise((resolve, reject) => {
    console.log('ํ•˜๋‚˜');
    // ์‹คํŒจ์ธ ๊ฒฝ์šฐ reject() ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ๋œ๋‹ค.
    // ๊ทธ๋Ÿฌ๋ฉด then()์„ ๊ฑด๋„ˆ๋›ฐ๊ณ  catch()๊ฐ€ ์‹คํ–‰๋œ๋‹ค.
    resolve(); 
  })
  .then(() => {
    return new Promise((resolve, reject) => {
      setTimeout(() => {
        console.log('๋‘˜');
        resolve();
      }, 0);
    });
  })
  .then(() => {
    console.log('์…‹');
  })
  .catch((err) => {
    console.log('err ', err);
  });
}

 
1๏ธโƒฃ Promise + async/await
โžฐ Promise๋กœ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๋ฅผ ํ•˜๋”๋ผ๋„ then์•ˆ์— promise...then์•ˆ์— promise ์ฒ˜๋Ÿผ ์ฝœ๋ฐฑ์ง€์˜ฅ ํ˜„์ƒ์ด ๊ฐ€๋Šฅํ•จ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.
โžฐ ๋น„๋™๊ธฐ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ณ ์ž ํ•˜๋Š” ํ•จ์ˆ˜ ์•ž์— async๋ฅผ ํ‘œ๊ธฐํ•˜๊ณ , ํ•จ์ˆ˜ ๋‚ด๋ถ€์—์„œ ์‹ค์งˆ์ ์ธ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๊ฐ€ ํ•„์š”ํ•œ ์œ„์น˜๋งˆ๋‹ค await๋ฅผ ํ‘œ๊ธฐํ•˜๋Š” ๊ฒƒ๋งŒ์œผ๋กœ ๋’ค์˜ ๋‚ด์šฉ์„ Promise๋กœ ์ž๋™ ์ „ํ™˜ํ•˜๊ณ  ํ•ด๋‹น ๋‚ด์šฉ์ด resolve๋œ ์ดํ›„์—์•ผ ๋‹ค์Œ์œผ๋กœ ์ง„ํ–‰๋œ๋‹ค.