2 ๋ถ„ ์†Œ์š”

๐Ÿ“š Axios

Axios ๋ž€

  • Axios๋Š” Vue์—์„œ ๊ถŒ๊ณ ํ•˜๋Š” HTTP ๋น„๋™๊ธฐ ํ†ต์‹  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๋‹ค.
  • Promise ๊ธฐ๋ฐ˜์˜ HTTP ํ†ต์‹  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๋ฉฐ ์ƒ๋Œ€์ ์œผ๋กœ ๋‹ค๋ฅธ HTTP ํ†ต์‹  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค์— ๋น„ํ•ด ๋ฌธ์„œํ™”๊ฐ€ ์ž˜๋˜์–ด ์žˆ๊ณ  API๊ฐ€ ๋‹ค์–‘ํ•˜๋‹ค.
  • axios.get(URL) -> Promise ๊ฐ์ฒด ๋ฆฌํ„ด
  • then ( ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์„ ๋•Œ ), catch ( ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•  ๋•Œ ) ์‚ฌ์šฉ๊ฐ€๋Šฅ
  • Promise
    • ์„œ๋ฒ„์— ๋ฐ์ดํ„ฐ๋ฅผ ์š”์ฒญํ•˜์—ฌ ๋ฐ›์•„์˜ค๋Š” ๋™์ž‘๊ณผ ๊ฐ™์€ ๋น„๋™๊ธฐ ๋กœ์ง ์ฒ˜๋ฆฌ์— ์œ ์šฉํ•œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
    • ์ž๋ฐ” ์Šคํฌ๋ฆฝํŠธ๋Š” ๋‹จ์ผ ์Šค๋ ˆ๋“œ๋กœ ํŠน์ • ๋กœ์ง์˜ ์ฒ˜๋ฆฌ๊ฐ€ ๋๋‚ ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ ค์ฃผ์ง€ ์•Š๋Š”๋‹ค.
    • ๋”ฐ๋ผ์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์š”์ฒญํ•˜๊ณ  ๋ฐ›์•„์˜ฌ ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ ธ๋‹ค๊ฐ€ ํ™”๋ฉด์— ๋‚˜ํƒ€๋‚ด๋Š” ๋กœ์ง์„ ์‹คํ–‰ํ•ด์•ผ ํ•  ๋•Œ ์ฃผ๋กœ promise๋ฅผ ํ™œ์šฉ

Axios ์„ค์น˜

  • CDN ๋ฐฉ์‹
<script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
  • NPM ๋ฐฉ์‹
    • npm install axios

Axios ๋Œ€ํ‘œ API

  • axios.get(โ€˜URL ์ฃผ์†Œโ€™).then().catch()
    • ํ•ด๋‹น URL ์ฃผ์†Œ์— ๋Œ€ํ•ด HTTP GET ์š”์ฒญ์„ ๋ณด๋ƒ„
    • ์„œ๋ฒ„์—์„œ ๋ณด๋‚ธ ๋ฐ์ดํ„ฐ๋ฅผ ์ •์ƒ์ ์œผ๋กœ ๋ฐ›์•„์˜ค๋ฉด then() ์•ˆ์— ์ •์˜๋œ ๋กœ์ง์ด ์‹คํ–‰๋˜๊ณ 
    • ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„์˜ฌ ๋•Œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด catch()์— ์ •์˜ํ•œ ๋กœ์ง์ด ์‹คํ–‰
  • axios.post(โ€˜URL ์ฃผ์†Œโ€™).then().catch()
    • ํ•ด๋‹น URL ์ฃผ์†Œ์— ๋Œ€ํ•ด HTTP POST ์š”์ฒญ์„ ๋ณด๋ƒ„
    • then()๊ณผ catch() ๋ฐฉ์‹์€ get ๋ฐฉ์‹๊ณผ ๋™์ผ
  • axios({์˜ต์…˜ ์†์„ฑ})
    • HTTP ์š”์ฒญ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ์†์„ฑ๋“ค์„ ์ง์ ‘ ์ •์˜ํ•ด์„œ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๋‹ค.
    • ๋ฐ์ดํ„ฐ ์š”์ฒญ์„ ๋ณด๋‚ผ URL, HTTP ์š”์ฒญ๋ฐฉ์‹, ๋ณด๋‚ด๋Š” ๋ฐ์ดํ„ฐ ์œ ํ˜• ๋“ฑ๋“ฑ

Axios ์˜ˆ์‹œ

axios(config)

json ์˜ˆ์‹œ ํŒŒ์ผ ( jsonplaceholder )์„ ์ด์šฉํ•œ ์‹ค์Šต

  • GET
// jsonplaceholder
const URL = "https://jsonplaceholder.typicode.com/todos";

axios({
  method: "get",
  url: URL,
  responseType: "json",
}).then((response) => {
  console.log(response.data[1]);
});
  • ๊ฒฐ๊ณผ


  • POST
// jsonplaceholder
const URL = "https://jsonplaceholder.typicode.com/todos";

axios({
  method: "post",
  url: URL,
  data: {
    userId: "123",
    id: "123",
    title: "JS",
  },
}).then((response) => {
  console.log(response.data);
});
  • ๊ฒฐ๊ณผ


axios.get(url[,config])

Read

  • ๊ธฐ๋ณธ ๋ฌธ๋ฒ•
// 1.
axios({
  method: "get",
  url: "/board/10",
});

// 2. axios() default ๋Š” get ์ด๋‹ค.
axios("/board/10");

// 3.
axios.get("/board/10");
  • ํ™œ์šฉ
// jsonplaceholder
const URL = "https://jsonplaceholder.typicode.com/todos";

axios
  .get(URL)
  .then((response) => {
    console.log("1. 10๋ฒˆ์งธ ๋ฐ์ดํ„ฐ ID : ", response.data[10].id);
    return response.data[10].id;
  })
  .then((id) => {
    console.log("2. 10๋ฒˆ์งธ ๋ฐ์ดํ„ฐ ID : ", id);
    return axios.get(`${URL}/${id}`);
  })
  .then((todo) => {
    console.log("3. ์œ„์—์„œ ๊ฐ€์ ธ์˜จ ๋ฐ์ดํ„ฐ์˜ TITLE : ", todo.data.title);
  })
  .catch((error) => {
    console.log(error);
  })
  .finally(() => {
    console.log("๋ !");
  });
  • ๊ฒฐ๊ณผ


axios.get(url[,config]) - async, await ์‚ฌ์šฉ

js์—์„œ async/await๋ฅผ ์ด์šฉํ•œ ๋น„๋™๊ธฐ ๊ตฌ๋ฌธ์ด ์ถ”๊ฐ€ ๋˜์—ˆ๊ธฐ์— axios๋„ ์ด๋ฅผ ์ง€์›ํ•œ๋‹ค.
๊ธฐ์กด then ๋ฐฉ๋ฒ•๋ณด๋‹ค ๋ณด๊ธฐ์—๋„ ์ž‘์„ฑํ•˜๊ธฐ์—๋„ ๊น”๋”ํ•˜๋‹ค.

// jsonplaceholder
const URL = "https://jsonplaceholder.typicode.com/todos";

async function getTodo(URL) {
  const response = await axios.get(URL);
  const id = response.data[10].id;
  const todo = await axios.get(`${URL}/${id}`);
  console.log(todo.data.id);
  console.log(todo.data.title);
}

getTodo(URL);
  • ๊ฒฐ๊ณผ


axios.post(url[,config])

Create

  • ๊ธฐ๋ณธ ๋ฌธ๋ฒ•
// 1.
axios({
  method: "post",
  url: "/board",
  data: { userid: "js", subject: "์•ˆ๋…•ํ•˜์„ธ์š”" },
});

// 2.
axios.post("/board", {
  userid: "js",
  subject: "์•ˆ๋…•ํ•˜์„ธ์š”",
});
  • ํ™œ์šฉ
// jsonplaceholder
const URL = "https://jsonplaceholder.typicode.com/todos";

axios
  .post(URL, {
    userId: "js",
    title: "hi hello",
  })
  .then((response) => {
    console.log(response.data);
  })
  .catch((error) => {
    console.log(error);
  })
  .finally(() => {
    console.log("๋!");
  });
  • ๊ฒฐ๊ณผ


axios.put(url[,config])

Update

  • ๊ธฐ๋ณธ ๋ฌธ๋ฒ•
// 1.
axios({
  method: "put",
  url: "/board/10",
  data: { subject: "์•ˆ๋…•ํ•˜์„ธ์š”", content: "์˜ค๋Š˜๋„ ์ข‹์€ ํ•˜๋ฃจ ๋˜์„ธ์š” ^^" },
});

// 2.
axios.put("/board/10", {
  subject: "์•ˆ๋…•ํ•˜์„ธ์š”",
  content: "์˜ค๋Š˜๋„ ์ข‹์€ ํ•˜๋ฃจ ๋˜์„ธ์š” ^^",
});

axios.delete(url[,config])

Delete

  • ๊ธฐ๋ณธ ๋ฌธ๋ฒ•
// 1.
axios({
  method: "delete",
  url: "/board/10",
});

// 2.
axios("/board/10", {
  method: "delete",
});

// 3.
axios.delete("/board/10");