Skip to content

Latest commit

ย 

History

History
55 lines (41 loc) ยท 2.78 KB

File metadata and controls

55 lines (41 loc) ยท 2.78 KB

JavaScript ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๋ž€ ํŠน์ • ์ฝ”๋“œ์˜ ์—ฐ์‚ฐ์ด ๋๋‚  ๋•Œ๊นŒ์ง€ ์ฝ”๋“œ์˜ ์‹คํ–‰์„ ๋ฉˆ์ถ”์ง€ ์•Š๊ณ  ๋‹ค์Œ ์ฝ”๋“œ๋ฅผ ๋จผ์ € ์‹คํ–‰ํ•˜๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ํŠน์„ฑ์„ ์˜๋ฏธํ•œ๋‹ค.

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


๋น„๋™๊ธฐ ์ž‘์—…์˜ ๊ณผ์ •

์ž์„ธํ•œ ๋‚ด์šฉ์€ ์ด๋ฒคํŠธ ๋ฃจํ”„์—์„œ ๋‹ค๋ฃฐ ๊ฒƒ์ด๋‹ค.

  1. ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๋˜๋ฉด call stack์— ์Œ“์ด๊ณ  ๋งˆ์ง€๋ง‰์œผ๋กœ ๋“ค์–ด์˜จ ์ฝ”๋“œ๋ถ€ํ„ฐ ์‹คํ–‰๋œ๋‹ค.
  2. ๋น„๋™๊ธฐ ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰๋˜๋ฉด web api๊ฐ€ ํ˜ธ์ถœ๋œ๋‹ค.
  3. web api๋Š” ๋น„๋™๊ธฐ ํ•จ์ˆ˜์˜ ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ callback queue์— ๋„ฃ๋Š”๋‹ค.
    • promise๋Š” microtask queue๋กœ, timeout์€ task queue๋กœ, requestAnimationFrame์€ animation frame์œผ๋กœ ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ ๋„ฃ๋Š”๋‹ค.
    • ์ฝœ๋ฐฑ ์ด๋™ ์šฐ์„ ์ˆœ์œ„๋Š” microtask > animation > task queue ์ด๋‹ค.
  4. event loop๋Š” call stack์ด ๋นˆ ์ƒํƒœ๊ฐ€ ๋˜๋ฉด ์ฝœ๋ฐฑ์„ call stack์œผ๋กœ ์ด๋™์‹œํ‚จ๋‹ค.

๋น„๋™๊ธฐ ์—๋Ÿฌ ์ฒ˜๋ฆฌ

  • response๊ฐ€ ok์ผ ๋•Œ๋งŒ ์ •์ƒ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ฆฌํ„ด๋œ๋‹ค.
  • ์—๋Ÿฌ ๋ฐœ์ƒ ์‹œ ๋‹จ์ˆœํžˆ Error ๊ฐ์ฒด๋ฅผ ๋˜์ง€๊ธฐ๋ณด๋‹จ ๊ณตํ†ต๋œ ์—๋Ÿฌ ์ฒ˜๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•œ ๊ฐ์ฒด๋กœ ๋‚ด๋ ค์ฃผ๋ฉด ๋ฐ›๋Š” ์ชฝ์—์„œ ์—๋Ÿฌ ์ฒ˜๋ฆฌ๋ฅผ ํ•˜๊ธฐ ๋”์šฑ ์‰ฌ์›Œ์ง„๋‹ค.
{
	isError: true,
	errorData: {
		message: errorData.message,
		statusCode: response.status,
	},
}

์ด๋Ÿฐ ๋ฐฉ์‹์œผ๋กœ ์—๋Ÿฌ ๊ฐ์ฒด๋ฅผ ๋ฆฌํ„ดํ•ด์ฃผ๋ฉด ์ƒํƒœ ์ฝ”๋“œ์— ๊ด€๊ณ„ ์—†์ด ํ˜น์€ HTTPError ๊ฐ™์€ ํŠน์ • ์—๋Ÿฌ ๊ฐ์ฒด์— ๊ด€๊ณ„ ์—†์ด ์ด๋ฏธ ์ •์˜ํ•ด๋†“์€ ์ธํ„ฐํŽ˜์ด์Šค์— ๋งž๋Š” ๊ฐ์ฒด๊ฐ€ ๋ฆฌํ„ด๋œ๋‹ค๋Š” ๊ฒƒ์„ ๋ณด์žฅํ•  ์ˆ˜ ์žˆ๋‹ค.


๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ ๋ฐฉ๋ฒ•

async/await

ES8(2017)์—์„œ ๋‚˜์˜จ ๋น„๋™๊ธฐ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ์ƒˆ๋กœ์šด ๋ฐฉ๋ฒ•์ด๋‹ค. promise์˜ ๋‹จ์ ์„ ๋ณด์™„ํ•˜๊ณ  ๊ฐ€๋…์„ฑ์žˆ๋Š” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋„์™€์ค€๋‹ค.

function ํ‚ค์›Œ๋“œ ์•ž์— async๋ฅผ ๋ถ™์—ฌ์ฃผ๊ณ  function ๋‚ด๋ถ€์˜ promise๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ ํ•จ์ˆ˜ ์•ž์— await์„ ๋ถ™์—ฌ์ค€๋‹ค.

promise vs async/await

  • promise๋Š” then๊ณผ catch๋ฅผ ์‚ฌ์šฉํ•ด ์—๋Ÿฌ ์ฒ˜๋ฆฌ๋ฅผ ํ•˜๋Š” ๋ฐ˜๋ฉด, async/await์€ try-catch ๋ฌธ์„ ํ™œ์šฉํ•ด ์—๋Ÿฌ ์ฒ˜๋ฆฌ๋ฅผ ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • async/await์„ ์‚ฌ์šฉํ•˜๋ฉด promise๋ณด๋‹ค ๊ฐ„๊ฒฐํ•˜๊ณ  ๊ฐ€๋…์„ฑ์žˆ๊ฒŒ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

์ฐธ๊ณ