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. React ์์๋ ์ฃผ๋ก Axios ๋ฅผ
1.2. React Native ์์๋ ์ฃผ๋ก Fetch ๋ฅผ ์ฌ์ฉ - ์ฅ๋จ์ ๋์ด์์๋ ๋์น ์ฑ ์ ์๋ฏ, axios๊ฐ ํ์ฅ์ฑ์ด๋ ๊ธฐ๋ฅ ๋ถ๋ถ์์ ๋ ์ด์ ์ ๋ง์ด ๊ฐ์ง๊ณ ์๋ค.
2.1. ์์ฒญ ์ทจ์ ๊ฐ์ ๊ธฐ๋ฅ์ ์ด์ฉํ๋ ค๋ฉด fetch๊ฐ ์๋ axios ๊ฐ์ ๋ค๋ฅธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํด์ฃผ์ด์ผ ํ๋ค. - ๊ฐ์ ๋งฅ๋ฝ์ผ๋ก fetch๊ฐ ๋ ๊ฐ๋ณ๊ณ , axios๊ฐ ์๋์ ์ผ๋ก ์ข ๋ ๋ฌด๊ฒ๋ค๊ณ ์๊ฐํ๋ฉด ๋๋ค.
๊ฐ๋ฐ ๋ค ํด๋๊ณ ์ด์ ์ผ ์ฅ๋จ์ ์์๋ณด๋ ๐ต