๐Ÿ‘จ๐Ÿปโ€๐Ÿš’Asynchronous JavaScript(5) - Office Hour Review

โฐ๋ฆฌ๋ทฐ ์‹œ๊ฐ„

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ์‹ฑ๊ธ€ ์“ฐ๋ ˆ๋“œ ์ธ๋ฐ ๋น„๋™๊ธฐ๋ฅผ ํ†ตํ•ด์„œ ๋‹ค๋ฅธ ์ผ์„ ๋™์‹œ์— ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ๋‹ค ๊ณ  ํ•œ๋‹ค.

๋น„๋™๊ธฐ๋ฅผ ์™œ์จ์š”?

๋น„๋™๊ธฐ ์ ์ธ ์ž‘์—…์—์„œ๋Š” api ์ž‘์—… ์ˆœ์„œ๊ฐ€ ๋žœ๋ค์ด๋ผ 1- 2- 3 ์ˆœ์„œ๋Œ€๋กœ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•จ์ด๋‹ค?

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

๐ŸงฑBlocking ๊ณผ Non-Blocking

์นดํŽ˜์—์„œ ์ค„์„œ์žˆ๋Š” ๊ทธ๋ฆผ์„ ๋– ์˜ฌ๋ ค๋ณด์ž.

๋ธ”๋กœํ‚น - ๋งˆ๋ƒฅ ๋Œ€๊ธฐํ•ด์•ผ ํ•˜๋Š” ์ƒํ™ฉ. ์•ž ์‚ฌ๋žŒ ์ฃผ๋ฌธํ•˜๊ณ  ๋ฐ›์„ ๋•Œ๊นŒ์ง€ ์ฃผ๋ฌธ๋„ ๋ชป๋„ฃ์–ด.

ํฌํ† ์ƒต pop-up error : adobe xxxx is not responding

๋ธ”๋กœํ‚น์˜ ์˜ˆ์‹œ์ด๋‹ค.

๋…ผ๋ธ”๋กœํ‚น - ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ์‹คํ–‰ํ•˜๊ฒŒ ๋‘๊ณ  ๋‹ค๋ฅธ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ.

JS ์ƒํƒœ๊ณ„ ์—์„œ๋Š” ๋™๊ธฐ๊ฐ€ ๋ธ”๋กœํ‚น์ด๊ณ  ๋น„๋™๊ธฐ๊ฐ€ ๋…ผ๋ธ”๋กœํ‚น๊ณผ ๋˜‘๊ฐ™๋‹ค ๋ณด๋ฉด ๋œ๋‹ค๊ณ  ํ•œ๋‹ค.

๐์ค‘์ฒฉ๋œ ์ฝœ๋ฐฑ์ด ๋ฐœ์ƒํ•˜๋Š” ์‚ฌ๋ก€๋ฅผ ์ดํ•ดํ•˜๊ณ  ์žˆ๋‚˜์š”?

์•ฑ์— ํŒŒ์ผ ์—…๋กœ๋“œ ํ•˜๋Š” ์ฐฝ (์—ฌ๊ธฐ์— ํŒŒ์ผ drop), ๊ทธ๋ฆฌ๊ณ  ์—…๋กœ๋“œ ๋ฒ„ํŠผ์„ ์ƒ์„ฑํ–ˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜์ž.

ํŒŒ์ผ ์ž…์ถœ๋ ฅ, ํƒ€์ž„๋ผ์ธ ์• ๋‹ˆ๋ฉ”์ด์…˜, ๋„คํŠธ์›Œํฌ ์š”์ฒญ์€ ํ•œ๊บผ๋ฒˆ์— ์ผ์–ด๋‚˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋‹ค.

  1. ํŒŒ์ผ ์ž…์ถœ๋ ฅ
  2. ํƒ€์ž„๋ผ์ธ ์• ๋‹ˆ๋ฉ”์ด์…˜
  3. ๋„คํŠธ์›Œํฌ ์š”์ฒญ

์ˆœ์„œ์— ๋”ฐ๋ผ ์ˆœ์„œ๋ฅผ ์ œ์–ด ํ•˜๊ธฐ ์œ„ํ•ด์„œ ์ฝœ๋ฐฑ ์„ ์‚ฌ์šฉํ•ด ๋ณธ๋‹ค.

importFile(result => {
  doAnimation(progress => {
    uploadFile(result => {})
  })
})

์˜ˆ์‹œ๋กœ ์ž‘์„ฑํ•œ ์ฝ”๋“œ ์ด์ง€๋งŒ ๋งŒ์•ฝ ๋น„๋™๊ธฐ ์ ์ธ task ๋“ค์ด ์œ„์˜ ์„ธ ์ข…๋ฅ˜๊ฐ€ ์•„๋‹ˆ๋ผ ๋” ๋งŽ๋‹ค๋ฉด ์ฝœ๋ฐฑ ์ง€์˜ฅ์„ (์ค‘์ฒฉ๋œ ์ฝœ๋ฐฑ) ๊ฒฝํ—˜ํ•˜๊ฒŒ ๋  ๊ฒƒ์ด๋‹ค.

๐์—ฌ๋Ÿฌ๊ฐœ์˜ ๋น„๋™๊ธฐ ํ•จ์ˆ˜๊ฐ€ ์กด์žฌํ•  ๋•Œ Promise ๋ฅผ ์ด์šฉํ•ด ํ•จ์ˆ˜ ์‹คํ–‰ ์ˆœ์„œ๋ฅผ ์ž์œ ์ž์žฌ๋กœ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํ•  ์ˆ˜ ์žˆ๋‚˜์š”?

promise all

์™ผ์ชฝ์€ ๋ณ‘๋ ฌ ๊ตฌ์กฐ๊ฐ€ ์•„๋‹ˆ๋‹ค. Promise๋ฅผ ๋ฆฌํ„ดํ•˜๋Š” ๋น„๋™๊ธฐ ํ•จ์ˆ˜๋“ค์ด ์„œ๋กœ ๋…๋ฆฝ์ ์ด์ง€ ์•Š์„๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

์˜ค๋ฅธ์ชฝ์˜ Promise.all ์„ ์‚ฌ์šฉํ•œ consumer ํ•จ์ˆ˜ ๋‚ด์˜ ๋น„๋™๊ธฐ ํ•จ์ˆ˜๋“ค์€ ๋ณ‘๋ ฌ ๊ตฌ์กฐ์ด๋‹ค. ์ด๊ฒƒ์€ ๋น„๋™๊ธฐ ํ•จ์ˆ˜๋“ค์ด ์„œ๋กœ ๋…๋ฆฝ์ ์ผ ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

์–ธ์ œ Promise.all ์„ ์จ์•ผ ํ• ์ง€, then ์„ ์จ์„œ ์ด์–ด๊ฐ€์•ผ ํ• ์ง€ ์•Œ์•„์•ผ ํ•œ๋‹ค.

await ์—ฌ๋Ÿฌ๊ฐœ ๊ฐ€ ๋ถ™์€ ํ•จ์ˆ˜๋ฅผ ๋™์‹œ์— ์ฒ˜๋ฆฌํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ์—ฌ๊ธฐ์„œ ๋‹ค์‹œ promise.all ๋กœ ๋ฌถ์–ด์ฃผ๋ฉด ๋œ๋‹ค.

async await ์˜ ์š”์ฒญ์— ๋Œ€ํ•œ ์—๋Ÿฌ๋ฅผ ์žก์„ ๋•Œ๋Š” try - catch ๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•˜๊ณ ,

ํ”„๋กœ๋ฏธ์Šค ์—์„œ๋Š” .catch ๋กœ ์—๋Ÿฌ๋ฅผ ์ฒ˜๋ฆฌํ•œ๋‹ค.

๐Ÿ‘จ๐Ÿปโ€๐Ÿš’์ฃผ์˜!

setTimeout ์˜ ๋ฆฌํ„ด์€ ํ”„๋กœ๋ฏธ์Šค๊ฐ€ ์•„๋‹ˆ๋‹ค.

await setTimeout(() => console.log('ํ”„๋กœ๋ฏธ์Šค'), 1000)

๋Š” ์ž˜๋ชป๋œ ์ฝ”๋“œ๋ผ๋Š” ๋œป์ด๋‹ค.

๋ฐ˜๋“œ์‹œ promise ๋กœ ๊ฐ์‹ธ์ค˜์•ผ ํ•œ๋‹ค.

๋น„๋™๊ธฐ ํ•จ์ˆ˜๋ผ๊ณ  ๋ง‰ await ๊ฐ™๋‹ค ์“ด๋‹ค๊ณ  ๋™๊ธฐ์ ์œผ๋กœ ์“ธ ์ˆ˜ ์žˆ๋Š”๊ฒŒ ์•„๋‹ˆ๋ผ๋Š” ๊ฑฐ๋‹ค.

๐Promise์˜ ์„ธ ๊ฐ€์ง€ ์ƒํƒœ

Fullfilled / Pending / Rejected

Fullfilled ์ƒํƒœ ์ผ ๋–„ ์ด์ œ resolve ๋กœ ์„ฑ๊ณตํ•œ ๋น„๋™๊ธฐ ์š”์ฒญ์„ .then ์œผ๋กœ ๋ฐ›์•„์™€์„œ ๋ฐ˜ํ™˜

Rejected ์ƒํƒœ ์ผ ๋•Œ ์ด์ œ rejected ๋กœ ์‹คํŒจํ•œ ๋น„๋™๊ธฐ ์—๋Ÿฌ๋ฅผ .catch ๋กœ ๋ฐ›์•„์™€์„œ ๋ฐ˜ํ™˜

๐Promise.all ์˜ ์‚ฌ์šฉ๋ฒ•์„ ์ดํ•ดํ•˜์…จ๋‚˜์š”?

์ž‘๋™ ์›๋ฆฌ๋Š” ๋‹ค๋ฅด๋‹ค. ์ˆœ์„œ๋ฅผ ๋ณด์žฅํ•˜์ง€ ์•Š๋Š”๋‹ค.

๋ฐฐ์—ด ์ธ์ž ์— ํ”„๋กœ๋ฏธ์Šค ๊ฐ์ฒด๊ฐ€ ๋‘˜๋‹ค fullfilled ์ƒํƒœ์ผ ๋•Œ๋งŒ then ์œผ๋กœ ๋ถˆ๋ฆฌ๊ฒŒ ๋œ๋‹ค.

ํ•˜๋‚˜๋ผ๋„ rejected ๋˜๋ฉด catch ๋กœ ๋„˜์–ด๊ฐ€๊ฒŒ ๋œ๋‹ค.

๋˜ํ•œ Promise.all ์ด ๋ฆฌํ„ดํ•˜๋Š” ๊ฒƒ์€ ๋ฐฐ์—ด์ด ์•„๋‹ˆ๋ผ ํ”„๋กœ๋ฏธ์Šค ๊ฐ์ฒด ์ด๋‹ค.

๐Promise.allSettled()

์–˜๋Š” ๋‘˜ ์ค‘ ํ•˜๋‚˜๋ผ๋„ fullfilled ๋˜๋ฉด then ์ด ๋ถˆ๋ฆฌ๊ฒŒ ๋œ๋‹ค.

๐node.js ์™€ ๋ธŒ๋ผ์šฐ์ €์˜ ์ฐจ์ด์ 

node.js - ํŒŒ์ผ์„ ์ฝ๊ณ  ์“ฐ๋Š”๊ฒƒ์„ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๋‹ค. ์„œ๋ฒ„๋ฅผ ๋งŒ๋“ค๊ณ , db ๋ฅผ ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ํ™˜๊ฒฝ

๋ธŒ๋ผ์šฐ์ € - ํŒŒ์ผ ๋‹ค๋ฃจ๋Š” ๊ฑฐ์—๋Š” ํ•œ๊ณ„๊ฐ€ ์žˆ๋‹ค.

fetch ๋Š” ๋ธŒ๋ผ์šฐ์ €์—์„œ ์‚ฌ์šฉํ•˜๋Š” api ์ด๋‹ค.

๊ทธ๋Ÿผ node ์—์„œ๋Š” ๋„คํŠธ์›Œํฌ ์š”์ฒญ์„ ๋ชปํ•˜๋‚˜์š”?

ํ•  ์ˆ˜ ์žˆ๋‹ค. node.js ์—์„œ ๋ชจ๋“ˆ์„ ์ฐพ์•„๋ณด๋ฉด http ๋ฅผ ์‚ฌ์šฉ ํ•  ์ˆ˜ ์žˆ๋‹ค.

ํ˜น์€ node-fetch ๊ฐ™์€ ๋ชจ๋“ˆ์„ ์ธ์Šคํ†จํ•ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. node ์™€ ๋ธŒ๋ผ์šฐ์ €๋Š” ์„œ๋กœ ํ™˜๊ฒฝ์ด ๋‹ค๋ฅด๋‹ค ๋ผ๋Š” ๊ฒƒ์„ ์ธ์‹ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค.


Written by@[DotoriMook]
ํ”„๋ก ํŠธ์—”๋“œ ์ฃผ๋‹ˆ์–ด ๊ฐœ๋ฐœ์ž ๋„ํ† ๋ฆฌ๋ฌต์˜ ๊ธฐ์ˆ ๊ฐœ๋ฐœ ๋ธ”๋กœ๊ทธ ์ž…๋‹ˆ๋‹ค.

GitHubMediumTwitterFacebook