AJAX์ ์๋ฒ
AJAX๋ Asynchronous
JavaScript And Xml์ ์ฝ์๋ก
์๋ฒ์ ๋น๋๊ธฐ์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ์๋ฐ์คํฌ๋ฆฝํธ ๊ธฐ์ ์ ์๋ฏธํ๋ค.
๊ทธ๋ฐ๋ฐ ์ด ๋ง์ด ์กฐ๊ธ์ ์์ํด๋ณด์ผ์ง๋ ๋ชจ๋ฅธ๋ค.
โ๋น๋๊ธฐ์ โ ์ด๋ผ๋ ๋ง๊ณผ โ์๋ฒโ๋ผ๋ ๋ง๋ถํฐ ์ด๋ ค์๋ณด์ฌ์ ๊ทธ๋ด๊น.
๊ทธ๋์ ์๋ฒ์ ๋ํด์ ๋จผ์ ๊ฐ๋ตํ๊ฒ ์ ๋ฆฌํ๊ณ ์ ํ๋ค.
์๋ฒ๋ ์ฌ์ฉ์๊ฐ ๋ฐ์ดํฐ๋ฅผ ์์ฒญ(Request)ํ๋ฉด ์์ฒญํ ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ด์ฃผ๋(Response) ํ๋ก๊ทธ๋จ์ด๋ค.
๊ทธ๋ฐ๋ฐ ์๋ฒ์๊ฒ ๋ฐ์ดํฐ๋ฅผ ์์ฒญํ ๋๋ ์๋ฌด๋ฐ ๋ฐฉ๋ฒ์ผ๋ก๋ ์์ฒญํ๋ ๊ฒ์ด ์๋๋ผ
์ ํด์ง ๋ฐฉ๋ฒ์ ๋ฐ๋ผ์ ์์ฒญ์ ํด์ผ์ง ์๋ฒ๋ ํด๋น ์์ฒญ์ ๋ํด ์๋ต์ ํ๋ค.
์ฆ, ์๋ฒ์ ๋ฐ์ดํฐ๋ฅผ ์์ฒญํ ๋ ๋ฐ์ดํฐ์ ์ ํํ URL์ ์์์ผ ํ๊ณ
ํด๋น URL๋ก GET ์์ฒญ์ ํด์ผ์ง๋ง ์๋ฒ๋ ํด๋น ๋ฐ์ดํฐ์ ๋ํด ์๋ตํ๋ค.
URL๊ณผ GET method
๋ณดํต ์๋ฒ์ ๋ฐ์ดํฐ์ ์ ๊ทผํ๋ URL์ ์๋ฒ์ ๊ฐ๋ฐ์๊ฐ ์๊ณ ์์ด ๋ช
์ํ๊ฑฐ๋
์ ๋ฌ ๋ฐ์ ์ ์๊ณ ๋ณธ์ธ์ด ์๋ฒ์ ๊ฐ๋ฐ์๋ผ๋ฉด ๋๋์ฑ ์๊ณ ์์ ๊ฒ์ด๋ค.
๊ทธ๋ ๋ค๋ฉด ๋จ์๊ฑด ํด๋น URL๋ก GET์์ฒญ์ ํ๋ ๊ฒ์ธ๋ฐ
GET์์ฒญ์ ํ๋ ๋ฐฉ๋ฒ์ ํฌ๊ฒ 3๊ฐ์ง ๋ฐฉ๋ฒ์ด ์๋ค.
์ฒซ ๋ฒ์งธ๋ก๋ ์ฃผ์์ฐฝ์ ํด๋น URL๊ณผ ์ ๊ทํํ์์ ์ด์ฉํด ์ง์ ์
๋ ฅํ๋ ๋ฐฉ๋ฒ์ด๊ณ
๋ ๋ฒ์งธ๋ form ํ๊ทธ์ action๊ณผ type์ ์์ฑํด ๋ฒํผ์ผ๋ก ๋ ๋ฆฌ๋ ๋ฐฉ๋ฒ์ด๋ค.
๊ทธ๋ฐ๋ฐ ๋ ๋ฐฉ๋ฒ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ์์ฒญํ ๋๋ง๋ค ํ์ด์ง๊ฐ ์๋ก๊ณ ์นจ๋๋ ์น๋ช
์ ์ธ ์์ฌ์์ด ์๋ค.
์์ปจ๋, ์ธ์คํ๊ทธ๋จ ํผ๋๋ฅผ ๋ฐ์ดํฐ๋ก ๋ฐ์์จ๋ค๊ณ ๊ฐ์ ํ ๋ ์น์ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์ฌ ๋๋ง๋ค
์๋ก์ด ํ์ด์ง๋ก ๊ณ ์น๊ณ ๋ฐ์ดํฐ๋ฅผ ๋ณด์ฌ์ค ๊ฒ์ด๊ณ ๊ต์ฅํ ๋ถ์์ฐ์ค๋ฌ์ด ๋์์ผ๋ก ๋ณด์ผ ๊ฒ์ด๋ค.
๋ฆฌ์กํธ๋ก SPA๋ฅผ ๊ตฌ์ฑํ๋ ๊ฒ๊ณผ ๊ฐ์ ์ด์ ๋ค. ์นดํ
๊ณ ๋ฆฌ๋ง๋ค ์๋ก๊ณ ์นจ๋๋ ๊ฒ์ด ์๊ฐ๋ณด๋ค ๊ณค๋ํ๋ค.
๊ทธ๋์ ๋์จ ๋ฐฉ๋ฒ์ด ์ธ ๋ฒ์งธ ๋ฐฉ๋ฒ์ด๋ค.
์ธ ๋ฒ์งธ๋ AJAX๋ฅผ ์ฌ์ฉํด GET์์ฒญ์ ๋ ๋ฆฌ๋ ๊ฒ์ด๋ค.
๊ฒฐ๊ตญ AJAX์ ํต์ฌ์ ์๋ก๊ณ ์นจ ์์ด๋ ์๋ฒ์๊ฒ GET ์์ฒญ์ ํ ์ ์๋ ์๋นํ JS์ฝ๋์ด๋ค.
AJAX ์์ฑ
-
์ ํต
var ajax = new XMLHttpRequest(); ajax.onreadystatechange = function () { if (this.readyState == 4 && this.status == 200) { console.log(ajax.responseText) } }; ajax.open("GET", "URL", true); ajax.send();
-
ํ๋
// fetch().then(() = > {}).then(() = > {}).catch(() = > {}) fetch('URL') .then((res) = > { if(!res.ok){ throw new Error('Error Msg'); } return res.json(); }) .then((result) = > { console.log(result); }) .catch((err) = > { console.log(err); })
-
JQUERY + AJAX
$.ajax ({ // URL์ ํ์ ์์์ด๋ฏ๋ก ๋ฐ๋์ ๊ตฌํํด์ผ ํ๋ Property์ ๋๋ค. url : "url", // ์์ฒญ์ด ์ ์ก๋ URL ์ฃผ์ type : "GET", // http ์์ฒญ ๋ฐฉ์ (default: โGETโ) async : true, // ์์ฒญ ์ ๋๊ธฐํ ์ฌ๋ถ. ๊ธฐ๋ณธ์ ๋น๋๊ธฐ(asynchronous) ์์ฒญ (default: true) cache : true, // ์บ์ ์ฌ๋ถ timeout : 3000, // ์์ฒญ ์ ํ ์๊ฐ ์์ ์๋ฃ๋์ง ์์ผ๋ฉด ์์ฒญ์ ์ทจ์ํ๊ฑฐ๋ error ์ฝ๋ฐฑ์ ํธ์ถ.(๋จ์: ms) data : {key : value}, // ์์ฒญ ์ ํฌํจ๋์ด์ง ๋ฐ์ดํฐ processData : true, // ๋ฐ์ดํฐ๋ฅผ ์ปจํ ํธ ํ์ ์ ๋ง๊ฒ ๋ณํ ์ฌ๋ถ contentType : "application/json", // ์์ฒญ ์ปจํ ํธ ํ์ dataType : "json", // ์๋ต ๋ฐ์ดํฐ ํ์ (๋ช ์ํ์ง ์์ ๊ฒฝ์ฐ ์๋์ผ๋ก ์ถ์ธก) beforeSend : function () { // XHR Header๋ฅผ ํฌํจํด์ HTTP Request๋ฅผ ํ๊ธฐ์ ์ ํธ์ถ๋ฉ๋๋ค. }, success : function(data, status, xhr) { // ์ ์์ ์ผ๋ก ์๋ต ๋ฐ์์ ๊ฒฝ์ฐ์๋ success ์ฝ๋ฐฑ์ด ํธ์ถ๋๊ฒ ๋ฉ๋๋ค. // ์ด ์ฝ๋ฐฑ ํจ์์ ํ๋ผ๋ฏธํฐ์์๋ ์๋ต ๋ฐ๋, ์๋ต ์ฝ๋ ๊ทธ๋ฆฌ๊ณ XHR ํค๋๋ฅผ ํ์ธํ ์ ์์ต๋๋ค. }, error : function(xhr, status, error) { // ์๋ต์ ๋ฐ์ง ๋ชปํ์๋ค๊ฑฐ๋ ์ ์์ ์ธ ์๋ต์ด์ง๋ง ๋ฐ์ดํฐ ํ์์ ํ์ธํ ์ ์๊ธฐ ๋๋ฌธ์ // error ์ฝ๋ฐฑ์ด ํธ์ถ๋ ์ ์์ต๋๋ค. // ์๋ฅผ ๋ค์ด, dataType์ ์ง์ ํด์ ์๋ต ๋ฐ์ ๋ฐ์ดํฐ ํ์์ ์ง์ ํ์์ง๋ง, // ์๋ฒ์์๋ ๋ค๋ฅธ ๋ฐ์ดํฐํ์์ผ๋ก ์๋ตํ๋ฉด error ์ฝ๋ฐฑ์ด ํธ์ถ๋๊ฒ ๋ฉ๋๋ค. }, complete : function(xhr, status) { // success์ error ์ฝ๋ฐฑ์ด ํธ์ถ๋ ํ์ ๋ฐ๋์ ํธ์ถ๋ฉ๋๋ค. // try - catch - finally์ finally ๊ตฌ๋ฌธ๊ณผ ๋์ผํฉ๋๋ค. } }) .done(function(data, textStatus, xhr) { // ์ฑ๊ณต ํ์ฒ๋ฆฌ }) .fail(function(xhr, textStatus, errorThrown) { // ์คํจ ํ์ฒ๋ฆฌ }) .always(function(data|xhr, textStatus, xhr|errorThrown) { // ์ฑ๊ณต ์ฌ๋ถ์ ๊ด๊ณ์์ด ํญ์ ๋ง์ง๋ง์ ์คํ }) // success / error ํํ $.ajax({ url: 'URL', type: 'POST', data: yourData, datatype: 'json', success: function (data, textStatus, xhr) { }, error: function (xhr, textStatus, errorThrown) { }, complete: function(xhr, status) { } }); // .done() / .fail() ํํ $.ajax({ url: 'URL', type: 'POST', data: yourData, datatype: 'json' }) .done(function(data, textStatus, xhr) { }) .fail(function(xhr, textStatus, errorThrown) { }) .always(function(data|xhr, textStatus, xhr|errorThrown) { }) .then(function(data, textStatus, xhr|errorThrown) { });
-
Axios ํ์ฌ ๋ด๊ฐ ๋ฆฌ์กํธ๋ก ๊ฐ์ฅ ๋ง์ด ์ฐ๋ ๋ฐฉ๋ฒ์ด๋ค.
axios({
url: 'url',
method: 'method'
})
.then((res) => {
if(res.status === 200){
// the code to run
}
})
.catch((err) => {
console.log(err);
})
CORS ์๋ฌ
AJAX๋ฅผ ์ฌ์ฉํ๋ค๋ณด๋ฉด ์๊ฐ๋ณด๋ค ๋น๋ฒํ๊ฒ CORS ์๋ฌ๋ฅผ ๋ง์ฃผํ ์ ์๋ค.
CORS์๋ฌ๋ ๋ค๋ฅธ ์๋ฒ์ ์์ฒญ์ ๋ ๋ฆฌ๋ ๊ฒฝ์ฐ ๋ฐ์ํ๋๋ฐ,
๋ณด์ ์ด์ ๊ด๋ จ๋ ๊ฒ์ด๋ผ ์ฌ์ ์ ์ฐจ๋จํด๋ ๊ฒ์ด๋ค.
๋ณด์ ์ด์ ๊ด๋ จ์ด๋ ๋์ง ์๋ ๊ฒ์ด ๋น์ฐ ์ข๊ฒ ์ง๋ง
ํน์ฌ๋ผ๋ ๊บผ์ผํ๋ค๋ฉด ํค๋์
Access-Control-Allow-Origin
์ ์ถ๊ฐํ๊ฑฐ๋
var cors = require('cors');
app.use(cors());
๋ก CORS ์ ์ฑ ๊ธฐ๋ฅ์ ๋๋ฉด ๋๋ค.