๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

WIL

Axios

 

 

๐Ÿ“Œ Axios๋ž€?

 

๋ธŒ๋ผ์šฐ์ €, Node.js๋ฅผ ์œ„ํ•œ Promise API๋ฅผ ํ™œ์šฉํ•˜๋Š” HTTP ๋น„๋™๊ธฐ ํ†ต์‹  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๋‹ค. ๋ฐฑ์—”๋“œ์™€ ํ”„๋ก ํŠธ์—”๋“œ๋ž‘ ํ†ต์‹ ์„ ์‰ฝ๊ฒŒํ•˜๊ธฐ ์œ„ํ•ด Ajax์™€ ๋”๋ถˆ์–ด ์‚ฌ์šฉํ•œ๋‹ค. 

 

 

 

 

๐Ÿ“Œ Axios์˜ ํŠน์ง•

 

  • ์šด์˜ ํ™˜๊ฒฝ์— ๋”ฐ๋ผ ๋ธŒ๋ผ์šฐ์ €์˜ XMLHttpRequest ๊ฐ์ฒด ๋˜๋Š” Node.js์˜ http api ์‚ฌ์šฉ
  • Promise(ES6) API ์‚ฌ์šฉ
  • ์š”์ฒญ๊ณผ ์‘๋‹ต ๋ฐ์ดํ„ฐ์˜ ๋ณ€ํ˜•
  • HTTP ์š”์ฒญ ์ทจ์†Œ
  • HTTP ์š”์ฒญ๊ณผ ์‘๋‹ต์„ JSON ํ˜•ํƒœ๋กœ ์ž๋™ ๋ณ€๊ฒฝ

 

๐Ÿ“Œ Axios ์„ค์น˜ํ•˜๊ธฐ

 

> npm install axios

 

 

 

 

๐Ÿ“Œ Axios์˜ ๋ฌธ๋ฒ• ๊ตฌ์„ฑ

 

axios({
  url: 'https://test/api/cafe/list/today', // ํ†ต์‹ ํ•  ์›น๋ฌธ์„œ
  method: 'get', // ํ†ต์‹ ํ•  ๋ฐฉ์‹
  data: { // ์ธ์ž๋กœ ๋ณด๋‚ผ ๋ฐ์ดํ„ฐ
    foo: 'diary'
  }
});

 

 

 

 

๐Ÿ“Œ Axios ์š”์ฒญ(request) ํŒŒ๋ผ๋ฏธํ„ฐ ๋ฌธ๋ฒ• ์˜ˆ์‹œ

 

axios({
    method: "get", // ํ†ต์‹  ๋ฐฉ์‹
    url: "www.naver.com", // ์„œ๋ฒ„
    headers: {'X-Requested-With': 'XMLHttpRequest'} // ์š”์ฒญ ํ—ค๋” ์„ค์ •
    params: { api_key: "1234", langualge: "en" }, // ?ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์ „๋‹ฌ
    responseType: 'json', // default
    
    maxContentLength: 2000, // http ์‘๋‹ต ๋‚ด์šฉ์˜ max ์‚ฌ์ด์ฆˆ
    validateStatus: function (status) {
      return status >= 200 && status < 300; // default
    }, // HTTP์‘๋‹ต ์ƒํƒœ ์ฝ”๋“œ์— ๋Œ€ํ•ด promise์˜ ๋ฐ˜ํ™˜ ๊ฐ’์ด resolve ๋˜๋Š” reject ํ• ์ง€ ์ง€์ •
    proxy: {
      host: '127.0.0.1',
      port: 9000,
      auth: {
        username: 'mikeymike',
        password: 'rapunz3l'
      }
    }, // proxy์„œ๋ฒ„์˜ hostname๊ณผ port๋ฅผ ์ •์˜
    maxRedirects: 5, // node.js์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ ์ตœ๋Œ€์น˜๋ฅผ ์ง€์ •
    httpsAgent: new https.Agent({ keepAlive: true }), // node.js์—์„œ https๋ฅผ ์š”์ฒญ์„ ํ• ๋•Œ ์‚ฌ์šฉ์ž ์ •์˜ agent๋ฅผ ์ •์˜
})
.then(function (response) {
    // response Action
});
  • method : ์š”์ฒญ๋ฐฉ์‹. (get์ด ๋””ํดํŠธ)
  • url : ์„œ๋ฒ„ ์ฃผ์†Œ
  • baseURL : url์„ ์ƒ๋Œ€๊ฒฝ๋กœ๋กœ ์“ธ๋Œ€ url ๋งจ ์•ž์— ๋ถ™๋Š” ์ฃผ์†Œ.
  • headers : ์š”์ฒญ ํ—ค๋”
  • data : ์š”์ฒญ ๋ฐฉ์‹์ด 'PUT', 'POST', 'PATCH' ํ•ด๋‹นํ•˜๋Š” ๊ฒฝ์šฐ body์— ๋ณด๋‚ด๋Š” ๋ฐ์ดํ„ฐ
  • params : URL ํŒŒ๋ผ๋ฏธํ„ฐ ( ?key=value ๋กœ ์š”์ฒญํ•˜๋Š” url get๋ฐฉ์‹์„ ๊ฐ์ฒด๋กœ ํ‘œํ˜„ํ•œ ๊ฒƒ)
  • timeout : ์š”์ฒญ timeout์ด ๋ฐœ๋™ ๋˜๊ธฐ ์ „ milliseconds์˜ ์‹œ๊ฐ„์„ ์š”์ฒญ. timeout ๋ณด๋‹ค ์š”์ฒญ์ด ๊ธธ์–ด์ง„๋‹ค๋ฉด, ์š”์ฒญ์€ ์ทจ์†Œ๋˜๊ฒŒ ๋œ๋‹ค.
  • responseType : ์„œ๋ฒ„๊ฐ€ ์‘๋‹ตํ•ด์ฃผ๋Š” ๋ฐ์ดํ„ฐ์˜ ํƒ€์ž… ์ง€์ • (arraybuffer, documetn, json, text, stream, blob)
  • responseEncoding : ๋””์ฝ”๋”ฉ ์‘๋‹ต์— ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ ์ธ์ฝ”๋”ฉ (utf-8)
  • transformRequest : ์„œ๋ฒ„์— ์ „๋‹ฌ๋˜๊ธฐ ์ „์— ์š”์ฒญ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ๋‹ค.
    • ์š”์ฒญ ๋ฐฉ์‹ 'PUT', 'POST', 'PATCH', 'DELETE' ์— ํ•ด๋‹นํ•˜๋Š” ๊ฒฝ์šฐ์— ์ด์šฉ ๊ฐ€๋Šฅ
    • ๋ฐฐ์—ด์˜ ๋งˆ์ง€๋ง‰ ํ•จ์ˆ˜๋Š” string ๋˜๋Š” Buffer, ๋˜๋Š” ArrayBuffer๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ
    • header ๊ฐ์ฒด๋ฅผ ์ˆ˜์ • ๊ฐ€๋Šฅ
  • transformResponse : ์‘๋‹ต ๋ฐ์ดํ„ฐ๊ฐ€ ๋งŒ๋“ค์–ด์ง€๊ธฐ ์ „์— ๋ณ€ํ™˜ ๊ฐ€๋Šฅ
  • withCredentials : cross-site access-control ์š”์ฒญ์„ ํ—ˆ์šฉ ์œ ๋ฌด. ์ด๋ฅผ true๋กœ ํ•˜๋ฉด cross-origin์œผ๋กœ ์ฟ ํ‚ค๊ฐ’์„ ์ „๋‹ฌ ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • auth : HTTP์˜ ๊ธฐ๋ณธ ์ธ์ฆ์— ์‚ฌ์šฉ. auth๋ฅผ ํ†ตํ•ด์„œ HTTP์˜ ๊ธฐ๋ณธ ์ธ์ฆ์ด ๊ตฌ์„ฑ์ด ๊ฐ€๋Šฅ
  • maxContentLength: http ์‘๋‹ต ๋‚ด์šฉ์˜ max ์‚ฌ์ด์ฆˆ๋ฅผ ์ง€์ •ํ•˜๋„๋ก ํ•˜๋Š” ์˜ต์…˜
  • validateStatus : HTTP์‘๋‹ต ์ƒํƒœ ์ฝ”๋“œ์— ๋Œ€ํ•ด promise์˜ ๋ฐ˜ํ™˜ ๊ฐ’์ด resolve ๋˜๋Š” reject ํ• ์ง€ ์ง€์ •ํ•˜๋„๋ก ํ•˜๋Š” ์˜ต์…˜
  • maxRedirects : node.js์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ ์ตœ๋Œ€์น˜๋ฅผ ์ง€์ •
  • httpAgent /  httpsAgent : node.js์—์„œ http๋‚˜ https๋ฅผ ์š”์ฒญ์„ ํ• ๋•Œ ์‚ฌ์šฉ์ž ์ •์˜ agent๋ฅผ ์ •์˜ํ•˜๋Š” ์˜ต์…˜
  • proxy : proxy์„œ๋ฒ„์˜ hostname๊ณผ port๋ฅผ ์ •์˜ํ•˜๋Š” ์˜ต์…˜
  • cancelToken : ์š”์ฒญ์„ ์ทจ์†Œํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋˜์–ด ์ง€๋Š” ์ทจ์†Œํ† ํฐ์„ ๋ช…์‹œ

 

 

๐Ÿ“Œ Axios ์‘๋‹ต(response) ํŒŒ๋ผ๋ฏธํ„ฐ ๋ฌธ๋ฒ• ์˜ˆ์‹œ

 

axios({
    method: "get", // ํ†ต์‹  ๋ฐฉ์‹
    url: "www.naver.com", // ์„œ๋ฒ„
})
.then(function(response) {
  console.log(response.data)
  console.log(response.status)
  console.log(response.statusText)
  console.log(response.headers)
  console.log(response.config)
})

 

axios๋ฅผ ํ†ตํ•ด ์š”์ฒญ์„ ์„œ๋ฒ„์—๊ฒŒ ๋ณด๋‚ด๋ฉด, ์„œ๋ฒ„์—์„œ ์ฒ˜๋ฆฌ๋ฅผํ•˜๊ณ  ๋‹ค์‹œ ๋ฐ์ดํ„ฐ๋ฅผ ํด๋ผ์ด์–ธํŠธ์— ์‘๋‹ต ํ•˜๊ฒŒ ๋œ๋‹ค.

์ด๋ฅผ .then์œผ๋กœ ํ•จ์ˆ˜์ธ์ž๋กœ(response)๋กœ ๋ฐ›์•„ ๊ฐ์ฒด์— ๋‹ด์ง„ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ฐ”๋กœ ์‘๋‹ต ๋ฐ์ดํ„ฐ์ด๋‹ค.

 

response.data: {}, // ์„œ๋ฒ„๊ฐ€ ์ œ๊ณตํ•œ ์‘๋‹ต(๋ฐ์ดํ„ฐ)

response.status: 200, // `status`๋Š” ์„œ๋ฒ„ ์‘๋‹ต์˜ HTTP ์ƒํƒœ ์ฝ”๋“œ

response.statusText: 'OK',  // `statusText`๋Š” ์„œ๋ฒ„ ์‘๋‹ต์œผ๋กœ ๋ถ€ํ„ฐ์˜ HTTP ์ƒํƒœ ๋ฉ”์‹œ์ง€

response.headers: {},  // `headers` ์„œ๋ฒ„๊ฐ€ ์‘๋‹ต ํ•œ ํ—ค๋”๋Š” ๋ชจ๋“  ํ—ค๋” ์ด๋ฆ„์ด ์†Œ๋ฌธ์ž๋กœ ์ œ๊ณต

response.config: {}, // `config`๋Š” ์š”์ฒญ์— ๋Œ€ํ•ด `axios`์— ์„ค์ •๋œ ๊ตฌ์„ฑ(config)

response.request: {}
// `request`๋Š” ์‘๋‹ต์„ ์ƒ์„ฑํ•œ ์š”์ฒญ
// ๋ธŒ๋ผ์šฐ์ €: XMLHttpRequest ์ธ์Šคํ„ด์Šค
// Node.js: ClientRequest ์ธ์Šคํ„ด์Šค(๋ฆฌ๋””๋ ‰์…˜)

 

 

 

 

๐Ÿ“Œ Axios ๋‹จ์ถ• ๋ฉ”์†Œ๋“œ

 

  • GET : axios.get(url[, config])
  • POST : axios.post(url, data[, config])
  • PUT : axios.put(url, data[, config])
  • DELETE : axios.delete(url[, config])

 

 

์ถœ์ฒ˜:https://inpa.tistory.com/entry/AXIOS-%F0%9F%93%9A-%EC%84%A4%EC%B9%98-%EC%82%AC%EC%9A%A9

 

 

 

 

 

 

 

'WIL' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

ํ˜‘์—… ์ง„ํ–‰ ์ƒํ™ฉ  (0) 2023.05.22
Mini Project  (0) 2023.05.14
React_Life Cycle  (0) 2023.04.30
React_State, Props  (1) 2023.04.23
DOM๊ณผ Virtual DOM, props์™€ state  (0) 2023.04.17