๐Ÿ“ฆ ์žก๋™์‚ฌ๋‹ˆ

ํ•˜๋‚˜์˜ ํ‚ค์›Œ๋“œ๋ฅผ ์žก๊ณ  ์ข€ ํŽธํ•˜๊ฒŒ ์ •๋ฆฌํ•˜๊ณ  ์‹ถ์–ด ๋งŒ๋“  ์žก๋™์‚ฌ๋‹ˆ

์žก๋™์‚ฌ๋‹ˆ๋Š” ์กฐ์„  ํ›„๊ธฐ ํ•™์ž ์•ˆ์ •๋ณต์ด ํŽธ์ฐฌํ•œ ์žก๋™์‚ฐ์ด(้›œๅŒๆ•ฃ็•ฐ)์—์„œ ์œ ๋ž˜๋œ ๋ง์ด๋‹ค.
์žก๋™์‚ฐ์ด๋Š” ์žก๊ธฐ(้›œ่จ˜)์˜ ํ˜•ํƒœ๋ฅผ ๋นŒ๋ ค์˜จ ์ฑ…์œผ๋กœ ๊ตฌ์ฒด์ ์ธ ์ฒด๊ณ„๊ฐ€ ์žกํ˜€์žˆ์ง€ ์•Š์€ ํ˜•์‹์ด๋‹ค.
ํ•ญ๋ชฉ์ด ๋‹ค์†Œ ๋‚œ์žกํ•˜๊ณ  ๋‚ด์šฉ์˜ ๊ตฌ๋ถ„์ด ํ˜ผ๋™๋˜์–ด์žˆ๋‹ค๊ณ  ํ•œ๋‹ค. ๐Ÿคฃ

๐Ÿ—‚๏ธ fetch VS axios

  • ๋‘ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ชจ๋‘ JS ์ง„์˜์—์„œ ํ†ต์‹ ์„ ์œ„ํ•ด ์‚ฌ์šฉ๋œ๋‹ค.
  • ๋‹จ์ˆœํ•˜๊ฒŒ๋Š” fetch๊ฐ€ ์ข€๋” ์˜ˆ์ „ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ, axios๊ฐ€ ์ข€๋” ์ตœ์‹  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ผ๊ณ  ์ƒ๊ฐํ•ด๋„ ์ข‹๋‹ค.

๋น„๊ตํ•˜๊ฒŒ ๋œ ๊ณ„๊ธฐ ๊ทธ๋ฆฌ๊ณ  fetch์—์„œ์˜ ์—๋Ÿฌ ์ฒ˜๋ฆฌ

  • ๋™๋ฃŒ์ธ ์‹œ์ €๊ฐ€ ์•„๋ž˜์˜ ์ฝ”๋“œ์—์„œ ์™œ ๊ตณ์ด try...catch...๋ฅผ ์“ฐ๊ณ  ๋‚˜์„œ ๋˜ ๊ทธ ์•ˆ์—์„œ res.ok๋กœ ์—๋Ÿฌ ์ฒ˜๋ฆฌ๋ฅผ ํ•˜๋Š”๊ฑด์ง€ ๊ถ๊ธˆํ•ดํ•˜์˜€๋‹ค.
try {
  fetch('https://example.com/api/data')
    .then((res) => {
      if (!res.ok) {
        throw new Error(`${res.status} ${res.statusText}`);
      }
      return res.json();
    })
    .then((data) => console.log(data));
} catch (error) {
  console.log(`์—๋Ÿฌ ๋ฐœ์ƒ: ${error}`);
}
  • ์–ผํ• ๋ณด๋ฉด if (!res.ok)๊ฐ€ ๊ตณ์ด ์žˆ์–ด์•ผํ•˜๋‚˜ ์‹ถ์—ˆ๋‹ค. ์–ด์ฐจํ”ผ try...catch๋กœ ์—๋Ÿฌ ์ฒ˜๋ฆฌ๋ฅผ ํ• ํ…๋ฐ ๊ตณ์ด ๋˜ ์กฐ๊ฑด๋ฌธ์„ ์จ์ค„ ํ•„์š”๊ฐ€ ์žˆ์„๊นŒ? ํ•˜๋Š” ์ƒ๊ฐ.
  • ์ž˜ ์ƒ๊ฐํ•ด๋ณด๋ฉด 200๋ฒˆ๋Œ€๋Š” ํ†ต์‹ ์ด ์„ฑ๊ณตํ•œ ๊ฒƒ์ด๋ผ๋Š” ๊ฑด HTTP๋ฅผ ํ†ตํ•ด ์šฐ๋ฆฌ๋ผ๋ฆฌ ์•ฝ์†ํ•œ ๊ฒƒ์ด๋‹ค. ์ฆ‰, 300๋ฒˆ์ด๋“  400๋ฒˆ์ด๋“  ํ•จ์ˆ˜ ์ž…์žฅ์—์„œ๋Š” ์•„๋ฌดํŠผ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๊ฐ€ ์™„๋ฃŒ๋˜์—ˆ์œผ๋‹ˆ Promise ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ์ฆ‰, ์—๋Ÿฌ๊ฐ€ ์•„๋‹Œ ๊ฒƒ์ด๋‹ค.
  • ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ๋”ฐ๋กœ res.ok๊ฐ€ false์ผ ๋•Œ(200๋ฒˆ๋Œ€๊ฐ€ ์•„๋‹ ๋•Œ), ์ผ๋ถ€๋Ÿฌ error๋ฅผ throwํ•ด์„œ try...catch๊ฐ€ ์žก์•„๋‚ผ ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ค˜์•ผํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

fetch์™€ axios์˜ ์ฐจ์ด์ 

  • fetch api๋Š” ์ตœ์‹  ๋ธŒ๋ผ์šฐ์ €์—์„œ ์ œ๊ณตํ•˜๋Š” JavaScript api์ด๊ธฐ ๋•Œ๋ฌธ์— ์›ฌ๋งŒํ•˜๋ฉด ๊ทธ๋ƒฅ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค. ๋ฐ˜๋ฉด axios๋Š” third-party ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ๋ณ„๋„์˜ ์„ค์น˜๊ฐ€ ํ•„์š”ํ•˜๋‹ค.
  • ์œ„์˜ ์ฝ”๋“œ์—์„œ fetch๋Š” ๋”ฐ๋กœ res.ok๋ฅผ ํ†ตํ•ด ์—๋Ÿฌ๋ฅผ ํ•ธ๋“ค๋งํ•ด์•ผํ•˜๋Š” ๋ฐ˜๋ฉด, axios๋Š” ๊ทธ ์ž์ฒด์ ์œผ๋กœ catch()๋ผ๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ์ œ๊ณตํ•˜์—ฌ ์ข€๋” ๊ฐ„ํŽธํ•˜๊ฒŒ ์—๋Ÿฌ๋ฅผ ํ•ธ๋“ค๋งํ•  ์ˆ˜ ์žˆ๋‹ค.
  • axios๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐ ์š”์ฒญ ์•ž๊ณผ ๋’ค์— ํ˜ธ์ถœ๋˜๋Š” ํ•จ์ˆ˜์ธ request interceptor์™€ response interceptor๋ฅผ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์š”์ฒญ์˜ ํ—ค๋”, ํŽ˜์ด๋กœ๋“œ ์ˆ˜์ • ๋“ฑ ์˜ค๋ฅ˜๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.
  • axios๋Š” ํ˜„์žฌ ์ง„ํ–‰ ์ค‘์ธ ์š”์ฒญ์„ ์ทจ์†Œํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜์—ฌ ์‚ฌ์šฉ์ž ์ž…๋ ฅ์„ ์ฒ˜๋ฆฌํ•˜๊ณ  ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”ํ•˜๋Š”๋ฐ ์œ ์šฉํ•˜๋‹ค.

๊ฒฐ๊ตญ์— server์™€์˜ ํ†ต์‹ ์„ ํ•  ๋•Œ, fetch๋ฅผ ์“ฐ๋Š๋ƒ axios๋ฅผ ์“ฐ๋Š๋ƒ๋Š” ๋ณธ์ธ์˜ ํ”„๋กœ์ ํŠธ๊ฐ€ ์ง€ํ–ฅํ•˜๋Š” ๋ถ€๋ถ„ ๊ทธ๋ฆฌ๊ณ  ๋ณธ์ธ์˜ ์„ ํ˜ธ๋„์— ๋”ฐ๋ผ ์„ ํƒํ•˜๋ฉด ๋œ๋‹ค.

์ฐธ๊ณ