์‹œํ๋ฆฌํ‹ฐ์ง€ํ˜ธ 2024. 4. 13. 14:45

"fetch ์™€ axios๋Š” ๋ชจ๋‘ HTTP ์š”์ฒญ์„ ๋ณด๋‚ด๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ๋„๊ตฌ์ด๋‹ค."

 

fetch

ES6 ๋ถ€ํ„ฐ ๋“ค์–ด์˜จ JavaScript ๋‚ด์žฅ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๋‹ค.
Promise ๊ธฐ๋ฐ˜์œผ๋กœ ๋งŒ๋“ค์–ด์กŒ๊ธฐ ๋•Œ๋ฌธ์— axios์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋ฐ์ดํ„ฐ ๋‹ค๋ฃจ๊ธฐ๊ฐ€ ์‰ฝ๊ณ , ๋‚ด์žฅ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆด๋ผ๋Š” ์žฅ์ ์œผ๋กœ
์ƒ๋‹นํžˆ ํŽธ๋ฆฌํ•˜๋‹ค.

 

fetch("https://localhost:8080/user/post", {
  method: "POST",
  headers: {
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    id: "jiho",
    description: "hello jiho",
  }),
}).then((response) => console.log(response));

 

 

fetch์˜ ์žฅ์ 

 

1. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๋‚ด์žฅ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๋ฏ€๋กœ ๋ณ„๋„๋กœ importํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค.

2. Promise ๊ธฐ๋ฐ˜์œผ๋กœ ๋งŒ๋“ค์–ด์กŒ๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ์ดํ„ฐ ๋‹ค๋ฃจ๊ธฐ๊ฐ€ ํŽธ๋ฆฌํ•˜๋‹ค.

3. ๋‚ด์žฅ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๊ธฐ ๋•Œ๋ฌธ์— ์—…๋ฐ์ดํŠธ์— ๋”ฐ๋ฅธ ์—๋Ÿฌ ๋ฐฉ์ง€๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.

 

fetch์˜ ๋‹จ์ 

 

1. ์ง€์›ํ•˜์ง€ ์•Š๋Š” ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์กด์žฌํ•œ๋‹ค.

2. ๋„คํŠธ์›Œํฌ ์—๋Ÿฌ ๋ฐœ์ƒ ์‹œ response timeout์ด ์—†์–ด ๊ธฐ๋‹ค๋ ค์•ผ ํ•œ๋‹ค. -> ๊ทธ๋ ‡๋‹ค๊ณ  ๋‹จ์ ์ด๋ผ๊ณ  ํ•˜๊ธฐ์—๋Š” 

AbortController ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด์„œ ์ œ์–ด๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค. -> ๊ท€์ฐฎ์•„์ง„๊ฒƒ์€ ๋งž๋‹ค. ใ…‹ใ…‹

 

const url = "https://jsonplaceholder.typicode.com/todos";

const controller = new AbortController();
const signal = controller.signal;
setTimeout(() => controller.abort(), 4000);

fetch(url, {
  signal: signal,
})
  .then((response) => response.json())
  .then(console.log)
  .catch((err) => {
    console.error(err.message);
  });

 

3. JSON์œผ๋กœ ๋ณ€ํ™˜ํ•ด์ฃผ๋Š” ๊ณผ์ •์ด ํ•„์š”ํ•˜๋‹ค.

4. ์ƒ๋Œ€์ ์œผ๋กœ axios์— ๋น„ํ•ด ๊ธฐ๋Šฅ์ด ๋ถ€์กฑํ•˜๋‹ค.

 

axios

axios๋Š” Node.js์™€ ๋ธŒ๋ผ์šฐ์ €๋ฅผ ์œ„ํ•œ Promise API๋ฅผ ํ™œ์šฉํ•˜๋Š” HTTP ํ†ต์‹  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๋‹ค.
๋น„๋™๊ธฐ๋กœ HTTP ํ†ต์‹ ์„ ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, return์„ Promise ๊ฐ์ฒด๋กœ ํ•ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์— response ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃจ๊ธฐ ์‰ฝ๋‹ค.

 

axios({
  method: 'post',
  url: 'https://localhost:8080/user',
  data: {
    userName: 'jiho',
    userId: 'jiho112'
  }
}).then((response) => console.log(response));

 

axios์˜ ์žฅ์ 

 

1. response timout (fetch์—๋Š” AbortController) ์ฒ˜๋ฆฌ ๋ฐฉ๋ฒ•์ด ์žˆ์–ด ์„œ๋ฒ„ ๋ฏธ์‘๋‹ต์‹œ ์„ค์ •์ด ๊ฐ„๋‹จํ•˜๋‹ค.

2. Promise ๊ธฐ๋ฐ˜์œผ๋กœ ๋งŒ๋“ค์–ด์กŒ๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ์ดํ„ฐ ๋‹ค๋ฃจ๊ธฐ ํŽธ๋ฆฌํ•˜๋‹ค.

3. ํฌ๋กœ์Šค ๋ธŒ๋ผ์šฐ์ง• ์ตœ์ ํ™”๋กœ ๋ธŒ๋ผ์šฐ์ € ํ˜ธํ™˜์„ฑ(๊ตฌํ˜• ๋ธŒ๋ผ์šฐ์ € ์ง€์›)์ด ๋›ฐ์–ด๋‚˜๋‹ค.

 

axios ๋‹จ์ 

 

1. ์‚ฌ์šฉ์„ ์œ„ํ•œ ๋ชจ๋“ˆ ์„ค์น˜๊ฐ€ ํ•„์š”ํ•˜๋‹ค.

 

npm์„ ์‚ฌ์šฉํ•˜์—ฌ ์„ค์น˜

npm install axios

 

yarn์„ ์‚ฌ์šฉํ•˜์—ฌ ์„ค์น˜

yarn add axios

 

์ดํ›„, ํ”„๋กœ์ ํŠธ์—์„œ import ์ž‘์„ฑ

import axios from "axios";

 

 

 

์„ฑ๋Šฅ

 

 

์œ„์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋“ฏ์ด native fetch๊ฐ€ axios ๋ณด๋‹ค ์‚ด์ง ๋น ๋ฅด๋‹ค. ๋‘ ํด๋ผ์ด์–ธํŠธ ๋ชจ๋‘ ๋น„๋™๊ธฐ ์ด๊ธฐ ๋•Œ๋ฌธ์— ํฌ๊ฒŒ ์ค‘์š”ํ•˜์ง€ ์•Š๋‹ค.

ํ•˜์ง€๋งŒ ๋ถˆ๋Ÿฌ์˜ค๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ๋ฌด๊ฒ๋‹ค๋ฉด ๋น„๋™๊ธฐ๋ผ๊ณ  ํ•ด๋„ ์†๋„ ์ฐจ์ด๊ฐ€ ์žˆ์„ ์ˆ˜๊ฐ€ ์žˆ๋‹ค๋Š” ์ ์€ ๊ณ ๋ คํ•ด์•ผ ํ•œ๋‹ค.

 

 

 

 

๊ฒฐ๋ก 

๊ฒฐ๊ตญ, ์–ด๋–ค ํ”„๋กœ์ ํŠธ๋ฅผ ํ•˜๋А๋ƒ ๊ทธ๋ฆฌ๊ณ  ๊ฐœ๋ฐœ์ž์˜ ์„ฑํ–ฅ ๋“ฑ์„ ์ข…ํ•ฉ์ ์œผ๋กœ ๊ณ ๋ คํ•˜์—ฌ ๋‘ ๊ฐ€์ง€ ์ค‘ ์„ ํƒํ•ด์„œ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.

 

์ฐธ๊ณ :

https://velog.io/@eunbinn/Axios-vs-Fetch

https://tlsdnjs12.tistory.com/26