[Javascript] AJAX ์•Œ์•„๋ณด๊ธฐ

2025. 9. 5. 20:35ยท๐Ÿ“š ํ”„๋ก ํŠธ์—”๋“œ/Javascript

๐Ÿง AJAX๋ž€?

AJAX๋Š” Asynchronous JavaScript and XML์˜ ์•ฝ์ž๋กœ

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์„œ๋ฒ„์™€ ๋น„๋™๊ธฐ์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›๋Š” ๊ธฐ๋Šฅ์„ ๋งํ•œ๋‹ค.

AJAX๋Š” ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ œ๊ณตํ•˜๋Š” XMLHttpRequest ๊ฐ์ฒด๋ฅผ ํ†ตํ•ด ๋™์ž‘ํ•œ๋‹ค.

์ด๋ฆ„์— XML์ด ๋“ค์–ด๊ฐ€ ์žˆ์ง€๋งŒ, ์‹ค์ œ๋กœ๋Š” XML ๋Œ€์‹  JSON ํ˜•์‹์„ ๋” ๋งŽ์ด ์‚ฌ์šฉํ•œ๋‹ค.

 

๐Ÿš€ AJAX์˜ ๋“ฑ์žฅ ๋ฐฐ๊ฒฝ๊ณผ ์žฅ์ 

๐Ÿ”Ž ๋“ฑ์žฅ ๋ฐฐ๊ฒฝ

AJAX๊ฐ€ ๋“ฑ์žฅํ•˜๊ธฐ ์ด์ „์˜ ์›นํŽ˜์ด์ง€๋Š”

์ผ๋ถ€ ๋‚ด์šฉ๋งŒ ๋ฐ”๊พธ๊ณ  ์‹ถ์–ด๋„ ์ „์ฒด ํŽ˜์ด์ง€๋ฅผ ๋‹ค์‹œ ๋กœ๋“œํ•ด์•ผ ํ–ˆ๋‹ค.

 

๐Ÿ“Œ ๋ฌธ์ œ์  (AJAX ์ด์ „)

  • ํ™”๋ฉด ๊นœ๋นก์ž„ → ์ „์ฒด ์ƒˆ๋กœ๊ณ ์นจ์œผ๋กœ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜ ์ €ํ•˜
  • ๋ถˆํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ ์ „์†ก → ๋ณ€๊ฒฝํ•˜์ง€ ์•Š์•„๋„ ๋˜๋Š” HTML๊นŒ์ง€ ์ „์†ก

 

AJAX๋Š” ์œ„์™€ ๊ฐ™์€ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋“ฑ์žฅํ–ˆ๋‹ค.

AJAX๋Š” ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋งŒ ๋น„๋™๊ธฐ ๋ฐฉ์‹์œผ๋กœ ์ „์†ก๋ฐ›์€ ํ›„,

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ด์šฉํ•ด DOM์„ ์กฐ์ž‘ํ•˜์—ฌ ํŽ˜์ด์ง€์˜ ์ผ๋ถ€๋งŒ ๋™์ ์œผ๋กœ ๊ฐฑ์‹ ํ•œ๋‹ค.

 

โœ… AJAX์˜ ์žฅ์ 

  • ๋ถ€๋ถ„ ๊ฐฑ์‹  → ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋งŒ ๋ฐ›์•„์„œ DOM์„ ์กฐ์ž‘ (ํ™”๋ฉด ๊นœ๋นก์ž„ ์—†์Œ)
  • ๋ฐ์ดํ„ฐ ํšจ์œจ์„ฑ → ๋ถˆํ•„์š”ํ•œ ๋ฆฌ์†Œ์Šค ๋‚ญ๋น„ ๋ฐฉ์ง€
  • ๋น ๋ฅธ ์ƒํ˜ธ์ž‘์šฉ → ๋ฐ์Šคํฌํ†ฑ ์•ฑ๊ณผ ์œ ์‚ฌํ•œ UX ์ œ๊ณต
  • ์—ญํ•  ๋ถ„๋ฆฌ → ์„œ๋ฒ„๋Š” ๋ฐ์ดํ„ฐ ์ œ๊ณต, ํด๋ผ์ด์–ธํŠธ๋Š” ํ™”๋ฉด ๊ด€๋ฆฌ์— ์ง‘์ค‘

 

๐Ÿ”„ AJAX์™€ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ ๋ฐฉ์‹์˜ ๋ฐœ์ „

1๏ธโƒฃ XMLHttpRequest

XMLHttpRequest๋ฅผ ์‚ฌ์šฉํ•œ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๋Š” ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š”๋ฐ,

์ด๋กœ ์ธํ•ด ๋น„๋™๊ธฐ ์ž‘์—…์„ ์ˆœ์ฐจ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•  ๋•Œ ์ฝœ๋ฐฑ ํ—ฌ์ด๋ผ๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค.

์ฝœ๋ฐฑ ํ—ฌ → ์ฝ”๋“œ๊ฐ€ ๊นŠ๊ฒŒ ์ค‘์ฒฉ๋˜์–ด์„œ ๊ฐ€๋…์„ฑ์ด ๋–จ์–ด์ง€๊ณ  ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์–ด๋ ค์›Œ์ง€๋Š” ํ˜„์ƒ

const xhr = new XMLHttpRequest();
xhr.open("GET", "/data");
xhr.onload = function () {
  console.log(xhr.responseText);
};
xhr.send();

 

2๏ธโƒฃ Promise

  • ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ์˜ ์ƒํƒœ(pending, fulfilled, rejected)์™€ ๊ฒฐ๊ณผ๊ฐ’์„ ๊ด€๋ฆฌ
  • then, catch, finally๋ฅผ ์ด์šฉํ•ด ๊ฐ€๋…์„ฑ ๊ฐœ์„ 
  • fetch๋„ Promise๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋™์ž‘
  • XMLHttpRequest๋ณด๋‹ค ์‚ฌ์šฉ๋ฒ•์ด ๊ฐ„๋‹จํ•จ
fetch("/data")
  .then(res => res.json())
  .then(data => console.log(data))
  .catch(err => console.error(err));

 

3๏ธโƒฃ async/await

  • ES2017์—์„œ ๋„์ž…
  • Promise ๊ธฐ๋ฐ˜ ๋ฌธ๋ฒ•
  • ๋น„๋™๊ธฐ ์ฝ”๋“œ๋ฅผ ๋™๊ธฐ ์ฝ”๋“œ์ฒ˜๋Ÿผ ์ž‘์„ฑ ๊ฐ€๋Šฅ → ์ง๊ด€์ ์ž„
  • async ํ•จ์ˆ˜๋Š” ํ•ญ์ƒ ํ”„๋กœ๋ฏธ์Šค๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ณ  await๋Š” ํ”„๋กœ๋ฏธ์Šค๊ฐ€ ์ฒ˜๋ฆฌ๋  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ ธ๋‹ค๊ฐ€ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•จ
  • ํ”„๋กœ๋ฏธ์Šค ์ฒด์ด๋‹๋ณด๋‹ค ํ›จ์”ฌ ๋” ๊ฐ€๋…์„ฑ ๋†’์€ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Œ
async function getData() {
  try {
    const res = await fetch("/data");
    const data = await res.json();
    console.log(data);
  } catch (err) {
    console.error(err);
  }
}

 

4๏ธโƒฃ axios

  • ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ (์„ค์น˜ ํ•„์š”: npm install axios)
  • fetch๋ณด๋‹ค ๋ฌธ๋ฒ•์ด ๊ฐ„๋‹จํ•˜๊ณ  ๋‹ค์–‘ํ•œ ํŽธ์˜๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•จ

โœ… axios ์žฅ์ 

1. ์ž๋™ JSON ๋ณ€ํ™˜

fetch๋Š” ์‘๋‹ต์„ JSON์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋ ค๋ฉด res.json()์„ ํ˜ธ์ถœํ•ด์•ผ ํ•˜์ง€๋งŒ

axios๋Š” ์ž๋™์œผ๋กœ JSON์„ ๋ณ€ํ™˜ํ•ด์ค€๋‹ค.

// fetch
async function getDataFetch() {
  const res = await fetch("/data");
  const data = await res.json(); // ์ง์ ‘ ๋ณ€ํ™˜ ํ•„์š”
  console.log(data);
}

// axios
import axios from "axios";

async function getDataAxios() {
  const res = await axios.get("/data");
  console.log(res.data); // ์ž๋™ JSON ๋ณ€ํ™˜
}

 

2. ์ฟผ๋ฆฌ ํŒŒ๋ผ๋ฏธํ„ฐ(params ์˜ต์…˜)

axios๋Š” params ์˜ต์…˜์„ ์ œ๊ณตํ•ด์„œ ๊ฐ„๋‹จํ•˜๊ฒŒ ์ฟผ๋ฆฌ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

// fetch + URL ๊ฐ์ฒด
async function getUsersFetch() {
  const url = new URL("/users", window.location.origin);
  url.search = new URLSearchParams({
    role: "admin",
    active: true,
  });

  const res = await fetch(url);
  const data = await res.json();
  console.log(data);
}

// axios
async function getUsersAxios() {
  const res = await axios.get("/users", {
    params: {
      role: "admin",
      active: true,
    },
  });
  console.log(res.data);
}

 

3. axios ์ธ์Šคํ„ด์Šค

๊ณตํ†ต๋œ ๊ธฐ๋ณธ URL์ด๋‚˜ ํ—ค๋”๋ฅผ ์ง€์ •ํ•ด ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

// axios ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ
const api = axios.create({
  baseURL: "API Base URL",
});

const todo = await api.get("/todos/1");
console.log(todo.data);

const user = await api.get("/users/1");
console.log(user.data);

 

4. ์—๋Ÿฌ์ฒ˜๋ฆฌ

fetch๋Š” HTTP ์—๋Ÿฌ(400, 500)๊ฐ€ ๋ฐœ์ƒํ•ด๋„ reject๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์—

์—๋Ÿฌ ์ฒ˜๋ฆฌ๋ฅผ res.ok ์†์„ฑ์„ ์‚ฌ์šฉํ•ด์„œ ๋ณ„๋„๋กœ ๊ตฌํ˜„ํ•ด์•ผ ํ•œ๋‹ค.

axios๋Š” ์ž๋™์œผ๋กœ Promise rejected ์ƒํƒœ๊ฐ€ ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์—๋Ÿฌ์ฒ˜๋ฆฌ๊ฐ€ ํŽธ๋ฆฌํ•˜๋‹ค.

// fetch
async function getNotFoundFetch() {
  try {
    const res = await fetch("/not-found");
    if (!res.ok) {
      throw new Error("HTTP Error: " + res.status);
    }
    const data = await res.json();
    console.log(data);
  } catch (err) {
    console.error("Fetch Error:", err);
  }
}

// axios
async function getNotFoundAxios() {
  try {
    const res = await axios.get("/not-found");
    console.log(res.data);
  } catch (err) {
    console.error("Axios Error:", err.response.status); // ๋ฐ”๋กœ ์ƒํƒœ ์ฝ”๋“œ ํ™•์ธ ๊ฐ€๋Šฅ
  }
}

 

๐Ÿ“š ์ฐธ๊ณ 

๋ชจ๋˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ Deep Dive

 

์‹œ์ž‘ํ•˜๊ธฐ | Axios Docs

์‹œ์ž‘ํ•˜๊ธฐ ๋ธŒ๋ผ์šฐ์ €์™€ node.js์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” Promise ๊ธฐ๋ฐ˜ HTTP ํด๋ผ์ด์–ธํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ Axios๋ž€? Axios๋Š” node.js์™€ ๋ธŒ๋ผ์šฐ์ €๋ฅผ ์œ„ํ•œ Promise ๊ธฐ๋ฐ˜ HTTP ํด๋ผ์ด์–ธํŠธ ์ž…๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ๋™ํ˜• ์ž…๋‹ˆ๋‹ค(๋™์ผํ•œ ์ฝ”

axios-http.com

 

728x90
'๐Ÿ“š ํ”„๋ก ํŠธ์—”๋“œ/Javascript' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [JavaScript] ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ ๋ฐฉ์‹
  • [JavaScript] ๋ ‰์‹œ์ปฌ ์Šค์ฝ”ํ”„(Lexical scope) ์•Œ์•„๋ณด๊ธฐ
  • [JavaScript] this ํ‚ค์›Œ๋“œ ์ •๋ฆฌ
  • [JavaScript] var, let, const ์ฐจ์ด ์ •๋ฆฌ (์ค‘๋ณต ์„ ์–ธ, ํ˜ธ์ด์ŠคํŒ…)
_์ด์•Ž
_์ด์•Ž
๊ณต๋ถ€ ๊ธฐ๋ก ๋ธ”๋กœ๊ทธ
  • _์ด์•Ž
    ๊ณต๋ถ€
    _์ด์•Ž
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • โœ๏ธ ๋ชจ๋“  ๊ธ€ (50) N
      • ๐Ÿ“š ํ”„๋ก ํŠธ์—”๋“œ (36) N
        • React (9) N
        • HTML_CSS (9)
        • Javascript (13)
        • git_github (4)
        • Web (1)
      • ๐Ÿ‘€ ํ”„๋กœ์ ํŠธ ๋ฐ ํ™œ๋™ (10)
        • ์ฝ”๋“œ์ž‡ ์Šคํ”„๋ฆฐํŠธ 19๊ธฐ (10)
      • โš™๏ธ etc. (4)
  • ๋งํฌ

    • ๐Ÿ‘‹ GitHub
    • ๐Ÿง ์ฝ”๋”ฉํ…Œ์ŠคํŠธ ๊ธฐ๋ก
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ํ™ˆ
    • ํƒœ๊ทธ
    • ๋ฐฉ๋ช…๋ก
  • ์ธ๊ธฐ ๊ธ€

  • ์ตœ๊ทผ ๊ธ€

  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.4
_์ด์•Ž
[Javascript] AJAX ์•Œ์•„๋ณด๊ธฐ
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”