AJAX (Asynchronous JavaScript and XML)
"AJAX๋ ๋น๋๊ธฐ์ ์ผ๋ก ์๋ฒ์ ์น ํ์ด์ง ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ๊ตํํ๊ธฐ ์ํ ๊ธฐ์ ์ด๋ค."
JSON (JavaScript Object Notation)
"JSON์ ๋ฐ์ดํฐ๋ฅผ ํํํ๊ธฐ ์ํ ๊ฒฝ๋์ ๋ฐ์ดํฐ ๊ตํ ํ์์ด๋ค."
๐๊ฐ๋จํ๊ฒ ๋งํ๋ฉด ๊ฑ,
- AJAX : ๋ฐ์ดํฐ๋ฅผ ๋น๋๊ธฐ์ ์ผ๋ก ์ฃผ๊ณ ๋ฐ๊ธฐ ์ํ ๊ธฐ์
- JSON : ๋ฐ์ดํฐ๋ฅผ ํํํ๊ณ ๊ตํํ๊ธฐ ์ํ ํ์ (AJAX์์ ์ฌ์ฉ๋๋ ๋ฐ์ดํฐ ํ์ ์ค ํ๋์ผ ๋ฟ)
ํ์ด์ง ๋ฆฌ๋ก๋ ์์ด ๋์ ์ ๋ฐ์ดํธ: AJAX๋ฅผ ์ฌ์ฉํ๋ฉด ์ ์ฒด ํ์ด์ง๋ฅผ ๋ค์ ๋ก๋ํ์ง ์๊ณ ๋ ํ์ด์ง์ ์ผ๋ถ๋ถ์ ์ ๋ฐ์ดํธํ ์ ์๋ค. ์ด๋ก ์ธํด ์ฌ์ฉ์ ๊ฒฝํ์ด ํฅ์๋๋ฉฐ, ์น ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋น ๋ฅด๊ณ ๋ฐ์์ฑ์ด ๋ฐ์ด๋ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํ ์ ์๋ค.
์๋ฒ์์ ํจ์จ์ ์ธ ํต์ : ๋น๋๊ธฐ์ ์ผ๋ก ์๋ฒ์ ํต์ ํ๋ฏ๋ก ์ฌ์ฉ์๋ ๋ค๋ฅธ ์์ ์ ์ํํ๊ฑฐ๋ ๋ค๋ฅธ ๋ถ๋ถ์ ํ์ํ๋ ๋์์๋ ๋ฐ์ดํฐ ์์ฒญ ๋ฐ ์๋ต์ ๊ธฐ๋ค๋ฆด ํ์๊ฐ ์๋ค. ์ด๋ ์ฌ์ฉ์ ๊ฒฝํ์ ํฅ์์ํค๊ณ ์ฑ๋ฅ์ ์ต์ ํํ๋ค.
๋ถ๋ถ์ ์ธ ๋ฐ์ดํฐ ์ ๋ฐ์ดํธ: ํ์ํ ๋ถ๋ถ๋ง ์ ๋ฐ์ดํธํ ์ ์์ผ๋ฏ๋ก ๋๋์ ๋ฐ์ดํฐ๋ฅผ ๋ค์ ๊ฐ์ ธ์ค๊ฑฐ๋ ์ ์ฒด ํ์ด์ง๋ฅผ ์๋ก ๊ณ ์น๋ ๋์ ํน์ ์์๋ง ๊ฐฑ์ ํ ์ ์๋ค. ์ด๋ ๋์ญํญ์ ์ ์ฝํ๊ณ ๋น ๋ฅธ ์๋ต์ฑ์ ์ ์งํ๋ ๋ฐ ๋์์ด ๋๋ค.
์ฌ์ฉ์ ์นํ์ ์ธ ๊ฒฝํ: ํ์ด์ง ๋ฆฌ๋ก๋ ์์ด ๋ฐ์ดํฐ๋ฅผ ์ ๋ฐ์ดํธํ ์ ์๊ธฐ ๋๋ฌธ์ ์ฌ์ฉ์๋ ์์ฐ์ค๋ฝ๊ฒ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ํ์ํ๊ณ ์ํธ ์์ฉํ ์ ์๋ค. ์ด๋ ๋ ๋์ ์ฌ์ฉ์ ๊ฒฝํ์ ์ ๊ณตํ๋ ๋ฐ ๊ธฐ์ฌํ๋ค.
๋น๋๊ธฐ์ ํ๋ก๊ทธ๋๋ฐ: AJAX๋ฅผ ํตํด ๋น๋๊ธฐ์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ฉด ์น ์ ํ๋ฆฌ์ผ์ด์
์ ์ฌ์ฉ์ ์
๋ ฅ์ ๋ ์ ์ํ๊ฒ ์๋ตํ ์ ์๋ค. ์ด๋ ์ ํ๋ฆฌ์ผ์ด์
์ ์ฑ๋ฅ์ ํฅ์์ํค๊ณ ๋๋ ทํ ์ฌ์ฉ์ ๊ฒฝํ์ ์ ๊ณตํ๋ ๋ฐ ๋์์ด ๋๋ค.
์ข ํฉํ๋ฉด, AJAX๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ๋น๋๊ธฐ์ ์ผ๋ก ์ฒ๋ฆฌํจ์ผ๋ก์จ ๋ ๋น ๋ฅด๊ณ ์ ์ฐํ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ฐํ๊ณ ์ฌ์ฉ์์๊ฒ ๋ฐ์ด๋ ๊ฒฝํ์ ์ ๊ณตํ ์ ์์ต๋๋ค.
$.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 ์์ ์๋ ์ฝ๋๋ฅผ ์คํ.
์๋ฒ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ผ ์ ์๋ POST์์ฒญ์ ๋ ๋ฆฌ๊ณ ์ถ์ผ๋ฉด?
$.post('url~~', {name : 'kim'})
url ์ ์ ๊ณ ๋ค์ ์๋ฒ๋ก ๋ณด๋ผ ๋ฐ์ดํฐ๋ฅผ ์ ์ผ๋ฉด ๋.
๐ก done/fail ๋ง๊ณ then/catch ์ฌ์ฉ ๊ฐ๋ฅ
๐๋ ์์ธํ๊ฒ๐
$.get / $.post ๋ง๊ณ $.ajax ๋ฉ์๋ ๋ ์์ -> get, post ๋ ๋ค ๊ฐ๋ฅ
$.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);
}
});
$.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 ๋ฐ์ดํฐ ํ์ ๋ณํ์ด ํ์ํจ
*์ต๊ทผ์๋ ์ฃผ๋ก ์๋ฐ์คํฌ๋ฆฝํธ์ fetch๊ฐ ๋ง์ด ์ฌ์ฉ๋๊ณ ์๋ค.
fetch๋ ๋ธ๋ผ์ฐ์ ์์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ ๊ณต๋๋ ๋ค์ดํฐ๋ธ API์ด๋ฉฐ, Promise ๊ธฐ๋ฐ์ผ๋ก ๋น๋๊ธฐ์ ์ธ ๋ฐ์ดํฐ ์์ฒญ์ ์ํํ ์ ์๋ค.
๋ค์ดํฐ๋ธ 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๋ฅผ ์ฌ์ฉํ ์ ์๋ค.