roqkf

[JavaScript] fetch API ๋ณธ๋ฌธ

๐Ÿ’ป Development/JavaScript

[JavaScript] fetch API

ahyeon7 2022. 11. 25. 01:29

๐Ÿค” fetch API๋ž€?

  • HTTP ํŒŒ์ดํ”„๋ผ์ธ์„ ๊ตฌ์„ฑํ•˜๋Š” ์š”์ฒญ๊ณผ ์‘๋‹ต ๋“ฑ์˜ ์š”์†Œ๋ฅผ JavaScript์—์„œ ์ ‘๊ทผํ•˜๊ณ  ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ œ๊ณต
  • fetch๋Š” '๊ฐ€์ ธ์˜ค๋‹ค'๋ผ๋Š” ๋œป์œผ๋กœ Request๋‚˜ Response์™€ ๊ฐ™์€ ๊ฐ์ฒด๋ฅผ ์ด์šฉํ•ด์„œ HTTP ํŒŒ์ดํ”„๋ผ์ธ์„ ๊ตฌ์„ฑํ•˜๋Š” ์š”์†Œ๋ฅผ ์กฐ์ž‘ํ•˜๊ณ  ์›๊ฒฉ์ง€์—์„œ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ค๊ธฐ ์œ„ํ•ด์„œ ์‚ฌ์šฉํ•œ๋‹ค
  • Promise๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋™์ž‘ํ•œ๋‹ค

์˜ˆ๋ฅผ ๋“ค๋ฉด ํฌํ„ธ ์‚ฌ์ดํŠธ์—์„œ ์‹œ์‹œ๊ฐ๊ฐ ๋ณ€ํ•˜๋Š” ์ •๋ณด์™€ ๋Š˜ ๊ณ ์ •์ ์ธ ์ •๋ณด๊ฐ€ ๋”ฐ๋กœ ๋ถ„๋ฆฌ๋ผ ์žˆ๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ์ด ์ค‘์—์„œ ์ตœ์‹  ๋‰ด์Šค, ๋‚ ์”จ/ ๋ฏธ์„ธ๋จผ์ง€ ์ •๋ณด๋Š” ๋™์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„์•ผ ํ•˜๋Š” ์ •๋ณด๋“ค๋กœ ์ด๋Ÿด ๋•Œ ๋งŽ์€ ์›น์‚ฌ์ดํŠธ์—์„œ ํ•ด๋‹น ์ •๋ณด๋งŒ ์—…๋ฐ์ดํŠธํ•˜๊ธฐ ์œ„ํ•ด์„œ ์š”์ฒญ API๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ๊ทธ ์ค‘์—์„œ ๋Œ€ํ‘œ์ ์ธ Fetch API๋ฅผ ์ด์šฉํ•ด์„œ ํ•ด๋‹น ์ •๋ณด๋ฅผ ์›๊ฒฉ URL๋กœ๋ถ€ํ„ฐ ๋ถˆ๋Ÿฌ์˜ค๋Š” ๊ฒฝ์šฐ, ์›๊ฒฉ URL๋กœ๋ถ€ํ„ฐ ์ •๋ณด๋ฅผ ๋ฐ›์•„์™€์„œ ํŠน์ •ํ•œ DOM ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ์—…๋ฐ์ดํŠธํ•œ๋‹ค. ์ด๋ ‡๋“ฏ, Fetch API๋Š” ํŠน์ •ํ•œ URL๋กœ๋ถ€ํ„ฐ ์ •๋ณด๋ฅผ ๋ฐ›์•„์˜ค๋Š” ์—ญํ• ์„ ํ•˜๋Š”๋ฐ ์ด ๊ณผ์ •์ด ๋น„๋™๊ธฐ์ ์œผ๋กœ ์ด๋ฃจ์–ด์ง€๊ธฐ ๋•Œ๋ฌธ์— ๊ฒฝ์šฐ์— ๋”ฐ๋ผ์„œ๋Š” ์‹œ๊ฐ„์ด ๊ฑธ๋ฆด ์ˆ˜ ์žˆ๋‹ค. ์ด๋ ‡๊ฒŒ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฌ๋Š” ์ž‘์—…์ด ์š”๊ตฌ๋  ๋•Œ๋Š” blocking์ด ๋ฐœ์ƒํ•ด์„œ๋Š” ์•ˆ ๋˜๋ฏ€๋กœ, ํŠน์ • DOM์— ์ •๋ณด๊ฐ€ ํ‘œ์‹œ๋  ๋•Œ๊นŒ์ง€ ๋กœ๋”ฉ ์ฐฝ์„ ๋Œ€์‹  ๋„์šฐ๋Š” ๊ฒฝ์šฐ๋„ ์žˆ๋‹ค.

๐Ÿค” HTTP๋ž€?

  • ํ•˜์ดํผํ…์ŠคํŠธ ์ „์†ก ํ”„๋กœํ† ์ฝœ์€ HTML๊ณผ ๊ฐ™์€ ํ•˜์ดํผ๋ฏธ๋””์–ด ๋ฌธ์„œ๋ฅผ ์ „์†กํ•˜๊ธฐ ์œ„ํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ ˆ์ด์–ด ํ”„๋กœํ† ์ฝœ
  • ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ ์‚ฌ์ด์— ์ด๋ฃจ์–ด์ง€๋Š” ์š”์ฒญ/์‘๋‹ต ํ”„๋กœํ† ์ฝœ

์˜ˆ๋ฅผ ๋“ค๋ฉด ์›น ๋ธŒ๋ผ์šฐ์ €(ํด๋ผ์ด์–ธํŠธ)๊ฐ€ HTTP๋ฅผ ํ†ตํ•ด ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ์›นํŽ˜์ด์ง€๋‚˜ ๊ทธ๋ฆผ ์ •๋ณด๋ฅผ ์š”์ฒญํ•˜๋ฉด ์„œ๋ฒ„๋Š” ์ด ์š”์ฒญ์— ์‘๋‹ตํ•˜์—ฌ ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ํ•ด๋‹น ์‚ฌ์šฉ์ž์—๊ฒŒ ์ „๋‹ฌํ•˜๊ฒŒ ๋œ๋‹ค. ์ด ์ •๋ณด๊ฐ€ ๋ชจ๋‹ˆํ„ฐ์™€ ๊ฐ™์€ ์ถœ๋ ฅ ์žฅ์น˜๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉ์ž์—๊ฒŒ ๋‚˜ํƒ€๋‚˜๋Š” ๊ฒƒ.

๐Ÿ’ฅ fetch API ์‚ฌ์šฉ๋ฒ•

  • fetch API๋ฅผ ์ด์šฉํ•ด์„œ ๋ฐ์ดํ„ฐ ์š”์ฒญํ•˜๊ธฐ
fetch(url, options)
  .then((response) => console.log("response:", response))
  .catch((error) => console.log("error:", error));
  1. fetch(url): ํ•จ์ˆ˜์˜ ์ฒซ๋ฒˆ์งธ ์ธ์ž๋กœ URL๋ฅผ ๋ฐ›๋Š”๋‹ค
  2. fetch(options): ํ•จ์ˆ˜์˜ ๋‘๋ฒˆ์งธ ์ธ์ž๋กœ ์˜ต์…˜ ๊ฐ์ฒด๋ฅผ ๋ฐ›์œผ๋ฉฐ Promise ํƒ€์ž…์˜ ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜
    -> ๋ฐ˜ํ™˜๋œ ๊ฐ์ฒด๊ฐ€ API์˜ ํ˜ธ์ถœ์„ ์„ฑ๊ณตํ–ˆ์„ ๋•Œ๋Š” ์‘๋‹ต(response) ๊ฐ์ฒด๋ฅผ resolveํ•˜๋ฉฐ, ์‹คํŒจํ–ˆ์„ ๋•Œ๋Š” ์˜ˆ์™ธ(error) ๊ฐ์ฒด๋ฅผ rejectํ•œ๋‹ค

+ fetch() ํ•จ์ˆ˜๋Š” ๋””ํดํŠธ๋กœ GET ๋ฐฉ์‹์œผ๋กœ ์ž‘๋™ํ•˜๊ณ  GET ๋ฐฉ์‹์€ ์š”์ฒญ ์ „๋ฌธ์„ ๋ฐ›์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์˜ต์…˜ ์ธ์ž๊ฐ€ ํ•„์š” ์—†๋‹ค
+ ๋Œ€๋ถ€๋ถ„ REST API๋Š” JSON ํ˜•ํƒœ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์‘๋‹ตํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์‘๋‹ต ๊ฐ์ฒด๋Š” json() ๋ฉ”์„œ๋“œ๋ฅผ ์ œ๊ณต

let url =
  "https://koreanjson.com/posts/1";
fetch(url)
  .then((response) => response.json())
  .then((json) => console.log(json))
  .catch((error) => console.log(error));

let url = // ์ฃผ์†Œ๋ฅผ ๋‹ด์€ url ๋ณ€์ˆ˜
  "https://koreanjson.com/posts/1";
fetch(url) // url์„ fetch๋ฅผ ํ†ตํ•ด์„œ ๊ฐ€์ง€๊ณ  ์˜ด or ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ  ๊ทธ๋ƒฅ ์ฃผ์†Œ๋ฅผ ๋ฌธ์ž์—ด๋กœ ๋„ฃ์„ ์ˆ˜ ์žˆ์Œ
  .then((response) => response.json()) // ๊ฐ€์ง€๊ณ  ์˜ค๋ฉด json์— ์š”์ฒญ
  .then((json) => console.log(json)) 
  .catch((error) => console.log(error)); // ์—๋Ÿฌ์ฒ˜๋ฆฌ

์ถœ์ฒ˜ codestates, https://www.daleseo.com/js-window-fetch/

'๐Ÿ’ป Development > JavaScript' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

Promise, async, await  (0) 2023.01.24
[JavaScript] ์žฌ๊ท€ ํ•จ์ˆ˜  (0) 2022.12.15
[JavaScript] part-1/script.js  (0) 2022.11.25
[JavaScript] Node.js  (0) 2022.11.25
[JavaScript] ๋น„๋™๊ธฐ  (0) 2022.11.25