header-img
Info :
728x90

What is difference between Fetch and Axios ? JS์—์„œ ๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š” HTTP ๊ธฐ๋ฐ˜ ๋น„๋™๊ธฐ ํ†ต์‹  ๋ฐฉ๋ฒ•์ธ Axios ์™€ Fetch ์˜ ์ฐจ์ด์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๋„๋ก ํ•˜์ž.

Axios/Fetch ์ƒ๊ฒจ๋‚œ ๋ฐฐ๊ฒฝ

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

→ ์ƒˆ๋กœ์šด url์„ ํ˜ธ์ถœํ•  ๋•Œ๋งˆ๋‹ค ๋ชจ๋“  ํŽ˜์ด์ง€๋ฅผ ์ƒˆ๋กญ๊ฒŒ ๊ทธ๋ ค์•ผ ํ•˜๋Š” ๋“ฑ์˜ ํ”ํžˆ ์ƒ๊ฐํ•˜๋Š” ๋™๊ธฐ์ ์œผ๋กœ ์ •๋ณด๋ฅผ ์š”์ฒญํ–ˆ์„ ๋•Œ ๋– ์˜ฌ๋ฆด ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ๊ฐ€ ์ผ์–ด๋‚˜๋Š” ๋“ฏ

๊ทธ๋ž˜์„œ *๋น„๋™๊ธฐ์ *์œผ๋กœ ์ •๋ณด๋ฅผ ์š”์ฒญํ•˜๋Š” ๊ฒŒ ํ•„์š”ํ–ˆ๋‹ค!

๋น„๋™๊ธฐ์ ์œผ๋กœ ์ฒ˜๋ฆฌ๋ฅผ ํ•˜๊ฒŒ ๋˜๋ฉด ํŽ˜์ด์ง€๋ฅผ ๋ Œ๋”๋งํ•˜๊ณ  → ํ•„์š”์— ๋”ฐ๋ผ ๋ฐ์ดํ„ฐ๋งŒ ๋ฐ”๊ฟ”์˜ค๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด๋‹ค
์„œ๋ฒ„๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ชผ๊ธˆ๋งŒ ๋ณด๋‚ด์ค˜๋„ ๋˜์„œ ์ข‹๊ณ .. ํด๋ผ์ด์–ธํŠธ๋Š” ์กฐ๊ธˆ๋งŒ ๋ Œ๋”๋งํ•ด๋„ ๋˜์„œ ๋ถ€ํ•˜๊ฐ€ ์ ๊ฒŒ ๊ฑธ๋ฆฌ๊ฒŒ ๋˜๋Š” ๊ฑฐ๋‹ค. ๊ฐœ์ด๋“

ํ˜น์‹œ๋‚˜ ๋น„ํšจ์œจ์ ์ด๋ผ๊ณ  ํ•˜๋Š” ๋ชจ์ฒด์ธ XHR ์ด ๊ถ๊ธˆํ•˜๋‹ค๋ฉด XMLHttpRequest API Document ๊ณผ XMLHttpRequest Document ๋ฅผ ์ฝ์–ด๋ณด๋„๋ก ํ•˜์ž. ๊ฐœ๋…๊ณผ ์‚ฌ์šฉ๋ฒ• ์ •๋„๊ฐ€ ๋‚˜์™€์žˆ๋‹ค.

Axios

Axios ๋Š” Promise ๊ธฐ๋ฐ˜์œผ๋กœ node.js์™€ browser๋ฅผ ์—ฐ๊ฒฐํ•ด์ฃผ๋Š” HTTP ํ†ต์‹  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๋‹ค.

๋น„๋™๊ธฐ๋กœ HTTP ํ†ต์‹ ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ด์ฃผ๋ฉฐ return์„ promise ๊ฐ์ฒด๋กœ ์ œ๊ณตํ•ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์— reponse ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃจ๊ธฐ๋„ ํ›จ์”ฌ ์‰ฝ๊ฒŒ ๋˜์–ด์žˆ๋‹ค.

AXIOS์˜ POST ๋ฐฉ๋ฒ• ์˜ˆ์‹œ

axios({
	method: 'post',
	url: 'ํ˜ธ์ถœํ•  url',
	data: {
      //์š”์ฒญํ•  ๋•Œ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ 
      ๋ฐ์ดํ„ฐ๋ช…1: "๋ฐ์ดํ„ฐ๊ฐ’1",
      ๋ฐ์ดํ„ฐ๋ช…2: "๋ฐ์ดํ„ฐ๊ฐ’2",
      ...
    }
});

์ด๋Ÿฐ ํ˜•ํƒœ๋ฅผ ๋ˆ๋‹ค.

Fetch

ES6 ๋ฒ„์ „ ๋ถ€ํ„ฐ javascript์˜ ๋‚ด์žฅ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋กœ ๋“ค์–ด์˜ค๊ฒŒ ๋œ๋‹ค.
Fetch ๋˜ํ•œ Promise ๊ธฐ๋ฐ˜์œผ๋กœ ๋งŒ๋“ค์–ด์กŒ๊ธฐ ๋•Œ๋ฌธ์—, Axios์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃจ๋Š” ๊ฒŒ ์–ด๋ ต์ง€ ์•Š๊ณ , ๋‚ด์žฅ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ผ๋Š” ์žฅ์ ์œผ๋กœ ์ธํ•˜์—ฌ ํŽธ๋ฆฌ์„ฑ ๋ถ€๋ถ„์—์„œ ๊ฐ•์ ์„ ๋ˆ๋‹ค.

Fetch์˜ POST ๋ฐฉ๋ฒ• ์˜ˆ์‹œ

const url = '์š”์ฒญํ•  url ์ฃผ์†Œ'
const option = {
	method: 'POST',
	header: {
      'Accept': 'application/json',
      'Content-Type': 'application/json';charset='UTP-8'
    },
  	body: JSON.stringify({
    	๋ฐ์ดํ„ฐ๋ช…1: '๋ฐ์ดํ„ฐ๊ฐ’1',
      	๋ฐ์ดํ„ฐ๋ช…2: '๋ฐ์ดํ„ฐ๊ฐ’2'
    })
}

fetch(url,options)
	.then(response => console.log(response))

Axios vs. Fetch

Axios
์žฅ์ 

  • Fetch ์—์„œ๋Š” ์ง€์›ํ•˜์ง€ ์•Š๋Š” ๊ธฐ๋Šฅ๋“ค์ด ์žˆ๋‹ค. (Response Timeout ์ฒ˜๋ฆฌ ๋ฐฉ๋ฒ• ๋“ฑ..)
  • Cross Browsing ๋ฐฉ๋ฒ•์— ํŠนํ™”๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ธŒ๋ผ์šฐ์ € ํ˜ธํ™˜์„ฑ์ด ๋›ฐ์–ด๋‚˜๋‹ค.
    [ Cross Browsing: ์›น ํŽ˜์ด์ง€ ์ œ์ž‘ ์‹œ์— ๋ชจ๋“  ๋ธŒ๋ผ์šฐ์ €์—์„œ ๊นจ์ง€์ง€ ์•Š๊ณ  ์˜๋„ํ•œ ๋Œ€๋กœ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๋‚˜์˜ค๋Š” ์ž‘์—…์„ ์˜๋ฏธํ•œ๋‹ค. ํ˜ธํ™˜์„ฑ ]

๋‹จ์ 

  • ๋ณ„๋„์˜ ๋ชจ๋“ˆ์„ ์„ค์น˜ ํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค.

Fetch
์žฅ์ 

  • ๋‚ด์žฅ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๊ธฐ์— ์‚ฌ์šฉํ•˜๋Š” ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ๋น„๊ต์  ์•ˆ์ •์ ์ด์ง€ ์•Š์„ ๋•Œ ์‚ฌ์šฉํ•˜๋ฉด ์ข‹๋‹ค.
  • ๋‚ด์žฅ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๊ธฐ์— ๋ณ„๋„์˜ import ํ–‰์œ„๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š๋Š”๋‹ค.
    ๋‹จ์ 
  • internet explorer ์˜ ๊ฒฝ์šฐ fetch๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š๋Š” ๋ฒ„์ „๋„ ์กด์žฌํ•œ๋‹ค. (๋ธŒ๋ผ์šฐ์ € ํ˜ธํ™˜์„ฑ์ด ์ƒ๋Œ€์ ์œผ๋กœ ๋–จ์–ด์ง)
  • Error handling ๊ด€๋ จํ•œ ์ด์Šˆ ์กด์žฌ.
    • Catch์— ๊ฑธ๋ ธ์„ ๋•Œ ์ดํ›„ .then(~)์„ ์‹คํ–‰ํ•จ. Axios์˜ ๊ฒฝ์šฐ์—๋Š” .then(~) ์„ ์‹คํ–‰ํ•˜์ง€ ์•Š๊ณ , console ์ฐฝ์— ํ•ด๋‹น ์—๋Ÿฌ์— ๋Œ€ํ•œ log๋ฅผ ๋ณด์—ฌ์ค€๋‹ค.

๊ทธ๋ž˜์„œ ?

  1. ๋Œ€๋ถ€๋ถ„ (๋ณต์žกํ•˜์ง€ ์•Š์€ ํ”„๋กœ๊ทธ๋žจ) ๋‘ ๊ฐ€์ง€ ๋‹ค ์‚ฌ์šฉํ•˜๋Š”๋ฐ ๋ฌด๋ฆฌ๊ฐ€ ์—†๊ณ , ์ž˜ ๋™์ž‘ํ•œ๋‹ค.
    1.1. React ์—์„œ๋Š” ์ฃผ๋กœ Axios ๋ฅผ
    1.2. React Native ์—์„œ๋Š” ์ฃผ๋กœ Fetch ๋ฅผ ์‚ฌ์šฉ
  2. ์žฅ๋‹จ์  ๋‚˜์—ด์—์„œ๋„ ๋ˆˆ์น˜ ์ฑŒ ์ˆ˜ ์žˆ๋“ฏ, axios๊ฐ€ ํ™•์žฅ์„ฑ์ด๋‚˜ ๊ธฐ๋Šฅ ๋ถ€๋ถ„์—์„œ ๋” ์ด์ ์„ ๋งŽ์ด ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.
    2.1. ์š”์ฒญ ์ทจ์†Œ ๊ฐ™์€ ๊ธฐ๋Šฅ์„ ์ด์šฉํ•˜๋ ค๋ฉด fetch๊ฐ€ ์•„๋‹Œ axios ๊ฐ™์€ ๋‹ค๋ฅธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค.
  3. ๊ฐ™์€ ๋งฅ๋ฝ์œผ๋กœ fetch๊ฐ€ ๋” ๊ฐ€๋ณ๊ณ , axios๊ฐ€ ์ƒ๋Œ€์ ์œผ๋กœ ์ข€ ๋” ๋ฌด๊ฒ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค.

๊ฐœ๋ฐœ ๋‹ค ํ•ด๋†“๊ณ  ์ด์ œ์•ผ ์žฅ๋‹จ์  ์•Œ์•„๋ณด๋Š” ๐Ÿต

728x90
๋”๋ณด๊ธฐ
FRONTEND/React