์ฐ๋ฆฌ๊ฐ ์ผ๋ฐ์ ์ธ ์๋ฐ์คํฌ๋ฆฝํธ์์ API๋ฅผ ์ฐ๋ํ๊ธฐ ์ํด์๋ ๋ณดํต fetch-Api๋ฅผ ์ฌ์ฉํ๊ณค ํ๋ค.
๋ฆฌ์กํธ ๋ํ ์๋ฐ์คํฌ๋ฆฝํธ built-in ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ค ํ๋์ธ fetch-api๋ํ ํ๋ฅญํ api ์ฐ๋ ๋ชจ๋์ด๋ค.
ํ์ง๋ง fetch-api๋ ์๋ฐ์คํฌ๋ฆฝํธ์ built-in ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ผ๋ ํน์ฑ ๋๋ถ์ธ์ง ๋ง์ ์ฌ๋๋ค์ React์์ axios๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ์ ํธํ๋ค.
๋ฆฌ์กํธ์์ fetch api๋ฅผ ์ฌ์ฉํ๋ฉด ์๋๋ ๊ฒ์ ์๋์ง๋ง ์ ์ฌ๋๋ค์ axios๋ฅผ ์ ํธํ ๊น?
์๋ก ๋น๊ต๋ฅผ ํ๋ ์ฝ๋๋ฅผ ๋ด๋ณด์.
axios vs Fetch-api
// fetch
const url = 'http://localhost/test.htm';
const options = {
method: 'POST',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json;charset=UTF-8'
},
body: JSON.stringify({
a: 10,
b: 20
})
};
fetch(url, options)
.then(response => {
console.log(response.status);
});
------------ ------------ ------------ ------------ ------------ ------------ ------------
// axios
const options = {
url: 'http://localhost/test.htm',
method: 'POST',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json;charset=UTF-8'
},
data: {
a: 10,
b: 20
}
};
axios(options)
.then(response => {
console.log(response.status);
});
๋์ผํ ๊ธฐ๋ฅ์ ์ํํ๋ ์ฝ๋๊ณ ๊ฐ๋จํ ์ฝ๋์ด๋ค.
์ฌ๊ธฐ์ ๋ณด๋ฉด ์ฐจ์ด์ ์ ํ ๋ฒ ์ฐพ์๋ณด์.
fetch()
๋ body ํ๋กํผํฐ๋ฅผ ์ฌ์ฉํ๊ณ , axios๋ body ํ๋กํผํฐ๋ฅผ ์ฌ์ฉํ๋ค.- fetch์ body ๋ถ๋ถ์
stringify()
๋์ด์ง๋ค. - fetch์์๋ url์ด fetch()ํจ์์ ์ธ์๋ก ๋ค์ด๊ฐ๋ค.
- axios์์ url์ด option ๊ฐ์ฒด๋ก ๋ค์ด๊ฐ๋ค.
์ฌ๊ธฐ์๋ ์ฐจ์ด์ ์ ์ฐพ์ ์ ์์ผ๋ ์ข ๋ ๋ค์ํ ์ด์ ์์์ ์ฐจ์ด์ ์ ์ฐพ์๋ณด์.
Axios | Fetch | |
ํธํ์ฑ | IE11๊ณผ ๊ฐ์ด ์ค๋๋ ๋ชจ๋ ๋ธ๋ผ์ฐ์ ์์ ์ง์ ๊ฐ๋ฅ | Chrome 42+, Firefox 39+๋ฑ๊ณผ ๊ฐ์ ํ์ ๋ ๋ธ๋ผ์ฐ์ ์์๋ง ๊ฐ๋ฅ |
Response TImeOut | ๊ฐ๋จ | ๋ณต์ก |
Automatic JSON data transform | ๊ฐ๋ฅ | ๋ถ๊ฐ๋ฅ |
๊ฒฐ๋ก
Axios๋ ๋๋ถ๋ถ HTTP ํต์ ์ ์๊ตฌ์ฌํญ์ ์ปดํฉํธํ ํจํค์ง๋ก์จ ์ฌ์ฉํ๊ธฐ ์ฝ๊ฒ ์ค๊ณ๋์๋ค.
์์์ ๋ณด์ฌ์คฌ๋ฏ ๋ธ๋ผ์ฐ์ ์์ ์ ๊ณตํ๋ fetch()๋ฉ์๋๋ฅผ ์ด์ฉํด์ axios๋ฅผ ์๋ฒฝํ ์ฌํํ ์ ์์ง๋ง, ๊ทธ ์๊ฐ์ ๋ค๋ฅธ ๊ณณ์ ํฌ์ํ๋ ๊ฒ์ด ์ข๋ค๊ณ ๋ค ํ๋ค.
๊ทธ๋ผ ์ด์ ์ ์ฐ๋ฆฌ๊ฐ axios๋ฅผ ๋ฐฐ์์ผ ํ๋์ง์ ๋ํ ๊ฐ๋จํ ์ค๋ช ์ด ๋์์ ๊ฒ์ด๋ผ ์๊ฐํ๊ณ ์ง์ง Axios์ ๋ํด์ ์์๋ณด๋๋ก ํ์.
Axios
Axios๋ Promise ๊ธฐ๋ฐ์ HTTP client๋ผ๊ณ axios ๊ณต์ github์ ๊ธฐ์ฌ๋์ด์๋ค.
๋ํ axios๋ Promise ๊ธฐ๋ฐ์ด๊ณ ์ฐ๋ฆฌ์๊ฒ async/await ์ฝ๋๋ฅผ ๋งค์ฐ ์ฝ๊ฒ ๊ตฌํํ ์ ์๊ฒ ํด์ค๋ค.
์ด๋ฐ axios๋ฅผ ์ฌ์ฉํ๋ฉด ์ฐ๋ฆฌ์๊ฒ ์ข ๋ค์ํ ์ฅ์ ๋ค์ ์ ๊ณตํด์ค๋ค.
axios์ ์ฅ์
- ์ค๋๋ ๋ธ๋ผ์ฐ์ ์์๋ ์ง์ํ๋ค.
- ์์ ์ ์ค๋จํ ์ ์๋ค.
- response timeout์ ์ฝ๊ฒ ์ง์ ํ ์ ์๋ค.
- CSRF ๋ณดํธ ๊ธฐ๋ฅ์ด ๋ด์ฅ๋์ด์๋ค.
- upload progress๋ฅผ ์ง์ํ๋ค.
- JSON์ ์๋์ผ๋ก ๋ณํํด์ค๋ค.
์ด ์ธ์๋ ๋ค์ํ ์ด์ ๊ฐ ์์ง๋ง ํฐ ํน์ง์ ์ด๋ ๋ค.
axios๊ฐ ์์๋๋ผ๋ฉด..
๋ค์์๊ฐ๋ถํฐ ์ ๋๋ก ๋ฐฐ์๋ณผ ๊ฒ์ด์ง๋ง ์ง๊ธ ๊ฐ๋จํ๊ฒ ์ด๋ป๊ฒ axios๊ฐ ์๊ฒผ๋์ง ์์๋ณด์.
์ผ๋จ axios๋ฅผ ์ฌ์ฉํ์ง ์๋๋ค๊ณ ๊ฐ์ ํ๋ฉด ์ฐ๋ฆฌ๋ XMLHttpRequest()
๋ฅผ ์ฌ์ฉํด์ open
๊ณผ onreadystatechange
๋ฑ์ ์ฌ์ฉํด์ ๋ณต์กํ ์์
๋ค์ ํด์ค์ผ ํ๋ค.
let xhr = new XMLHttpRequest();
xhr.open('GET', 'url', true);
xhr.setRequestHeader('Content-type', 'application/json');
xhr.onreadystatechange = () => {
if (xhr.readyState === 4 && xhr.status === 200) {
(perform some code);
} else {
(handle error)
}
};
xhr.send();
์ฐ๋ฆฌ๊ฐ axios๋ฅผ ๋ชจ๋ฅด๊ณ ํต์ ์ ํ๋ค๋ฉดonreadystatechange
๋ ๋ฌด์์ด๊ณ , asyncronoseํ๊ฒ ์์
์ ํ ๋๋ ๋ ๋ค๋ฅธ ๊ณ ๋ฏผ๋ค์ ํด์ผํ๋ค.
ํ์ง๋ง ์ด๋ฐ ๋ถํธํจ์ axios์์๋ ๋ง๋ฒ์ฒ๋ผ ๊ฐ๋จํ๊ฒ ์ํํด์ค๋ค.
axios.get('url')
.then((response) => {
console.log(response);
})
.catch((response) => {
console.log(error);
});
๋ post ์ฝ๋๋ฅผ ๋น๊ตํด๋ณด์.
axios.post( 'url',
{
contact: 'James',
email: 'james.h@gmail.com'
},
{
headers:{
'Content-type': 'application/json',
'Accept': 'application/json'
}
}
)
.then((response) => {
console.log(response.data);
})
.catch((response) => {
console.log('Error!)
});
์๊น get ๋ณด๋ค๋ ๋ณต์กํ์ง๋ง ์ด๋ฅผ XMLHttpRequest()
๋ก ๋ฐ๊ฟ๋ณด์. ์์ฃผ ๋ณต์ฅํฐ์ง๋ค.
let xhr = new XMLHttpRequest();
xhr.open('POST', 'url', true);
xhr.setRequestHeader('Content-type', 'application/json');
xhr.setRequestHeader('Accept', 'application/json');
xhr.onreadystatechange = () => {
if (xhr.readyState === 4 && xhr.status === 200) {
console.log(xhr.response);
} else {
(handle error)
}
};
xhr.send();
์ด์ ๋๋ ๋ ์ด์ axios ์๋ ์ธ์์ ์ค๋ช ํ๊ณ ์ถ์ง ์์์ก๋ค.
์ถฉ๋ถํ ์ด์ ๋๋ฉด ์ ์ฐ๋ฆฌ๊ฐ axios๋ฅผ ๋ฐฐ์์ผ ํ๊ณ ์ฌ์ฉํด์ผํ๋์ง์ ๋ํ ๊ถ๊ธ์ฆ๊ณผ ๋ชฉ์ ์ฑ์ด ํด๊ฒฐ๋์๋ค๊ณ ์๊ฐํ๋ค.
์ด์ ๋ค์ ์๊ฐ ๋ถํฐ๋ axios๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ํด์ ์์๋ณผ ๊ฒ์ด๊ณ , ์ค์ ๋ก ๊ณต๊ณต api๋ฅผ ํตํด axios๋ฅผ ์ค์ ์์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ํด์ ์์๋ณด์.
๋๊ธ