JavaScript

[JavaScript] ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•œ Fetch ์™€ Axios ๋ฅผ ๋™์‹œ์— ์•Œ์•„๋ณด๊ธฐ

joheamin 2025. 2. 11. 22:48

 

๐Ÿ”ท Fetch

 

โ“Fetch๋ž€?

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ๋น„๋™๊ธฐ์ ์œผ๋กœ HTTP์š”์ฒญ์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ์ตœ์‹  API๋กœ
XHR ๋ณด๋‹ค ๋”์šฑ ๊ฐ„๊ฒฐํ•˜๊ณ  ํšจ์œจ์ ์ธ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค.

Promise๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜์—ฌ then ๋˜๋Š” async/await ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค
Response๋ฅผ ๋‘ ๋ฒˆ์— ๋‚˜๋ˆ  ๋ฐ›์œผ๋ฉฐ , Json์œผ๋กœ ๋ณ€ํ™˜์€ ์ง์ ‘ ํ•ด์ฃผ์–ด์•ผํ•œ๋‹ค.

 

 

โ“ Fetch๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ 

Fetch๋Š” ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ๊ธฐ๋ณธ์œผ๋กœ ์ œ๊ณตํ•˜๋Š” API ์ด๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ„ํŽธํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ
๊ฐ„๋‹จํ•œ ๋„คํŠธ์›Œํฌ ์š”์ฒญ์˜ ๊ฒฝ์šฐ ๊ฐ€๋ฒผ์šด ์ฝ”๋“œ๋กœ ํ™œ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

 

 

โœ๏ธ Fetch ๊ธฐ๋ณธ ๊ตฌ์กฐ

fetch("์š”์ฒญ ๋ณด๋‚ผ ์„œ๋ฒ„์˜ url")
	.then((response1) => {
		//์ฒซ๋ฒˆ์งธ response ์ฒ˜๋ฆฌ
    }).then(response2) => {
		//๋‘๋ฒˆ์งธ response ์ฒ˜๋ฆฌ    		
    }).catch((error)=>{
    	//์‹คํŒจ ์‹œ catch ์‹คํ–‰
    })

๐Ÿ‘‰ fetch๋Š” response๋ฅผ ๋‘ ๋ฒˆ์— ๋‚˜๋ˆ ์„œ ๋ฐ›์œผ๋ฉฐ

      ์ฒซ๋ฒˆ์งธ์—์„œ๋Š” ์‘๋‹ต์„ ๋ฐ›๊ณ  ๋‘๋ฒˆ์งธ์—์„œ๋Š” ์‘๋‹ต ๋ฐ์ดํ„ฐ๋ฅผ ์ถœ๋ ฅ

 

       ์‹คํŒจ ์‹œ catch๋ฌธ ์‹คํ–‰

 

 

๐Ÿ”ท Fetch ํ™œ์šฉํ•˜๊ธฐ

 

1๏ธโƒฃ ํ•จ์ˆ˜ ์‹คํ–‰ ๋ฒ„ํŠผ ์ƒ์„ฑ

  <body>
    <h1>ํŽ˜์ด์ง€๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ ์ „ ์ž…๋‹ˆ๋‹ค.</h1>
    <button onclick="test()">start</button>
    
    <div id="test"></div>
  </body>


๐Ÿ‘‰ ์‘๋‹ต ๋ฐ์ดํ„ฐ๋ฅผ ์ถœ๋ ฅํ•˜๊ธฐ ์œ„ํ•œ div ํƒœ๊ทธ๊นŒ์ง€ ์ƒ์„ฑ

 

 

2๏ธโƒฃ fetch ์ƒ์„ฑ

1. ์‘๋‹ต์„ ๋ฐ›์„ then ์ƒ์„ฑ
    response.ok : ์‘๋‹ต ์„ฑ๊ณต ์—ฌ๋ถ€๋ฅผ ๋ฐ˜ํ™˜

   function test() {
      fetch("test.html")
        .then((response) => {
          if (response.ok) return response.text();
          else throw new Error("์‹คํŒจ");
        })
    }


๐Ÿ‘‰ ์‘๋‹ต์— ์„ฑ๊ณตํ•  ๊ฒฝ์šฐ ํ•ด๋‹น ์‹คํ–‰ ๋ฌธ์„œ์˜ text๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ณ  ์‹คํŒจํ•  ๊ฒฝ์šฐ ์—๋Ÿฌ๋ฅผ ๋ฐœ์ƒ์‹œ์ผœ catch๋กœ ์ „๋‹ฌ


2.  ์‘๋‹ต ๋ฐ์ดํ„ฐ๋ฅผ ์ถœ๋ ฅํ•  then ์ƒ์„ฑ

    function test() {
      fetch("ex01_Error.html")
        .then((response) => {
          if (response.ok) return response.text();
          else throw new Error("์‹คํŒจ");
        })
        .then((response) => {
          document.getElementById("test").innerHTML = response;
        })
    }


๐Ÿ‘‰ ์ „๋‹ฌ ๋ฐ›์€ ๋ฐ์ดํ„ฐ๋ฅผ ์ง€์ •ํ•œ ์œ„์น˜์— ์ถœ๋ ฅ


3. ์‹คํŒจํ•  ๊ฒฝ์šฐ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•œ catch ์ƒ์„ฑ

    function test() {
      fetch("ex01_Error.html")
        .then((response) => {
          if (response.ok) return response.text();
          else throw new Error("์‹คํŒจ");
        })
        .then((responseJson) => {
          document.getElementById("test").innerHTML = responseJson;
        })
        .catch((error) => {
          console.log(error);
        });
    }


๐Ÿ‘‰ ์‹คํŒจ ์‹œ ์—๋Ÿฌ ๋ฉ”์‹œ์ง€ ์ฝ˜์†” ์ถœ๋ ฅ

 

 

โœ”๏ธ ๊ฒฐ๊ณผ

์„ฑ๊ณต

---------------------------------

์‹คํŒจ

 


 

๐Ÿ”ท Axios

 

โ“Axios๋ž€?

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ๋น„๋™๊ธฐ์ ์œผ๋กœ ์ฒ˜๋ฆฌ ํ•˜๊ธฐ์œ„ํ•œ HTTP ํ†ต์‹  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ
Promise๊ณผ XHR์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜์—ฌ ๋‘ ๋ฐฉ์‹์˜ ์žฅ์ ์„ ๋ชจ๋‘ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

Response๋ฅผ ํ•œ ๋ฒˆ์— ๋ฐ›์•„์˜ค๋ฉฐ ์š”์ฒญ๊ณผ ์‘๋‹ต์„ Jsonํ˜•ํƒœ๋กœ ์ž๋™์œผ๋กœ ์ฒ˜๋ฆฌํ•ด์ค€๋‹ค.

 

 

โ“ Axios๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ 

Axios๋Š” ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ณ„๋„๋กœ ์„ค์น˜ํ•ด์•ผ๋œ๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ์ง€๋งŒ
Fetch๋ณด๋‹ค ์‚ฌ์šฉ์ด ํ›จ์”ฌ ํŽธ๋ฆฌํ•˜๊ณ  ๊ธฐ๋Šฅ์ด ๋งŽ๋‹ค๋Š” ์žฅ์ ์ด์žˆ์œผ๋ฉฐ Json์œผ๋กœ ์ž๋™ ๋ณ€ํ™˜๋œ๋‹ค๋Š” ์ด์ ์ด ์žˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์š”์ฒญ ์ทจ์†Œ๋‚˜ ํƒ€์ž„์•„์›ƒ๋“ฑ ์—ฌ๋Ÿฌ ๊ธฐ๋Šฅ์ด ํ•„์š”ํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋ฉด ์ข‹๋‹ค.

 

 

โœ๏ธ Axios ๊ธฐ๋ณธ ๊ตฌ์กฐ

axios
	//(get/post/put/delete)
	.์š”์ฒญ ๋ณด๋‚ด๋Š” ๋ฐฉ์‹("์š”์ฒญํ•  ๋ฌธ์„œ")
    .then((response)=>{
    	//JSON ํ˜•ํƒœ๋กœ ์ž๋™ ๋ณ€ํ™˜๋˜์–ด ๋ฐ˜ํ™˜
    })
    .catch((error)=>{
    	//๋ฌธ์ œ ๋ฐœ์ƒ ์‹œ ์ž๋™์œผ๋กœ catch ์‹คํ–‰
    })

 

 

 

๐Ÿ”ท Axios ํ™œ์šฉํ•˜๊ธฐ

 

1๏ธโƒฃ ํ•จ์ˆ˜ ์‹คํ–‰ ๋ฒ„ํŠผ ์ƒ์„ฑ

  <body>
    <h1>ํŽ˜์ด์ง€๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ ์ „ ์ž…๋‹ˆ๋‹ค.</h1>
    <button onclick="test()">start</button>
    
    <div id="test"></div>
  </body>


๐Ÿ‘‰ ์‘๋‹ต ๋ฐ์ดํ„ฐ๋ฅผ ์ถœ๋ ฅํ•˜๊ธฐ ์œ„ํ•œ div ํƒœ๊ทธ๊นŒ์ง€ ์ƒ์„ฑ

 

 

2๏ธโƒฃ fetch ์ƒ์„ฑ

1. ์ „์†ก ๋ฐฉ์‹๊ณผ url ์„ ์ „๋‹ฌํ•˜๊ณ  then์œผ๋กœ ๋ฐ›๊ธฐ

        axios
          .get("test.html")
         .then((response) => {
            document.getElementById("test")
            	.innerHTML = `** ์„œ๋ฒ„ Response ์„ฑ๊ณต axios =><br> ${response.data}`;
      })
      } //axTest


๐Ÿ‘‰ ์‘๋‹ต์€ ์ž๋™ JSON ๋ณ€ํ™˜๋˜์–ด ๋ฐ˜ํ™˜


2.  ์—๋Ÿฌ ๋ฐœ์ƒ ์‹œ ์‹คํ–‰ํ•  catch๋ฌธ

        axios
          .get("test.html")
         .then((response) => {
            document.getElementById("test")
            	.innerHTML = `** ์„œ๋ฒ„ Response ์„ฑ๊ณต axios =><br> ${response.data}`;
      }).catch(({ response, message }) => {
            //=> ๊ฐ์ฒด ๊ตฌ์กฐ๋ถ„ํ•ด ์ ์šฉ
            //   err.response , err.message ๋“ฑ
            document.getElementById(
              "resultArea"
            ).innerHTML = `** ์„œ๋ฒ„ Response ์‹คํŒจ axios => <br> 
           err.response = ${response} <br> 
           err.response.status = ${response.status} <br> 
           err.response.headers = ${response.headers} <br> 
           err.message = ${message} `;
          });
      } //axTest


๐Ÿ‘‰ response๋ฅผ ๊ตฌ์กฐ๋ถ„ํ•ดํ•˜์—ฌ ์—๋Ÿฌ ๋ฉ”์‹œ์ง€ ์ถœ๋ ฅ