JavaScript

[JavaScript] Fetch API

carsumin 2024. 8. 14. 15:14

 

 

 

https://developer.mozilla.org/ko/docs/Web/API/Fetch_API/Using_Fetch

 

Fetch API ์‚ฌ์šฉํ•˜๊ธฐ - Web API | MDN

Fetch API๋Š” HTTP ํŒŒ์ดํ”„๋ผ์ธ์„ ๊ตฌ์„ฑํ•˜๋Š” ์š”์ฒญ๊ณผ ์‘๋‹ต ๋“ฑ์˜ ์š”์†Œ๋ฅผ JavaScript์—์„œ ์ ‘๊ทผํ•˜๊ณ  ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. Fetch API๊ฐ€ ์ œ๊ณตํ•˜๋Š” ์ „์—ญ fetch() ๋ฉ”์„œ๋“œ๋กœ ๋„คํŠธ์›Œํฌ์˜ ๋ฆฌ์†Œ์Šค๋ฅผ

developer.mozilla.org

 

fetch API ๋ž€?

 

  • JavaScript์—์„œ ๋„คํŠธ์›Œํฌ ์š”์ฒญ์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” API
  • ์ง๊ด€์ ์ด๊ณ  ์‚ฌ์šฉํ•˜๊ธฐ ์‰ฌ์›€
  • ๋น„๋™๊ธฐ์ ์œผ๋กœ HTTP ์š”์ฒญ์„ ๋ณด๋ƒ„

 

์ฃผ์š” ํŠน์ง•

 

1. Promise ๊ธฐ๋ฐ˜

  • fetch๋Š” Promise๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๋ฅผ ํ•  ๋•Œ 'then', 'catch' ๋ฉ”์„œ๋“œ ์‚ฌ์šฉ, async/await ๊ตฌ๋ฌธ ์‚ฌ์šฉ
  • ์ฝ”๋“œ ๊ฐ€๋…์„ฑ ์ฆ๊ฐ€, ๋ณต์žกํ•œ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๋ฅผ ๋” ์‰ฝ๊ฒŒ ํ•  ์ˆ˜ ์žˆ์Œ

2. ์ง๊ด€์ ์ธ API

  • ์ฒซ๋ฒˆ์งธ๋กœ ์ธ์ž๋กœ ์š”์ฒญํ•  URL ์ „๋‹ฌ, ๋‘๋ฒˆ์งธ ์ธ์ž๋กœ ์š”์ฒญ์˜ ์„ค์ •์„ ๊ฐ์ฒด๋กœ ์ „๋‹ฌ

3. ์‘๋‹ต ์ฒ˜๋ฆฌ

  • fetch๊ฐ€ ๋ฐ˜ํ™˜ํ•˜๋Š” Promise๋Š” Response ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜
  • Response ๊ฐ์ฒด์—๋Š” ์‘๋‹ต ์ƒํƒœ, ํ—ค๋”, ๊ทธ๋ฆฌ๊ณ  ๋ณธ๋ฌธ์„ ํฌํ•จํ•œ ์ •๋ณด๊ฐ€ ๋‹ด๊ฒจ์žˆ์Œ
  • ์‘๋‹ต๋ณธ๋ฌธ์€ json(), text(), blob() ๋“ฑ์˜ ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด ์›ํ•˜๋Š” ํ˜•์‹์œผ๋กœ ๋ณ€ํ™˜ ๊ฐ€๋Šฅ

 

๊ธฐ๋ณธ ์‚ฌ์šฉ๋ฒ•

 

// ๊ฐ„๋‹จํ•œ GET ์š”์ฒญ
fetch('https://api.example.com/data')
  .then(response => {
    if (!response.ok) {
      throw new Error('Network response was not ok ' + response.statusText);
    }
    return response.json(); // JSON ํ˜•์‹์œผ๋กœ ์‘๋‹ต ๋ณธ๋ฌธ์„ ํŒŒ์‹ฑ
  })
  .then(data => {
    console.log(data); // ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌ
  })
  .catch(error => {
    console.error('There has been a problem with your fetch operation:', error);
  });

 

 

POST ์š”์ฒญ

 

// POST ์š”์ฒญ ์˜ˆ์‹œ
fetch('https://api.example.com/data', {
  method: 'POST', // ์š”์ฒญ ๋ฐฉ๋ฒ•
  headers: {
    'Content-Type': 'application/json' // ์š”์ฒญ ํ—ค๋” ์„ค์ •
  },
  body: JSON.stringify({ // ์š”์ฒญ ๋ฐ”๋””
    name: 'John Doe',
    age: 30
  })
})
  .then(response => response.json()) // ์‘๋‹ต์„ JSON์œผ๋กœ ๋ณ€ํ™˜
  .then(data => console.log(data)) // ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌ
  .catch(error => console.error('Error:', error)); // ์—๋Ÿฌ ์ฒ˜๋ฆฌ

 

 

์ฃผ์š” ๋ฉ”์„œ๋“œ์™€ ํ”„๋กœํผํ‹ฐ

 

  • response.ok : ์‘๋‹ต์˜ ์„ฑ๊ณต ์—ฌ๋ถ€๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” Boolean ๊ฐ’
  • response.status : HTTP ์ƒํƒœ ์ฝ”๋“œ ๋ฐ˜ํ™˜
  • response.json() : ์‘๋‹ต ๋ณธ๋ฌธ์— JSON ํ˜•์‹์œผ๋กœ ํŒŒ์‹ฑ
  • response.text() : ์‘๋‹ต ๋ณธ๋ฌธ์„ ํ…์ŠคํŠธ ํ˜•์‹์œผ๋กœ ๋ฐ˜ํ™˜
  • response.blob() : ์‘๋‹ต ๋ณธ๋ฌธ์„ Blob ๊ฐ์ฒด๋กœ ๋ฐ˜ํ™˜

 

์žฅ์ 

 

  • ์ง๊ด€์ ์ด๊ณ  ๊ฐ€๋…์„ฑ์ด ์ข‹์Œ
  • ์„ค์ •๊ณผ ์‚ฌ์šฉ์ด ๊ฐ„๋‹จํ•จ
  • ๋‹ค์–‘ํ•œ ์˜ต์…˜์„ ์ง€์›ํ•จ

 

๋‹จ์ 
  • CORS ์ œํ•œ