JavaScript

JavaScript fetch()

kohi โ˜• 2022. 11. 27. 17:11

๐Ÿ›ฐ๏ธ Synchronous VS Asynchronous


Synchronous(๋™๊ธฐ)

์š”์ฒญ ์‹œ ์‹œ๊ฐ„์ด ์–ผ๋งˆ๊ฐ€ ๊ฑธ๋ฆฌ๋“  ์š”์ฒญํ•œ ์ž๋ฆฌ์—์„œ ๊ทธ ๊ฒฐ๊ณผ๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ์†Œ์š” ์‹œ๊ฐ„๊ณผ ๊ด€๊ณ„์—†์ด ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์˜ฌ ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ ธ๋‹ค๊ฐ€ ๊ทธ ๋‹ค์Œ์„ ์‹คํ–‰ํ•œ๋‹ค. ์„ค๊ณ„๊ฐ€ ๋งค์šฐ ๊ฐ„๋‹จํ•˜๊ณ  ์ง๊ด€์ ์ด๋‹ค.

 

Asynchronous(๋น„๋™๊ธฐ)

๊ฒฐ๊ณผ๊ฐ€ ์ฃผ์–ด์ง€๋Š” ์†Œ์š” ์‹œ๊ฐ„ ๋™์•ˆ ๋‹ค๋ฅธ ์ž‘์—…์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ๋™๊ธฐ ๋ฐฉ์‹๋ณด๋‹ค ์„ค๊ณ„๊ฐ€ ๋ณต์žกํ•˜์ง€๋งŒ ์ž์›์„ ํšจ์œจ์ ์œผ๋กœ ์“ธ ์ˆ˜ ์žˆ๋‹ค. fetch API๋Š” ๋น„๋™๊ธฐ ๋ฐฉ์‹์ด๋‹ค.

 

 

๐Ÿ›ฐ๏ธ fetch API


fetch API๋Š” Promise๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋™์ž‘ํ•œ๋‹ค.

 

let promise = fetch(url, [options])

 

  • url ⇒ ์ ‘๊ทผํ•˜๊ณ ์ž ํ•˜๋Š” URL
  • options ⇒ ์„ ํƒ ๋งค๊ฐœ๋ณ€์ˆ˜, method๋‚˜ header ๋“ฑ์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Œ

 

options์— ์•„๋ฌด๊ฒƒ๋„ ๋„˜๊ธฐ์ง€ ์•Š์œผ๋ฉด ์š”์ฒญ์€ GET ๋ฉ”์„œ๋“œ๋กœ ์ง„ํ–‰๋˜์–ด url๋กœ๋ถ€ํ„ฐ ์ฝ˜ํ…์ธ ๊ฐ€ ๋‹ค์šด๋กœ๋“œ ๋œ๋‹ค. ์‹ค์ œ ์‚ฌ์šฉ ๊ตฌ์กฐ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

 

fetch(url, (options))
  .then((res)=> {
    //url๋กœ๋ถ€ํ„ฐ fetch์˜ ํ˜ธ์ถœ์ด ์„ฑ๊ณตํ–ˆ์„ ๋•Œ์˜ ๋™์ž‘
  })
  .catch((error)=>{
    //url๋กœ๋ถ€ํ„ฐ fetch์˜ ํ˜ธ์ถœ์ด ์‹คํŒจํ–ˆ์„ ๋•Œ์˜ ๋™์ž‘
  });

 

ํ˜ธ์ถœ ์„ฑ๊ณต ์‹œ์˜ ์‘๋‹ต ๊ฐ์ฒด res๋Š” HTTP์˜ status, ์‘๋‹ต ํ—ค๋”, ์‘๋‹ต ๋ณธ์ฒด(body) ๋“ฑ์„ ์ทจ๋“ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๐Ÿ›ฐ๏ธ GET VS POST


HTTP ํ†ต์‹  ๋ฐฉ์‹์—๋Š” GET ๋ฐฉ์‹๊ณผ POST ๋ฐฉ์‹์ด ์žˆ๋‹ค. GET ๋ฐฉ์‹์€ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ ๋“ฑ์„ ์กฐํšŒํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฉ์‹์ด๊ณ , POST ๋ฐฉ์‹์€ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„์˜ ๋ฐ์ดํ„ฐ ๋“ฑ์„ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ์ˆ˜์ •ํ•˜๊ธฐ ์œ„ํ•œ ํ†ต์‹  ๋ฐฉ์‹์ด๋‹ค.

 

  • GET
fetch(url, (options))
  .then((res)=> {
    //url๋กœ๋ถ€ํ„ฐ fetch์˜ ํ˜ธ์ถœ์ด ์„ฑ๊ณตํ–ˆ์„ ๋•Œ์˜ ๋™์ž‘
  })
  .catch((error)=>{
    //url๋กœ๋ถ€ํ„ฐ fetch์˜ ํ˜ธ์ถœ์ด ์‹คํŒจํ–ˆ์„ ๋•Œ์˜ ๋™์ž‘
  });

 

  • POST
fetch(url, {
  method: "POST",
  headers: {
  },
  body: {
  }
  })
  .then((res)=> {
  })
  .catch((error)=>{
  });

 

๋ณด๋‚ด๋Š” ๋ฐ์ดํ„ฐ์˜ ์–‘์ด ๋งŽ๊ฑฐ๋‚˜, ๋น„๋ฐ€๋ฒˆํ˜ธ ๋“ฑ ๊ฐœ์ธ ์ •๋ณด๋ฅผ ๋ณด๋‚ผ ๋•Œ POST ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ์ƒˆ๋กœ์šด ํฌ์ŠคํŠธ๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” method ์˜ต์…˜์„ POST๋กœ ์ง€์ •ํ•ด ์ฃผ๊ณ , headers ์˜ต์…˜์œผ๋กœ JSON ํฌ๋งท์„ ์‚ฌ์šฉํ•œ๋‹ค๊ณ  ์•Œ๋ ค์•ผ ํ•œ๋‹ค. body ์˜ต์…˜์—๋Š” ์š”์ฒญ ์ „๋ฌธ์„ JSON ํฌ๋งท์œผ๋กœ ๋„ฃ๋Š”๋‹ค.

 

๐Ÿ›ฐ๏ธ fetch API - response ๊ฐ์ฒด


<!DOCTYPE html>
<html>
    <body>
        <input
            type="button"
            value="fetch"
            onclick="
      fetch('test').then(function(response){
        console.log(response);
       });
        "
        />
    </body>
</html>

 

fetch()๋ฅผ ํ†ตํ•ด ์š”์ฒญํ–ˆ์„ ๋•Œ, ์‘๋‹ตํ•œ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ€์ง„ ๊ฐ์ฒด๋ฅผ response ๊ฐ์ฒด๋ผ๊ณ  ํ•œ๋‹ค. response ๊ฐ์ฒด์˜ ์†์„ฑ ์ค‘ ํ•˜๋‚˜์ธ status๋ฅผ ํ†ตํ•ด ์„œ๋ฒ„๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ์ž‘๋™ํ–ˆ๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

์›น ์„œ๋ฒ„๊ฐ€ ์‘๋‹ตํ•˜๋ฉด์„œ ํŒŒ์ผ์„ ์ •์ƒ์ ์œผ๋กœ ์ž˜ ์ฐพ์•˜๋‹ค๋Š” ์˜๋ฏธ๋กœ status์˜ ๊ฐ’์œผ๋กœ 200์„ ๋‚˜ํƒ€๋‚ธ๋‹ค. ํŒŒ์ผ์ด ๋น„์–ด ์žˆ๋Š” ๊ฒฝ์šฐ 404๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค.

 

<!DOCTYPE html>
<html>
    <body>
        <input
            type="button"
            value="fetch"
            onclick="
      fetch('test2').then(function(response){
        console.log(response);
        if(response.status == '404') {
            alert('file not found')
        }
       });
        "
        />
    </body>
</html>

 

 

Reference

https://bamtory29.tistory.com/entry/Javascript-Fetch-API

 

[Javascript] Fetch API

Ajax ํ†ต์‹ ์„ ์ด์šฉํ•  ๋•Œ ์ง€๋‚œ ํฌ์ŠคํŠธ์—์„œ ๋‹ค๋ฃฌ XMLHttpRequest, jQuery, Fetch ๋“ฑ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด ์ค‘ XHR ๋ฐฉ์‹์€ ์‚ฌ์šฉ๋ฒ•์ด๋‚˜ ๊ฐ€๋…์„ฑ๋ฉด์„ ์œ„ํ˜‘ํ•˜๊ณ , ์ œ์ด์ฟผ๋ฆฌ๋Š” ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒฝํ–ฅ์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— Fetch๋ฅผ ์‚ฌ

bamtory29.tistory.com

https://velog.io/@eunjin/JavaScript-fetch-%ED%95%A8%EC%88%98-%EC%93%B0%EB%8A%94-%EB%B2%95-fetch-%ED%95%A8%EC%88%98%EB%A1%9C-HTTP-%EC%9A%94%EC%B2%AD%ED%95%98%EB%8A%94-%EB%B2%95

 

[JavaScript] fetch ํ•จ์ˆ˜ ์“ฐ๋Š” ๋ฒ•, fetch ํ•จ์ˆ˜๋กœ HTTP ์š”์ฒญํ•˜๋Š” ๋ฒ•

fetch ํ•จ์ˆ˜๋Š” XMLHttpRequest ๊ฐ์ฒด๋ณด๋‹ค ์ตœ๊ทผ์— ๋‚˜์˜จ, HTTP ์š”์ฒญ ์ „์†ก ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” Web API๋‹ค. ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„์˜ค๊ธฐ ์œ„ํ•ด ์Šต๊ด€์ฒ˜๋Ÿผ ์“ฐ๋˜ fetch์— ๋Œ€ํ•ด ์ •๋ฆฌํ•ด๋ณด์•˜๋‹ค.

velog.io

https://www.youtube.com/watch?v=ufjCFdG_4fo 

https://www.youtube.com/watch?v=iyFHfzCRHA8 

https://nyang-in.tistory.com/142?category=835170 

 

[Ajax] fetch API - response ๊ฐ์ฒด

์•ˆ๋…•ํ•˜์„ธ์š”, ์ด๋ฒˆ ์‹œ๊ฐ„์—๋Š” fetch API์—์„œ response ๊ฐ์ฒด์— ๋Œ€ํ•˜์—ฌ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์ต๋ช…ํ•จ์ˆ˜ ์ € ์ฃผ์„ ์ฒ˜๋ฆฌ๋œ fetch api ๋ถ€๋ถ„์„ ๋ณด๋ฉด, then ์•ˆ์— function์ด ๋“ค์–ด๊ฐ€ ์žˆ๋Š” ๊ดด์ƒํ•œ ๋ชจ์–‘์„ ํ•˜๊ณ  ์žˆ๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜

nyang-in.tistory.com