[Axios] Async, Await?

์ง„์ฃผยท2022๋…„ 3์›” 7์ผ

Axios

๋ชฉ๋ก ๋ณด๊ธฐ
1/1

๐Ÿงถ ๋™๊ธฐ(Sync), ๋น„๋™๊ธฐ(Async)๋ž€?

๋น„๋™๊ธฐ, ๋™๊ธฐ๋Š” ํ†ต์‹ ๊ณผ ๊ด€๋ จ๋œ ์šฉ์–ด์ด๋‹ค.


โœ… ๋™๊ธฐ(synchronous = ๋™์‹œ์— ์ผ์–ด๋‚˜๋Š”)

: ์ด์ „ ์ž‘์—…์ด ๋๋‚˜์•ผ ๋‹ค์Œ ์ž‘์—…์ด ์‹คํ–‰๋œ๋‹ค.
์š”์ฒญ๊ณผ ๊ทธ ๊ฒฐ๊ณผ๊ฐ€ ๋™์‹œ์— ์ผ์–ด๋‚œ๋‹ค๋Š” ์•ฝ์†์ด๋ฉฐ, ์š”์ฒญ์„ ํ•˜๋ฉด ์‹œ๊ฐ„์ด ์–ผ๋งˆ๋‚˜ ๊ฑธ๋ฆฌ๋“ ์ง€ ์š”์ฒญํ•œ ์ž๋ฆฌ์—์„œ ๊ฒฐ๊ณผ๊ฐ€ ์ฃผ์–ด์ ธ์•ผ ํ•œ๋‹ค.

์„ค๊ณ„๊ฐ€ ๋งค์šฐ ๊ฐ„๋‹จํ•˜๊ณ  ์ง๊ด€์ ์ด์ง€๋งŒ,
๊ฒฐ๊ณผ๊ฐ€ ์ฃผ์–ด์งˆ ๋•Œ ๊นŒ์ง€ ์•„๋ฌด๊ฒƒ๋„ ํ•˜์ง€ ๋ชปํ•˜๊ณ  ๋Œ€๊ธฐํ•ด์•ผํ•œ๋‹ค.


โœ… ๋น„๋™๊ธฐ(Asynchronous = ๋™์‹œ์— ์ผ์–ด๋‚˜์ง€ ์•Š๋Š”)

: ์ด์ „ ์ž‘์—… ์ˆ˜ํ–‰ ์ค‘์—๋„ ๋‹ค๋ฅธ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” ๊ฒƒ (์ž‘์—…์ด ์ˆœ์ฐจ์ ์œผ๋กœ ์‹คํ–‰๋˜์ง€ ์•Š๋Š”๋‹ค)
์š”์ฒญํ•œ ๊ฒฐ๊ณผ๊ฐ€ ๋™์‹œ์— ์ผ์–ด๋‚˜์ง€ ์•Š์„๊ฑฐ๋ผ๋Š” ์•ฝ์†์ด๋‹ค.

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


๐Ÿ”ต ๋น„๋™๊ธฐ ์ž‘์—…์˜ ๊ฒฐ๊ณผ๋Š” ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ• ๊นŒ?


1. ๋™๊ธฐ ์ž‘์—…์€ ์ง๊ด€์ ์ด๋‹ค.

์ด์ „ ์‹คํ–‰์˜ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์˜ค๋ฉด, ๊ทธ ๋‹ค์Œ ์‹คํ–‰์„ ํ•˜๊ธฐ ๋•Œ๋ฌธ์—
์–ด๋–ค ์ž‘์—…์˜ ์ˆœ์„œ๋ฅผ ์ •ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ์ˆœ์ฐจ์ ์œผ๋กœ ์ฝ”๋“œ๋ฅผ ์ ๊ธฐ๋งŒ ํ•˜๋ฉด ๋œ๋‹ค.

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

โœจ Q. ๋งŒ์•ฝ ๋น„๋™๊ธฐ ์ž‘์—…์˜ ๊ฒฐ๊ณผ๋ฅผ ๊ทธ ๋‹ค์Œ ์ž‘์—…์— ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด? โœจ
A. ๋น„๋™๊ธฐ ์ž‘์—…๊ณผ ๊ทธ ์ดํ›„ ์ž‘์—…์„ ๋งˆ์น˜ ๋™๊ธฐ ์ž‘์—…์ฒ˜๋Ÿผ ๋™์ž‘ํ•˜๋„๋ก ๋งŒ๋“ค์–ด์ค˜์•ผ ํ•œ๋‹ค.

promise , async , await ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋น„๋™๊ธฐ ์ž‘์—…์„ ๋งˆ์น˜ ๋™๊ธฐ์ ์œผ๋กœ, ์ฆ‰ ๋น„๋™๊ธฐ ์ž‘์—…์ด ๋๋‚œ ํ›„ ํŠน์ • ์ž‘์—…๋“ค์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ˆœ์„œ๋ฅผ ์ •ํ•ด์ฃผ๋Š” ๊ฒƒ์ด๋‹ค.


1) promise

promise๊ฐ์ฒด๋Š” ๋น„๋™๊ธฐ ์ž‘์—…์ด ๋๋‚œ ํ›„ ๊ฒฐ๊ณผ๋ฅผ ์•Œ๋ ค์ฃผ๋Š” ์šฉ๋„ ๋กœ ์‚ฌ์šฉํ•œ๋‹ค.

promise๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด, ๋น„๋™๊ธฐ ์ž‘์—…์ด ๋๋‚œ ์‹œ์ ์„ ์•Œ ์ˆ˜ ์žˆ์–ด ๋™๊ธฐ ์ž‘์—…์ฒ˜๋Ÿผ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.

๋Œ€๊ธฐ , ์ดํ–‰, ๊ฑฐ๋ถ€ ์ด 3๊ฐœ์˜ ์ƒํƒœ๋ฅผ ๊ฐ–๋Š”๋‹ค.
๊ฐ๊ฐ ์ž‘์—… ์™„๋ฃŒ ์ „, ์ž‘์—… ์™„๋ฃŒ ํ›„, ์—๋Ÿฌ ๋ฐœ์ƒํ•˜์—ฌ ์‹คํŒจ ๋ผ๋Š” ๋œป์ด๋‹ค.

๐Ÿ”ธ promise ์‚ฌ์šฉ ๋ฐฉ๋ฒ•

๋น„๋™๊ธฐ ์ž‘์—…์ด ์ž‘์—… ์ข…๋ฃŒ ํ›„, promise ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋„๋ก ํ•˜๊ณ 
promise ๊ฐ์ฒด๊ฐ€ ์ œ๊ณตํ•˜๋Š” then, catch๋ฅผ ์ด์šฉํ•˜๋ฉด ๋œ๋‹ค.

const promise = // promise๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ์–ด๋–ค ๋น„๋™๊ธฐ ์ž‘์—…...
      
promise.then((result) => console.log('์„ฑ๊ณต!').catch((error) => console.log('์‹คํŒจ..')

  • promise ๊ฐ์ฒด์— .then์„ ๋ถ™์ด๋ฉด ์ดํ–‰ ์ƒํƒœ์˜ ์ฒ˜๋ฆฌ๋ฅผ ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • .catch๋ฅผ ๋ถ™์ด๋ฉด ์‹คํŒจ ์ƒํƒœ๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

2) await

promise ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜๋”๋ผ๋„ .then(), .catch() ๋“ฑ๋“ฑ ๋’ค์— ๋ถ™์ด๋Š” ๊ฒƒ๋“ค์ด ๋งŽ์•„์ง„๋‹ค.

์ด๋Ÿฌํ•œ ํ‚ค์›Œ๋“œ๋ฅผ ๋ถ™์ด์ง€ ์•Š๊ณ , ๋”์šฑ ๊ฐ„๋‹จํ•˜๊ฒŒ ๋น„๋™๊ธฐ ์ž‘์—…์„ ๋™๊ธฐ์ ์œผ๋กœ ๋งŒ๋“ค์–ด์ฃผ๋Š” ํ‚ค์›Œ๋“œ๊ฐ€ await ์ด๋‹ค.

๐Ÿ”น await ์‚ฌ์šฉ ๋ฐฉ๋ฒ•

๋น„๋™๊ธฐ ์ž‘์—… ์•ž์— await ํ‚ค์›Œ๋“œ๋ฅผ ๋ถ™์ด๋ฉด, ๋น„๋™๊ธฐ ์ž‘์—…์ด ๊ฒฐ๊ณผ๋ฅผ ๋‚ผ ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฐ๋‹ค.

์—ฌ๊ธฐ์„œ ๊ธฐ๋‹ค๋ฆฐ๋‹ค๋Š” ์˜๋ฏธ๋Š”, ๋ชจ๋“  ์ž‘์—…์ด ์ข…๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฐ๋‹ค๋Š” ์˜๋ฏธ๊ฐ€ ์•„๋‹ˆ๋‹ค.
๋‚ด๊ฐ€ ์‚ฌ์šฉํ•  ๊ฒฐ๊ณผ๊ฐ’์ด ๋‚˜์˜ฌ ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฐ๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค.

์ฆ‰, ๋ฉ”์ธ ์ž‘์—…๋“ค์€ ๋ฉˆ์ถ”์ง€ ์•Š๊ณ  await๋ฅผ ํฌํ•จํ•˜๊ณ  ์žˆ๋Š” ํ•จ์ˆ˜๋งŒ ์ผ์‹œ์ •์ง€๋œ๋‹ค.

await๋Š” ํ˜ผ์ž ์“ธ ์ˆ˜ ์—†๋‹ค = async ํ‚ค์›Œ๋“œ์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•œ๋‹ค.


3) async

async๋Š” ํŠน์ • ํ•จ์ˆ˜๋ฅผ ๋น„๋™๊ธฐ๋กœ ๋งŒ๋“œ๋Š” ํ‚ค์›Œ๋“œ์ด๋‹ค.

await์™€ ์„ธํŠธ๋กœ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ๋Š”,

  • ๋น„๋™๊ธฐ ์ž‘์—…์„ ํฌํ•จํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ ํ•จ์ˆ˜๋„ ๋น„๋™๊ธฐ์—ฌ์•ผ ํ•œ๋‹ค.
  • await์œผ๋กœ ๊ทธ ํ•จ์ˆ˜๋งŒ ์ผ์‹œ์ •์ง€ํ•˜๋ฏ€๋กœ, ๊ฒฐ๊ตญ ์ด ๊ฒƒ๋„ ๋น„๋™๊ธฐ์ด๋‹ค.

๋™๊ธฐ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•  ์ผ์ด ์žˆ๋Š” ๋น„๋™๊ธฐ ์ž‘์—…์— await๋ฅผ ๋ถ™์ด๊ณ , ํ•ด๋‹น ์ž‘์—…์„ ํฌํ•จํ•˜๊ณ  ์žˆ๋Š” ํ•จ์ˆ˜์— async๋ฅผ ๋ถ™์ด๋ฉด ๋œ๋‹ค.


์ถœ์ฒ˜ : https://anywaydevlog.tistory.com/30

profile
์ง„์ฃผ์˜ ์ฝ”๋”ฉ์ผ๊ธฐ

0๊ฐœ์˜ ๋Œ“๊ธ€