์ง๋ ์๊ฐ์๋ ์ ์ฐ๋ฆฌ๊ฐ axios๋ฅผ ์์์ผ ํ ๊น?์ ๋ํด์ ์์๋ณด์๋ค.
์ด๋ฒ ์๊ฐ์๋ ์ค์ ๋ก axios๋ฅผ ์ฌ์ฉํ๊ธฐ ์ ์ axios์ ๊ธฐ๋ณธ์ ๋ํด์ ์์๋ณด๋ ค ํ๋ค.
REST API
REST API๋ ์ฐ๋ฆฌ๊ฐ ํ๊ณ ์ถ์ ์์ ์ ๋ฐ๋ผ ๋ค๋ฅธ ๋ฉ์๋๋ก ์์ฒญํ ์ ์๋ ๊ฒ์ ๋ค๋ค ์๊ณ ์์ ๊ฒ์ด๋ค.
REST API์๋ ๋ํ์ ์ผ๋ก ๋ค์๊ณผ ๊ฐ์ HTTP ๋ฉ์๋๋ฅผ ํ์์ ์๋จ์ผ๋ก ์ด์ฉํ๋ค.
- GET : ๋ฐ์ดํฐ ์กฐํ
- POST : ๋ฐ์ดํฐ ๋ฑ๋ก ๋ฐ ์ ์ก
- PUT : ๋ฐ์ดํฐ ์์
- DELETE : ๋ฐ์ดํฐ ์ญ์
์ด์ ์ด 4๊ฐ์ง ๋ฉ์๋๋ฅผ axios์์ ์ฌ์ฉํด๋ณด์.
axios ์ค์นํ๊ธฐ
axios๋ ๋ค์ํ ๋ฐฉ๋ฒ์ผ๋ก ํ๋ก์ ํธ์ ์ค์นํ ์ ์๋๋ฐ, ์ง์ ํจํค์ง๋ฅผ ๋ค์ด๋ก๋ ๋ฐ๋ ๋ฐฉ๋ฒ์ด ์๊ฒ ์ง๋ง ์ฐ๋ฆฌ๋ npm, yarn, CDN์ ํตํ ์ค์น ๋ฐฉ๋ฒ์ ์์๋ณผ ๊ฒ์ด๋ค.
npm ์ฌ์ฉํ๊ธฐ
$ npm install axios
yarn ์ฌ์ฉํ๊ธฐ
yarn add axios
bower ์ฌ์ฉํ๊ธฐ
$ bower install axios
jsDeliver CDN ์ฌ์ฉํ๊ธฐ
<script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
unpkg CDN ์ฌ์ฉํ๊ธฐ
<script src="https://unpkg.com/axios/dist/axios.min.js"></script>
๊ฐ๊ฐ ํ๊ฒฝ์ ๋ง๋ ๋ฐฉ๋ฒ์ ๋ฐ๋ผ axios๋ฅผ ์ค์นํ์.
์๋ง ๋๋ถ๋ถ์ด npm ์ด๋ yarn ์ ์ฌ์ฉํ ๊ฒ์ด๋ค.
axios ์ฌ์ฉํ๊ธฐ
axios์ Request method์๋ ๋ค์๊ณผ ๊ฐ์ ๊ฒ๋ค์ด ์๋ค.
- GET :
axios.get(url[, config])
- POST :
axios.post(url, data[, config])
- PUT :
axios.put(url, data[, config])
- DELETE :
axios.delete(url[, config])
axios์์ Request Method๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์๋ axios
์ .
์ ๋ถํ๋ฉฐ ์๋ฌธ์๋ก Req Method
๋ฅผ ๋ฃ์ด์ฃผ๋ฉด ๋๋ค.
๊ทธ๋ฆฌ๊ณ ํด๋น ๋ฉ์๋์ ํ๋ผ๋ฏธํฐ์๋ API์ ์ฃผ์๋ฅผ ๋ฃ๋๋ค.
์ผ๋ฐ์ ์ธ axios
์ผ๋ฐ์ ์ผ๋ก ์ฐ๋ฆฌ๋ axios์ 4๊ฐ์ง ๊ธฐ๋ณธ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด ์ง์ ํด์ผํ ๊ฒ๋ค์ด ์๋ค.
4๊ฐ์ง ๊ธฐ๋ณธ Params
- Method
- Url
- Data (optional)
- Params (optional)
์ด 4๊ฐ์ง ๋ฐฉ๋ฒ์ axios์ ์๋ ค์ค์ผ ํ๋ค.
axios({
method: "get",
url: "url",
responseType: "type"
}).then(function (response) {
// response Action
});
์์ ๊ฐ์ด ์ฌ์ฉํ๋ ๊ฒ์ด ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ axios์ ๋ํ ์ฌ์ฉ๋ฒ์ด๋ค.
๋ง์ฝ POST ๋ฉ์๋์์ data๋ฅผ ์ ์กํ๊ธฐ ์ํด์๋ url ๋ฐ์ data Object๋ฅผ ์ถ๊ฐํ๋ฉด ๋๋ค.
๋จ์ถ๋ axios ๋ฉ์๋
์๊น ์์์ ๋ง ํ๋ฏ ๋จ์ถ๋ axios์ ๋ฉ์๋๋ฅผ ์ฌ์ฉํด์ ์์ 4๊ฐ์ง ๊ธฐ๋ณธ ํ๋ผ๋ฏธํฐ๋ฅผ ์๋ตํ๊ฑฐ๋ ๊ฐ๊ฒฐํ๊ฒ ์ฌ์ฉํ ์ ์๋ค.
1. axios.get()
get ๋ฉ์๋๋ฅผ ๋จ์ถ๋ ์์ฑ์ผ๋ก ์ฌ์ฉํ๋ ค๋ฉด get ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค.
get ๋ฉ์๋์๋ 2๊ฐ์ง ์ํฉ์ด ํฌ๊ฒ ์กด์ฌํ๋ค.
- ๋จ์ ๋ฐ์ดํฐ(ํ์ด์ง ์์ฒญ, ์ง์ ๋ ์์ฒญ) ์์ฒญ์ ์ํํ ๊ฒฝ์ฐ
- ํ๋ผ๋ฏธํฐ ๋ฐ์ดํฐ๋ฅผ ํฌํจ์ํค๋ ๊ฒฝ์ฐ (์ฌ์ฉ์ ๋ฒํธ์ ๋ฐ๋ฅธ ์กฐํ)
2๊ฐ์ง ์ํฉ์ ๋ฐ๋ผ params: {}
๊ฐ์ฒด๊ฐ ์กด์ฌํ ์ง ์ํ ์ง๊ฐ ๊ฒฐ์ ๋๋ค.
๋จ์ ๋ฐ์ดํฐ๋ฅผ ์์ฒญํ ๊ฒฝ์ฐ
// callback ์ ์ฌ์ฉํ ๋,
axios.get("url")
.then(function (response) {
// response
}).catch(function (error) {
// ์ค๋ฅ๋ฐ์์ ์คํ
}).then(function() {
// ํญ์ ์คํ
});
// async await ํจ์๋ฅผ ์ฌ์ฉํ ๋,
try {
const data = await axios.get("url");
} catch {
// ์ค๋ฅ ๋ฐ์์ ์คํ
}
ํ๋ผ๋ฏธํฐ ๋ฐ์ดํฐ๋ฅผ ํฌํจ์ํค๋ ๊ฒฝ์ฐ
axios.get("url", {
params: {
id: 123
}
})
.then(function (response) {
// response
}).catch(function (error) {
// ์ค๋ฅ๋ฐ์์ ์คํ
}).then(function() {
// ํญ์ ์คํ
});
// async await ํจ์๋ฅผ ์ฌ์ฉํ ๋,
try {
const data = await axios.get("url", params: { id: 123 });
} catch {
// ์ค๋ฅ ๋ฐ์์ ์คํ
}
2. axios.post()
post ๋ฉ์๋์๋ ์ผ๋ฐ์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ Message Body์ ํฌํจ์์ผ ๋ณด๋ธ๋ค.
์์์ ๋ดค๋ get ๋ฉ์๋์์ params
๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ์ ๋น์ทํ๊ฒ ์ํ๋๋ค.
axios.post("url", {
username: "",
password: ""
})
.then(function (response) {
// response
}).catch(function (error) {
// ์ค๋ฅ๋ฐ์์ ์คํ
}).then(function() {
// ํญ์ ์คํ
});
// async await ํจ์๋ฅผ ์ฌ์ฉํ ๋,
try {
const data = await axios.post("url");
} catch {
// ์ค๋ฅ ๋ฐ์์ ์คํ
}
3. axios.put()
put ๋ฉ์๋๋ ์๋ฒ ๋ด๋ถ์ ์ผ๋ก get -> post
๊ณผ์ ์ ๊ฑฐ์น๊ธฐ ๋๋ฌธ์ post ๋ฉ์๋์ ๋น์ทํ ํํ์ด๋ค.
axios.put("url", {
username: "",
password: ""
})
.then(function (response) {
// response
}).catch(function (error) {
// ์ค๋ฅ๋ฐ์์ ์คํ
}).then(function() {
// ํญ์ ์คํ
});
// async await ํจ์๋ฅผ ์ฌ์ฉํ ๋,
try {
const data = await axios.put("url", { username: "", password: ""});
} catch {
// ์ค๋ฅ ๋ฐ์์ ์คํ
}
4. axios.delete()
delete ๋ฉ์๋์๋ ์ผ๋ฐ์ ์ผ๋ก body๊ฐ ๋น์ด์๋ค.
๊ทธ๋์ ํํ๋ get๊ณผ ๋น์ทํ ํํ๋ฅผ ๋์ง๋ง ํ ๋ฒ delete ๋ฉ์๋๊ฐ ์๋ฒ์ ๋ค์ด๊ฐ๊ฒ ๋๋ค๋ฉด ์๋ฒ ๋ด์์ ์ญ์ process๋ฅผ ์งํํ๊ฒ ๋๋ค.
์ผ๋ฐ์ ์ธ delete
axios.delete('/user?ID=12345')
.then(function (response) {
// handle success
console.log(response);
})
.catch(function (error) {
// handle error
console.log(error);
})
.then(function () {
// always executed
});
// async await ํจ์๋ฅผ ์ฌ์ฉํ ๋,
try {
const data = await axios.delete("url");
} catch {
// ์ค๋ฅ ๋ฐ์์ ์คํ
}
๋ง์ ๋ฐ์ดํฐ๋ฅผ ์์ฒญํ ๊ฒฝ์ฐ
ํ์ง๋ง query๋ params๊ฐ ๋ง์์ ธ์ ํค๋์ ๋ง์ ์ ๋ณด๋ฅผ ๋ด์ ์ ์์ ๋๋ ๋ค์๊ณผ ๊ฐ์ด ๋ ๋ฒ์งธ ์ธ์์ data๋ฅผ ์ถ๊ฐํด์ค ์ ์๋ค.
axios.delete('/user?ID=12345',{
data: {
post_id: 1,
comment_id: 13,
username: "foo"
}
})
.then(function (response) {
// handle success
console.log(response);
})
.catch(function (error) {
// handle error
console.log(error);
})
.then(function () {
// always executed
});
axios ์ธ์คํด์ค ์์ฑํ๊ธฐ
์ด๋ ๊ฒ ์ฐ๋ฆฌ๋ http method๋ฅผ axios๋ก ์กฐ์ํ๋ ๋ฐฉ๋ฒ์ ๋ํด์ ์์๋ณด์๋ค.
๊ทธ๋ฆฌ๊ณ ์ ๋์ํ๋ค.
์ค์ ๋ฆฌ์กํธ ํ๋ก์ ํธ์์ axios ์ฌ์ฉํ๊ธฐ
์ค์ ๋ก ํ๋ก์ ํธ์์๋ API์ ์คํ, ์๋ฒ์ ์ฃผ์, credentials ์ค์ ์ ๋ด๋นํ๋ API.js ๋ผ๋ ํ์ผ์ ๋ง๋ค๊ณ axios ์ ๊ธฐ๋ณธ ์ค์ ์ ๋ํด์ ์ง์ ํด์ฃผ๊ณ ๊ฐ๊ฐ์ ์๋น์ค์์ ๊ฐ์ ธ๊ฐ ์ฌ์ฉํ๋ ํํ๋ก ๊ตฌํ๋๋ค.
์๋ ๋์ฌ ์์ค์ฝ๋๋ ํ์ฌ ์ด์์ค์ธ ์๋น์ค์ test.profile ์ฝ๋ ์ผ๋ถ๋ถ์ด๋ค.
์ด๋ ๊ฒ ๋จผ์ axios ์ ์ธ์คํด์ค๋ฅผ ์์ฑํด์ API๋ผ๋ ๋ณ์์ ๋ด๊ณ API๋ฅผ ๋ฐํ์ํจ๋ค.
๊ทธ๋ฆฌ๊ณ ์ค์ ๋ก ํต์ ์ ์ํ ํจ์๊ฐ ์กด์ฌํ๋ ํ์ผ์์ ๋ค์๊ณผ ๊ฐ์ด API ๋ฅผ ๋ถ๋ฌ์์ url ๋ง ๋ช ์ํด์ ์ฌ์ฉํ๊ณค ํ๋ค.
์ด๋ ๊ฒ ํ๋ค๋ฉด ์ฅ์ ๊ณผ ๋จ์ ์ด ๊ฐ๊ฐ ์กด์ฌํ๊ฒ ์ง๋ง, ๋ด๊ฐ ์๊ฐํ๋ ํฐ ์ฅ์ ์ 2๊ฐ์ง ์ด๋ค.
- ํต์ ์ ํ๋ ๋ชจ๋ ํ์ผ์์ axios ๋ฅผ import ํ์ง ์์๋ ๋๋ค.
- baseURL ์ด๋ header ์ ๊ฐ์ ์ค์ ์ ํ๋์ ํ์ผ์์ ํ ์ ์๋ค.
- ์ฝ๋์ ๊ฐ๋ ์ฑ์ด ์ข์์ง๋ค.
์์ API.js ํ์ผ ํ๋๋ง ์ด์ฉํด์ 2๊ฐ์ ์๋น์ค ์ฝ๋์์ ์ฌ์ฉํ ์ ์๋ค๋ ๊ฒ์ด๋ค.
๊ทธ๋ฆฌ๊ณ ๊ฐ๊ฐ ํ์ผ์์๋ async await ์ผ๋ก ์ฝ๋ฐฑ์ ์ฒ๋ฆฌํ์ฌ ํต์ ํ๋ค.
๋ง์ฝ Error Handling ์ ์ํ ์์ธ ์ฒ๋ฆฌ๊ฐ ํ์ํ ๋ก์ง์ด ์กด์ฌํ๋ค๋ฉด, ๋ค์๊ณผ ๊ฐ์ด try-catch ๋ฌธ์ ์ด์ฉํ๊ธฐ๋ ํ๋ค.
+ ์ฐธ๊ณ ๋ก
๋ง์ฝ axios ๋ฅผ ์ด์ฉํ ์ค์ ์ด์ ํ๋ก์ ํธ๋ ์ฝ๋๊ฐ ๊ถ๊ธํ๋ค๋ฉด ์ด์ ์ ์ ๊ฐ ์งํํ๋ ํ๋ก์ ํธ์ธ maple-cheater github ์์ ํ์ธํ์ค ์ ์์ต๋๋ค.
ํด๋น ํ๋ก์ ํธ์์๋ axios ๋ฅผ ํฌํจํ์ฌ ์๋์ ํค์๋์ ๋ํด์๋ ํ์ธํ ์ ์์ต๋๋ค
- redux & redux-thunk
- styled-components
- material-ui usage
- frontend backend ์ฌ์ด์ ํต์
- ์ธ์ฆ๊ณผ ์ธ๊ฐ
- next js template
๋๊ธ