Front-End/Library

Library] Axios

์™•๊ฐ€๐Ÿ‘ 2023. 6. 27. 16:06
728x90
๋ฐ˜์‘ํ˜•

Axios

Node.js์™€ ๋ธŒ๋ผ์šฐ์ €๋ฅผ ์œ„ํ•œ HTTP ๋น„๋™๊ธฐ ํ†ต์‹  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ์„œ, Promise ํƒ€์ž…์ž…๋‹ˆ๋‹ค.

BackEnd ↔ FrontEnd ์‚ฌ์ด์˜ ํ†ต์‹ ํ•˜๋Š” ์ˆ˜๋‹จ์œผ๋กœ, JS์—์„œ ์ฃผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ajax๋‚˜ fetch์™€ ๊ฐ™๋‹ค๊ณ  ๋ณด๋ฉด ๋ฉ๋‹ˆ๋‹ค.

 

  • Promise๊ธฐ๋ฐ˜์ด๋ผ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃจ๋Š”๋ฐ ํŽธ๋ฆฌํ•จ
  • Response๊ฐ€ ์ž๋™์œผ๋กœ JSONํ˜•ํƒœ๋กœ ๋ณ€๊ฒฝ
  • CSRF๋ณดํ˜ธ ๊ธฐ๋Šฅ์ด ๋‚ด์žฅ
  • ๊ธฐ๋ณธ์ ์œผ๋กœ ๋‚ด์žฅ๋œ ๊ฒƒ์ด ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋”ฐ๋กœ ์„ค์น˜๊ฐ€ ํ•„์š”

๋“ฑ์œผ๋กœ ๋ณผ ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค. fetch์™€ ajax๋ฅผ ๋ณด์™„ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

CSRF(XSRF) : ์›น์‚ฌ์ดํŠธ ์ทจ์•ฝ์  ๊ณต๊ฒฉ์˜ ํ•˜๋‚˜๋กœ, ์‚ฌ์šฉ์ž๊ฐ€ ์ž์‹ ์˜ ์˜์ง€์™€๋Š” ๋ฌด๊ด€ํ•˜๊ฒŒ ๊ณต๊ฒฉ์ž๊ฐ€ ์˜๋„ํ•œ ํ–‰์œ„(CRUD  ๋“ฑ)๋ฅผ ํŠน์ • ์›น์‚ฌ์ดํŠธ์— ์š”์ฒญํ•˜๊ฒŒ ํ•˜๋Š” ๊ณต๊ฒฉ

 

 


 

 

์„ค์น˜

npm install axios
yarn add axios

 

 


 

 

๋ฌธ๋ฒ•

๊ธฐ๋ณธ ๊ตฌ์„ฑ

axios({
  url: 'http://localhost:3000/account/user',	
  method: 'get'
  data: {
    email: 'wanga@naver.com'
    }
})
.then((response)=>{
  console.log(response);
});

ํฐ ํ‹€์—์„œ ๋ดค์„ ๋•Œ, ํฌ๊ฒŒ ๋‹ค๋ฅผ ๊ฒƒ ์—†๋Š” ๋ฌธ๋ฒ•์ž…๋‹ˆ๋‹ค.

 

 


 

 

Request

์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” ์˜ต์…˜

  • url : ํ†ต์‹ ํ•  ์„œ๋ฒ„ ์ฃผ์†Œ
  • method : ์š”์ฒญ ๋ฐฉ์‹(get, post, patch, put, delete)
  • data : get์„ ์ œ์™ธํ•œ ์š”์ฒญ๋ฐฉ์‹์—์„œ body์— ๋ณด๋‚ด๋Š” ๋ฐ์ดํ„ฐ
  • params : query string์„ ๊ฐ์ฒด๋กœ ๋‹ด์•„์ฃผ๋Š” ๋ฐ์ดํ„ฐ
  • headers : ์š”์ฒญ ํ—ค๋”
  • withCredentials : cross-site access-control ์š”์ฒญ์„ ํ—ˆ์šฉ ์œ ๋ฌด. true์‹œ cross-origin์œผ๋กœ ์ฟ ํ‚ค๊ฐ’ ์ „๋‹ฌ
  • xsrfCookieName : xsrf ํ† ํฐ ๊ฐ’์œผ๋กœ ์‚ฌ์šฉํ•  ์ฟ ํ‚ค์˜ ์ด๋ฆ„. default๋Š” 'XSRF-TOKEN'.
    ๋ณดํ†ต 'csrftoken'์œผ๋กœ ๊ฐ’์„ ์ฃผ๋Š” ๋“ฏํ•˜๋‹ค.
  • xsrfHeaderName: xsrf ํ† ํฐ ๊ฐ’์„ ์šด๋ฐ˜ํ•˜๋Š” HTTP ํ—ค๋”์˜ ์ด๋ฆ„์œผ๋กœ BE์™€ ๋งž์ถฐ์•ผ ๋œ. default๋Š” 'X-XSRF-TOKEN'
    ๋ณดํ†ต 'X-CSRFToken'์œผ๋กœ ๊ฐ’์„ ์ฃผ๋Š” ๋“ฏํ•˜๋‹ค.
withCredentials
FE์™€ BE์˜ ์„œ๋ฒ„๊ฐ€ ๋‹ค๋ฅด๋ฉด ์„œ๋กœ ์ฟ ํ‚ค๋ฅผ ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜ ์ „๋‹ฌํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
๋”ฐ๋ผ์„œ Client์—์„œ๋„ ์š”์ฒญ ๋ณด๋‚ผ ๋•Œ ํ•ด๋‹น ์˜ต์…˜์€ true๋กœ ์ค˜์•ผ ๋˜์ง€๋งŒ, ์„œ๋ฒ„์—์„œ๋„ Access-Control-Allow-Credentials ํ—ค๋”๋ฅผ true๋กœ ์ค˜์•ผ ๋ฉ๋‹ˆ๋‹ค.

 

์•Œ์•„๋‘๋ฉด ์ข‹์„ ๋“ฏํ•œ ์˜ต์…˜

  • baseURL : url์„ ์ƒ๋Œ€๊ฒฝ๋กœ๋กœ ์‚ฌ์šฉํ•  ๋•Œ, ์•ž์— ๋ถ™๋Š” ์ฃผ์†Œ
    http://localhost:3000/account/user๋ฅผ ์˜ˆ๋กœ ๋“ค์–ด,
    baseURL์ด http://localhost:3000/account/ ์—ฌ๊ธฐ๊นŒ์ง€๋ผ๊ณ  ๊ฐ€์ •ํ•˜๊ณ , url์€ /user์ด๋ผ๊ณ  ํ•ด์„œ
    ์ตœ์ข…์ ์ธ url์ด http://localhost:3000/account/user ์ด๊ฒŒ ๋œ๋‹ค.
  • responseType : default๋Š” json์ด๋ผ ๋ฐ”๊ฟ€ ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์ง€๋Š” ์•Š์ง€๋งŒ ํ˜น์‹œ๋‚˜ ๋ฐ”๊พธ๊ฒŒ ๋œ๋‹ค๋ฉด ์„ค์ •
    text, blob, arraybuffer ๋“ฑ...
  • timeout : ์š”์ฒญ์ด ์„ค์ •๋œ ์‹œ๊ฐ„๋ณด๋‹ค ๊ธธ์–ด์ง€๊ฒŒ ๋˜๋ฉด ์š”์ฒญ์„ ์ทจ์†Œ.
  • validateStatus : HTTP์‘๋‹ต ์ƒํƒœ์ฝ”๋“œ์— ๋Œ€ํ•ด resolve ๋˜๋Š” reject๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Œ.

๋” ๋งŽ๊ธฐ๋Š” ํ•˜์ง€๋งŒ, ๋”ฐ๋กœ ์‚ฌ์šฉํ•ด ๋ณผ ๋•Œ๋งˆ๋‹ค ์ถ”๊ฐ€ํ•ด๋„ ๋  ๋“ฏ์‹ถ์Šต๋‹ˆ๋‹ค.

 

 


 

 

Response

.then์œผ๋กœ ์ฐ์–ด์„œ response๋กœ ๋ฐ›์•„ ๊ฐ์ฒด์— ๋‹ด๊ธด ๋ฐ์ดํ„ฐ์ž…๋‹ˆ๋‹ค.

๋‚ด์šฉ์€ request ํ•  ๋•Œ๋ž‘ ๋‹ฌ๋ฆฌ, ๊ทธ๋ƒฅ console.log(response) ์ฐ์–ด๋ณด๋ฉด ๋‹ค ๋‚˜์˜ค๊ธฐ ๋•Œ๋ฌธ์— ํ•„์š”ํ•œ ๊ฑฐ ๊ฐ€์ ธ๋‹ค ์“ฐ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

 

 


 

 

method ๋‹จ์ถ• ์‚ฌ์šฉ๋ฒ•

get, post, put, patch, delete๋ฅผ option์— method๋กœ ์ฃผ์ง€ ์•Š๊ณ  ํ•จ์ˆ˜ํ˜•์‹์œผ๋กœ ๊ฐ„๊ฒฐํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

axios.get(url, {option});
axios.delete(url, {option});

axios.post(url, {data}, {option});
axios.put(url, {data}, {option});
axios.patch(url, {data}, {option});

 

delete์˜ ๊ฒฝ์šฐ, queryString๋กœ ๋ณด๋‚ด๊ธฐ์— ๋ถ€๋‹ด์Šค๋Ÿฝ๊ฑฐ๋‚˜ ์–ด๋ ค์›€์ด ์žˆ์„ ๋•Œ, option์— data๋กœ ๋‹ด์•„์„œ ๋ณด๋‚ด๋ฉด ๋ฉ๋‹ˆ๋‹ค.

 

 


 

 

๊ธฐ๋ณธ์ ์œผ๋กœ axios์— ๋Œ€ํ•œ ์‚ฌ์šฉ ์„ค๋ช…์ž…๋‹ˆ๋‹ค.
React๋ฅผ ํ•˜๋ฉด์„œ๋Š” axios ์™ธ์—๋Š” ์ž˜ ์•ˆ ์“ฐ๋Š” ๋“ฏํ•˜๋‹ค. ๋ฐ”๋‹๋ผJSํ• ๋–„๋Š” fetch๋ž‘ ajax๋ฅผ ์ฃผ๋กœ ์ผ๋˜ ๊ฑฐ ๊ฐ™์€๋ฐ..

์ถ”๊ฐ€์ ์œผ๋กœ instance, ์ด๋ฏธ์ง€ ๋‹ค์šด๋กœ๋“œ, default๊ฐ’ ์„ค์ •, interceptors, ์—๋Ÿฌ ํ•ธ๋“ค๋ง(validateStatus) ๋“ฑ
๋‹ค๋ค„๋ณด๋ฉด์„œ ๊ณต๋ถ€ํ•  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค.

 

728x90

'Front-End > Library' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

Library] SWR : ์‘์šฉ_Mutate & Revalidation  (0) 2023.07.03
Library] SWR : ์‘์šฉ  (0) 2023.07.03
Library] SWR  (0) 2023.07.03
Library] Swiper  (0) 2023.06.29
Library] Axios : ์‘์šฉ  (0) 2023.06.28