AJAX

J.yeonยท2024๋…„ 1์›” 6์ผ
0
post-thumbnail

๐Ÿค”AJAX? JSON?

AJAX (Asynchronous JavaScript and XML)

"AJAX๋Š” ๋น„๋™๊ธฐ์ ์œผ๋กœ ์„œ๋ฒ„์™€ ์›น ํŽ˜์ด์ง€ ๊ฐ„์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ตํ™˜ํ•˜๊ธฐ ์œ„ํ•œ ๊ธฐ์ˆ ์ด๋‹ค."

  • ์ฃผ๋กœ JavaScript๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์›น ํŽ˜์ด์ง€์—์„œ ์„œ๋ฒ„๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ด๊ฑฐ๋‚˜ ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„์˜ค๋Š” ๋ฐ ํ™œ์šฉ๋จ.
  • XML์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ๊ตํ™˜ํ•˜๋Š”๋ฐ, ์ตœ๊ทผ์—๋Š” XML ๋Œ€์‹ ์— JSON์ด ๋” ๋งŽ์ด ์‚ฌ์šฉ๋˜๊ณ  ์žˆ์Œ.
  • AJAX๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํŽ˜์ด์ง€ ์ƒˆ๋กœ๊ณ ์นจ ์—†์ด๋„ ๋ฐ์ดํ„ฐ๋ฅผ ๋™์ ์œผ๋กœ ์—…๋ฐ์ดํŠธํ•  ์ˆ˜ ์žˆ์Œ.

JSON (JavaScript Object Notation)

"JSON์€ ๋ฐ์ดํ„ฐ๋ฅผ ํ‘œํ˜„ํ•˜๊ธฐ ์œ„ํ•œ ๊ฒฝ๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ ๊ตํ™˜ ํ˜•์‹์ด๋‹ค."

  • JavaScript์˜ ๊ฐ์ฒด ํ‘œ๊ธฐ๋ฒ•์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๊ณ  ์žˆ์œผ๋ฉฐ, ํ…์ŠคํŠธ ํ˜•ํƒœ๋กœ ๊ตฌ์กฐํ™”๋œ ๋ฐ์ดํ„ฐ๋ฅผ ํ‘œํ˜„ํ•จ.
  • ์ฃผ๋กœ ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ ๊ฐ„์˜ ๋ฐ์ดํ„ฐ ๊ตํ™˜ ํ˜•์‹์œผ๋กœ ์‚ฌ์šฉ๋˜๋ฉฐ, AJAX์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›์„ ๋•Œ ์ฃผ๋กœ JSON ํ˜•์‹์ด ๋งŽ์ด ์‚ฌ์šฉ๋จ.

๐Ÿ“Œ๊ฐ„๋‹จํ•˜๊ฒŒ ๋งํ•˜๋ฉด ๊ฑ,

  • AJAX : ๋ฐ์ดํ„ฐ๋ฅผ ๋น„๋™๊ธฐ์ ์œผ๋กœ ์ฃผ๊ณ ๋ฐ›๊ธฐ ์œ„ํ•œ ๊ธฐ์ˆ 
  • JSON : ๋ฐ์ดํ„ฐ๋ฅผ ํ‘œํ˜„ํ•˜๊ณ  ๊ตํ™˜ํ•˜๊ธฐ ์œ„ํ•œ ํ˜•์‹ (AJAX์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๋ฐ์ดํ„ฐ ํ˜•์‹ ์ค‘ ํ•˜๋‚˜์ผ ๋ฟ)

์žฅ์ 

  • ํŽ˜์ด์ง€ ๋ฆฌ๋กœ๋“œ ์—†์ด ๋™์  ์—…๋ฐ์ดํŠธ: AJAX๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ „์ฒด ํŽ˜์ด์ง€๋ฅผ ๋‹ค์‹œ ๋กœ๋“œํ•˜์ง€ ์•Š๊ณ ๋„ ํŽ˜์ด์ง€์˜ ์ผ๋ถ€๋ถ„์„ ์—…๋ฐ์ดํŠธํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋กœ ์ธํ•ด ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์ด ํ–ฅ์ƒ๋˜๋ฉฐ, ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋น ๋ฅด๊ณ  ๋ฐ˜์‘์„ฑ์ด ๋›ฐ์–ด๋‚œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ์„œ๋ฒ„์™€์˜ ํšจ์œจ์ ์ธ ํ†ต์‹ : ๋น„๋™๊ธฐ์ ์œผ๋กœ ์„œ๋ฒ„์™€ ํ†ต์‹ ํ•˜๋ฏ€๋กœ ์‚ฌ์šฉ์ž๋Š” ๋‹ค๋ฅธ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ฑฐ๋‚˜ ๋‹ค๋ฅธ ๋ถ€๋ถ„์„ ํƒ์ƒ‰ํ•˜๋Š” ๋™์•ˆ์—๋„ ๋ฐ์ดํ„ฐ ์š”์ฒญ ๋ฐ ์‘๋‹ต์„ ๊ธฐ๋‹ค๋ฆด ํ•„์š”๊ฐ€ ์—†๋‹ค. ์ด๋Š” ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ํ–ฅ์ƒ์‹œํ‚ค๊ณ  ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”ํ•œ๋‹ค.

  • ๋ถ€๋ถ„์ ์ธ ๋ฐ์ดํ„ฐ ์—…๋ฐ์ดํŠธ: ํ•„์š”ํ•œ ๋ถ€๋ถ„๋งŒ ์—…๋ฐ์ดํŠธํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๋Œ€๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค์‹œ ๊ฐ€์ ธ์˜ค๊ฑฐ๋‚˜ ์ „์ฒด ํŽ˜์ด์ง€๋ฅผ ์ƒˆ๋กœ ๊ณ ์น˜๋Š” ๋Œ€์‹  ํŠน์ • ์š”์†Œ๋งŒ ๊ฐฑ์‹ ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋Š” ๋Œ€์—ญํญ์„ ์ ˆ์•ฝํ•˜๊ณ  ๋น ๋ฅธ ์‘๋‹ต์„ฑ์„ ์œ ์ง€ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋œ๋‹ค.

  • ์‚ฌ์šฉ์ž ์นœํ™”์ ์ธ ๊ฒฝํ—˜: ํŽ˜์ด์ง€ ๋ฆฌ๋กœ๋“œ ์—†์ด ๋ฐ์ดํ„ฐ๋ฅผ ์—…๋ฐ์ดํŠธํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์šฉ์ž๋Š” ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ํƒ์ƒ‰ํ•˜๊ณ  ์ƒํ˜ธ ์ž‘์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋Š” ๋” ๋‚˜์€ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ์ œ๊ณตํ•˜๋Š” ๋ฐ ๊ธฐ์—ฌํ•œ๋‹ค.

  • ๋น„๋™๊ธฐ์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ: AJAX๋ฅผ ํ†ตํ•ด ๋น„๋™๊ธฐ์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋ฉด ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ์‚ฌ์šฉ์ž ์ž…๋ ฅ์— ๋” ์‹ ์†ํ•˜๊ฒŒ ์‘๋‹ตํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ค๊ณ  ๋šœ๋ ทํ•œ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ์ œ๊ณตํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋œ๋‹ค.

์ข…ํ•ฉํ•˜๋ฉด, AJAX๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ๋น„๋™๊ธฐ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•จ์œผ๋กœ์จ ๋” ๋น ๋ฅด๊ณ  ์œ ์—ฐํ•œ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœํ•˜๊ณ  ์‚ฌ์šฉ์ž์—๊ฒŒ ๋›ฐ์–ด๋‚œ ๊ฒฝํ—˜์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.




AJAX ์š”์ฒญํ•˜๊ธฐ (jQuery)

$.get() ๋ผ๋Š” ํ•จ์ˆ˜ ์‚ฌ์šฉ

$.get('https://chiaki.github.io/hello.txt');

//ํŒŒ์ผ ๊ฐ€์ ธ์˜ค๊ธฐ (url ๋˜๋Š” ํŒŒ์ผ ๊ฒฝ๋กœ)

์„œ๋ฒ„ ์—ฐ๊ฒฐ์ด๋‚˜, VScode live server ์ต์Šคํ…์…˜ ์„ค์น˜ํ•ด์„œ ์‚ฌ์šฉํ•ด์•ผ ๋ณด์ž„

$.get('https://chiaki.github.io/hello.txt').done(function(data){
  console.log(data)
});

//์ฝ˜์†”์ฐฝ : ์•ˆ๋…•ํ•˜์„ธ์š”๐Ÿ–๏ธ

์ œ์ด์ฟผ๋ฆฌ โ†’ .done() ๋˜๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ โ†’ .then() ์‚ฌ์šฉ

์ฝœ๋ฐฑํ•จ์ˆ˜ ์† ๋งŒ๋“ค์–ด๋„ฃ์€ ํŒŒ๋ผ๋ฏธํ„ฐ์— ๋ฐ์ดํ„ฐ๊ฐ€ ๋“ค์–ด์žˆ๋Š” ์ƒํƒœ.

$.get('https://chiaki.github.io/hello.txt')
  .done(function(data){
    console.log(data)
  })
  .fail(function(error){
    console.log('์‹คํŒจํ•จ')
  });

ajax ์š”์ฒญ ์„ฑ๊ณต์‹œ .done ์•ˆ์— ์žˆ๋Š” ์ฝ”๋“œ๋ฅผ ์‹คํ–‰.

ajax ์š”์ฒญ ์‹คํŒจ์‹œ .fail ์•ˆ์— ์žˆ๋Š” ์ฝ”๋“œ๋ฅผ ์‹คํ–‰.

  • error ์ถœ๋ ฅํ•ด์„œ ์—๋Ÿฌ๊ด€๋ จ ์ •๋ณด ํ™•์ธํ•˜๊ณ  ๋””๋ฒ„๊น…ํ•˜๋ฉด ๋จ
  • ์˜ˆ๋ฅผ ๋“ค์–ด 404 ์ด๋Ÿฐ ์—๋Ÿฌ์ฝ”๋“œ๋Š” url ์ด ์ž˜๋ชป๋˜์—ˆ๋‹ค๋Š” ๋œป

์„œ๋ฒ„๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๋Š” POST์š”์ฒญ์„ ๋‚ ๋ฆฌ๊ณ  ์‹ถ์œผ๋ฉด?

$.post('url~~', {name : 'kim'})

url ์ž˜ ์ ๊ณ  ๋’ค์— ์„œ๋ฒ„๋กœ ๋ณด๋‚ผ ๋ฐ์ดํ„ฐ๋ฅผ ์ ์œผ๋ฉด ๋.

๐Ÿ’ก done/fail ๋ง๊ณ  then/catch ์‚ฌ์šฉ ๊ฐ€๋Šฅ




๐Ÿ‘‡๋” ์ž์„ธํ•˜๊ฒŒ๐Ÿ‘‡


$.get / $.post ๋ง๊ณ  $.ajax ๋ฉ”์†Œ๋“œ ๋„ ์žˆ์Œ -> get, post ๋‘˜ ๋‹ค ๊ฐ€๋Šฅ


1. GET ์š”์ฒญ

$.ajax({
        url: 'example.com/api/data',  // ์š”์ฒญ์„ ๋ณด๋‚ผ URL
        method: 'GET',  // HTTP ๋ฉ”์„œ๋“œ (GET ๋˜๋Š” POST)
        success: function (data) {
            // ์š”์ฒญ์ด ์„ฑ๊ณต์ ์œผ๋กœ ์™„๋ฃŒ๋˜์—ˆ์„ ๋•Œ ์‹คํ–‰ํ•  ์ฝ”๋“œ
            console.log(data);
        },
        error: function (error) {
            // ์š”์ฒญ์ด ์‹คํŒจํ–ˆ์„ ๋•Œ ์‹คํ–‰ํ•  ์ฝ”๋“œ
            console.error('Error:', error);
        }
    });

2. POST ์š”์ฒญ

    $.ajax({
        url: 'example.com/api/data',  // ์š”์ฒญ์„ ๋ณด๋‚ผ URL
        method: 'POST',  // HTTP ๋ฉ”์„œ๋“œ (GET ๋˜๋Š” POST)
        data: {
            param1: 'value1',
            param2: 'value2'
        },  // ์ „์†กํ•  ๋ฐ์ดํ„ฐ
        success: function (data) {
            // ์š”์ฒญ์ด ์„ฑ๊ณต์ ์œผ๋กœ ์™„๋ฃŒ๋˜์—ˆ์„ ๋•Œ ์‹คํ–‰ํ•  ์ฝ”๋“œ
            console.log(data);
        },
        error: function (error) {
            // ์š”์ฒญ์ด ์‹คํŒจํ–ˆ์„ ๋•Œ ์‹คํ–‰ํ•  ์ฝ”๋“œ
            console.error('Error:', error);
        }
    });

๐Ÿ’ก์ฐธ๊ณ 


jQuery์˜ $.get() ์€ JSON์œผ๋กœ ์ž๋ฃŒ๊ฐ€ ๋„์ฐฉํ•˜๋ฉด ์•Œ์•„์„œ array/object ์ž๋ฃŒ๋กœ ๋ฐ”๊ฟ”์ฃผ์ง€๋งŒ,
Javascript๋Š” ๋”ฐ๋กœ json ๋ฐ์ดํ„ฐ ํ˜•์‹ ๋ณ€ํ™˜์ด ํ•„์š”ํ•จ




AJAX ์š”์ฒญํ•˜๊ธฐ (โœจjavascript)

*์ตœ๊ทผ์—๋Š” ์ฃผ๋กœ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ fetch๊ฐ€ ๋งŽ์ด ์‚ฌ์šฉ๋˜๊ณ  ์žˆ๋‹ค.

fetch๋Š” ๋ธŒ๋ผ์šฐ์ €์—์„œ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ œ๊ณต๋˜๋Š” ๋„ค์ดํ‹ฐ๋ธŒ API์ด๋ฉฐ, Promise ๊ธฐ๋ฐ˜์œผ๋กœ ๋น„๋™๊ธฐ์ ์ธ ๋ฐ์ดํ„ฐ ์š”์ฒญ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.


fetch์˜ ์ฃผ์š” ํŠน์ง•

  • ๋„ค์ดํ‹ฐ๋ธŒ API: ๋ธŒ๋ผ์šฐ์ €์— ๋‚ด์žฅ๋œ ๊ธฐ๋Šฅ์œผ๋กœ, ๋ณ„๋„์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋‚˜ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์„ค์น˜ํ•  ํ•„์š”๊ฐ€ ์—†์Œ

  • Promise ๊ธฐ๋ฐ˜: Promise๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋ฏ€๋กœ, ๋น„๋™๊ธฐ์ ์ธ ๋ฐ์ดํ„ฐ ์š”์ฒญ์„ ๋” ๊ฐ„๊ฒฐํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Œ

  • ๊ฐ„๋‹จํ•˜๊ณ  ์œ ์—ฐํ•œ ์‚ฌ์šฉ๋ฒ•: ๊ฐ„๋‹จํ•œ ๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•˜์—ฌ ์š”์ฒญ์„ ์ƒ์„ฑํ•˜๊ณ  ์‘๋‹ต์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Œ


์ œ์ด์ฟผ๋ฆฌ์˜ $.get๋„ ์—ฌ์ „ํžˆ ๋งŽ์€ ํ”„๋กœ์ ํŠธ์—์„œ ์‚ฌ์šฉ๋˜๊ณ  ์žˆ์ง€๋งŒ, ์ œ์ด์ฟผ๋ฆฌ์˜ ํฌ๊ธฐ๊ฐ€ ํฌ๊ณ  ๋„ค์ดํ‹ฐ๋ธŒ ๋ธŒ๋ผ์šฐ์ € ๊ธฐ๋Šฅ์ด ํ–ฅ์ƒ๋˜๋ฉด์„œ ์ œ์ด์ฟผ๋ฆฌ๋ฅผ ๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ๋Š” ๋‹ค์–‘ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ๋„ค์ดํ‹ฐ๋ธŒ API๊ฐ€ ๋“ฑ์žฅํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ตœ๊ทผ์—๋Š” ์ œ์ด์ฟผ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒฝํ–ฅ์ด ์žˆ๋‹ค.

fetch๋Š” ๋ธŒ๋ผ์šฐ์ €์—์„œ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ œ๊ณต๋˜๋ฏ€๋กœ ์ถ”๊ฐ€์ ์ธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•„๋„ ๋˜๋ฉฐ Promise ๊ธฐ๋ฐ˜์ด๊ธฐ ๋•Œ๋ฌธ์— ๋น„๋™๊ธฐ ์ฝ”๋“œ๋ฅผ ๋” ๊ฐ„๊ฒฐํ•˜๊ฒŒ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์–ด ํ˜„์žฌ ๋งŽ์ด ์“ฐ์ด๋Š” ์ถ”์„ธ์ด๋‹ค.


๊ธฐ๋ณธ ์‚ฌ์šฉ๋ฒ•์€ ์•„๋ž˜์™€ ๊ฐ™์Œ๐Ÿ‘‡

function fetchData() {
  fetch('https://jsonplaceholder.typicode.com/todos/1')
    .then(response => response.json())
    .then(data => {
      console.log(data);
    })
    .catch(error => {
      console.error('Error:', error);
    });
}

fetchData();

//๊ธฐ๋ณธ์ ์œผ๋กœ ์ด๋Ÿฐ์‹
fetch(๊ฒฝ๋กœ)
  .then(response => response.json())
  .then(data => {})

๐Ÿ’กEdgeHTML ์—”์ง„์„ ์‚ฌ์šฉํ•˜๋Š” Edge ๋ธŒ๋ผ์šฐ์ €์˜ ์ด์ „ ๋ฒ„์ „์€ fetch๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š์•˜์œผ๋‚˜ EdgeHTML ๋Œ€์‹ ์— Chromium ์—”์ง„์„ ์‚ฌ์šฉํ•˜๋Š” Edge ๋ธŒ๋ผ์šฐ์ €๋Š” ES6์˜ fetch๋ฅผ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ง€์›ํ•œ๋‹ค.
Edge ๋ธŒ๋ผ์šฐ์ €๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ, ์ตœ์‹  ๋ฒ„์ „์œผ๋กœ ์—…๋ฐ์ดํŠธํ•˜๋ฉด fetch๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

profile
๊ฐœ๋ธ”๋ฆฌ์…” ๊ฟˆ๊พธ๋Š” ํผ๋ธ”์˜ ๊ฐœ๋ฐœ๊ณต๋ถ€๐Ÿšถโ€โ™€๏ธ ์ฒœ์ฒœํžˆ ๊ฑธ์–ด๊ฐ€๋Š” ์ค‘

0๊ฐœ์˜ ๋Œ“๊ธ€

๊ด€๋ จ ์ฑ„์šฉ ์ •๋ณด