[jQuery + Ajax]์‹ค์Šต์œผ๋กœ ์™„์ „ํžˆ ์ฒด๋“ํ•œ jQuery AJAX + ์˜ํ™” API ์—ฐ๋™

2025. 6. 26. 12:38ใ†JavaScript/Node.js

๐ŸŽฅ ์‹ค์Šต์œผ๋กœ ์™„์ „ํžˆ ์ฒด๋“ํ•œ jQuery AJAX + ์˜ํ™” API ์—ฐ๋™

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ๊ณต๋ถ€ํ•˜๋ฉด์„œ "AJAX"์™€ "๋น„๋™๊ธฐ ํ†ต์‹ ", "JSON ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ"์— ๋Œ€ํ•œ ๊ฐœ๋…์€ ์—ฌ๋Ÿฌ ๋ฒˆ ๋“ค์–ด๋ดค์Šต๋‹ˆ๋‹ค.
์ด๋ก ์ ์œผ๋กœ๋„ ์•Œ๊ณ  ์žˆ์—ˆ๊ณ , ๊ฐ•์˜๋„ ๋ดค์ง€๋งŒ… ์ง์ ‘ ์†์œผ๋กœ ์‹ค์Šตํ•ด๋ณด๊ธฐ ์ „๊นŒ์ง„ ๊ทธ๊ฒŒ ์™œ ์ค‘์š”ํ•œ์ง€ ํ”ผ๋ถ€๋กœ ๋А๋ผ์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค.

์ด๋ฒˆ ์‹ค์Šต์—์„œ๋Š” jQuery์˜ $.ajax()๋ฅผ ํ†ตํ•ด KOBIS ์˜ํ™”์ง„ํฅ์œ„์›ํšŒ API๋กœ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„์™€์„œ, ์ผ์ผ ๋ฐ•์Šค์˜คํ”ผ์Šค ์˜ํ™” ์ œ๋ชฉ๋“ค์„ ๊ฐ€์ ธ์˜ค๋Š” ์ž‘์—…์„ ํ•ด๋ณด์•˜์Šต๋‹ˆ๋‹ค.


โœ… ์‹ค์Šต ๋ชฉํ‘œ

  • ๋ฒ„ํŠผ ํด๋ฆญ ์‹œ AJAX๋กœ ์™ธ๋ถ€ ์˜ํ™” API ์š”์ฒญ
  • ์„ฑ๊ณต ์‘๋‹ต ์‹œ ์˜ํ™” ์ˆœ์œ„/์ œ๋ชฉ์„ ์ฝ˜์†”์— ์ถœ๋ ฅ
  • (์ถ”๊ฐ€ ์‹ค์Šต ์˜ˆ์ •) ๋ฐ›์•„์˜จ ๋ฐ์ดํ„ฐ๋ฅผ HTML์— ์ถœ๋ ฅ

๐Ÿ“‚ ์ „์ฒด ์ฝ”๋“œ (HTML + JS)

<!DOCTYPE html>
<html lang="ko">
<head>
  <meta charset="UTF-8">
  <title>์˜ํ™” ๋ฐ์ดํ„ฐ ์‹ค์Šต</title>
  <script src="jquery-3.7.1.min.js"></script>
</head>

<body>
  <button id="btn">์˜ํ™”๋ฐ์ดํ„ฐ ์š”์ฒญ</button>
  <ul id="result"></ul>

  <script>
    $("#btn").on("click", () => {
      $.ajax({
        url: "http://kobis.or.kr/kobisopenapi/webservice/rest/boxoffice/searchDailyBoxOfficeList.json?key=๋ณธ์ธAPIKEY&targetDt=20250624",
        success: (res) => {
          alert("ํ†ต์‹ ์„ฑ๊ณต");

          const list = res.boxOfficeResult.dailyBoxOfficeList;
          for (const movie of list) {
            console.log(`${movie.rank}์œ„ - ${movie.movieNm}`);
          }
        },
        error: () => {
          alert("ํ†ต์‹ ์‹คํŒจ");
        }
      });
    });
  </script>
</body>
</html>

๐Ÿง  JSON ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ ๋ถ„์„

AJAX๋กœ ๋ฐ›์•„์˜จ ๋ฐ์ดํ„ฐ๋Š” res๋ผ๋Š” ์‘๋‹ต ๊ฐ์ฒด์— ๋‹ด๊ฒจ ์žˆ๊ณ , ์˜ํ™” ๋ฆฌ์ŠคํŠธ๋Š” ๋‹ค์Œ ๊ฒฝ๋กœ๋กœ ์ ‘๊ทผํ•ฉ๋‹ˆ๋‹ค:

res.boxOfficeResult.dailyBoxOfficeList

์ด ์•ˆ์—๋Š” ์˜ํ™” ์ •๋ณด๋“ค์ด ๊ฐ์ฒด ํ˜•ํƒœ๋กœ ๋ฐฐ์—ด์— ๋“ค์–ด์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ:


[
  { "rank": "1", "movieNm": "๋“œ๋ž˜๊ณค ๊ธธ๋“ค์ด๊ธฐ", ... },
  { "rank": "2", "movieNm": "์ธ์‚ฌ์ด๋“œ ์•„์›ƒ", ... },
  ...
]

๊ทธ๋ž˜์„œ ์˜ํ™” ์ œ๋ชฉ์— ์ ‘๊ทผํ•˜๋ ค๋ฉด movie.movieNm, ์ˆœ์œ„๋Š” movie.rank๋กœ ๊บผ๋‚ผ ์ˆ˜ ์žˆ์–ด์š”. ์ด ๋ถ€๋ถ„์ด ๊ฐ€์žฅ ํ•ต์‹ฌ์ด๊ณ , ์‹ค๋ฌด API ์—ฐ๋™์—์„œ๋„ ๊ตฌ์กฐ ํŒŒ์•…์ด ์ œ์ผ ์ค‘์š”ํ•˜๋‹ค๋Š” ๊ฑธ ๋А๊ผˆ์Šต๋‹ˆ๋‹ค.


๐Ÿ“Œ ๋А๋‚€ ์ 

  • ์ฒ˜์Œ์—๋Š” AJAX ๋ฌธ๋ฒ•๋„ ์ƒ์†Œํ•˜๊ณ  ๋ง‰๋ง‰ํ–ˆ์ง€๋งŒ, ๊ตฌ์กฐ๋ฅผ ๋œฏ์–ด๋ณด๋‹ˆ ๊ฒฐ๊ตญ์€ ์š”์ฒญ → ์‘๋‹ต → ๋ฐ์ดํ„ฐ ๊บผ๋‚ด๊ธฐ์˜ ๋ฐ˜๋ณต์ด๋ผ๋Š” ๊ฑธ ๊นจ๋‹ฌ์Œ
  • JSON ๋ฐ์ดํ„ฐ๋ฅผ ํƒ์ƒ‰ํ•˜๋Š” ๋ฐฉ๋ฒ•(.key / [index])์ด ์ด์ œ๋Š” ์†์— ์ต์—ˆ๊ณ , ๋‹ค๋ฅธ API๋„ ์ถฉ๋ถ„ํžˆ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™์€ ์ž์‹ ๊ฐ์ด ์ƒ๊น€
  • ์ด๋ก ์œผ๋กœ๋งŒ ๊ณต๋ถ€ํ•  ๋• ์ ˆ๋Œ€ ๋ชฐ๋ž๋˜ ๊ฒƒ๋“ค์ด, ์ง์ ‘ ์ฝ˜์†”์— ์ฐ์–ด๋ณด๊ณ  ์˜ค๋ฅ˜๋„ ๊ฒช์œผ๋ฉด์„œ ํ™•์‹คํžˆ ๋‚ด ๊ฒƒ์ด ๋˜์—ˆ๋‹ค๋Š” ๋А๋‚Œ

๐ŸŽฏ ์ทจ์ค€์ƒ์œผ๋กœ์„œ์˜ ๋‹ค์ง

๊ธฐ๋ณธ์ ์ธ ๊ฐœ๋ฐœ ์ง€์‹๋ฐ ๊ธฐ๋ณธ๋ฒ ์ด์Šค๋ฅผ ๊ฐ•ํ™”์‹œํ‚ค๋ฉฐ ๊ณต๋ถ€๋ฅผ ํ•˜๋ฉด ์ •๋ง ์ˆ˜๋งŽ์€ ๋ฌธ๋ฒ•๊ณผ ๊ฐœ๋…๋“ค์„ ์ ‘ํ•ฉ๋‹ˆ๋‹ค.
ํ•˜์ง€๋งŒ ๊ทธ ์ค‘์—์„œ๋„ ์ด๋ ‡๊ฒŒ ์‹ค์ œ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ค„๋ณด๋Š” ๊ฒฝํ—˜์€ ์‹ค๋ฌด์™€ ๊ฐ€์žฅ ๋‹ฎ์•„์žˆ๋Š” ํ›ˆ๋ จ์ด๋ผ๋Š” ๊ฑธ ์•Œ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์•ž์œผ๋กœ๋Š” JSON์„ ๋ถˆ๋Ÿฌ์™€ ์ถœ๋ ฅํ•˜๋Š” ๊ฒƒ์— ๊ทธ์น˜์ง€ ์•Š๊ณ , ์ด๋Ÿฌํ•œ ๋‚ด์šฉ๋“ค์„ ๋ฐฑ์—”๋“œ์™€ ์—ฐ๊ด€์ง€์–ด ์ „์ฒด์ ์ธ ๊ฐœ๋ฐœ ํ”„๋กœ์„ธ์Šค๋ฅผ ์•Œ์•„๊ฐ€๋Š” ๊ณผ์ •์„ ๊ณต๋ถ€ํ•˜๋ คํ•ฉ๋‹ˆ๋‹ค.


์˜ค๋Š˜๋„ ํ•œ ๊ฑธ์Œ ์„ฑ์žฅํ–ˆ์Šต๋‹ˆ๋‹ค. ๐Ÿ™Œ