Jieunny์ ๋ธ๋ก๊ทธ
S2) Unit 7. [HTTP/๋คํธ์ํฌ] ๋ธ๋ผ์ฐ์ ์ ์๋ ์๋ฆฌ(๋ณด์ด๋ ๊ณณ) ๋ณธ๋ฌธ
S2) Unit 7. [HTTP/๋คํธ์ํฌ] ๋ธ๋ผ์ฐ์ ์ ์๋ ์๋ฆฌ(๋ณด์ด๋ ๊ณณ)
Jieunny 2023. 1. 30. 16:00๐ฃ SPA๋ฅผ ๋ง๋๋ ๊ธฐ์ : AJAX
โ๏ธ AJAX ๋?
โฐ Asynchronous JavaScript And XMLHttpRequest
โฐ JS ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค ํ๋๋ก JS๋ฅผ ์ฌ์ฉํ ๋น๋๊ธฐ ํต์ , ํด๋ผ์ด์ธํธ์ ์๋ฒ๊ฐ์ XML๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ๊ธฐ์ ์ด๋ค.
โฐ JS, DOM, Fetch, XMLHttpRequest, HTML ๋ฑ์ ๋ค์ํ ๊ธฐ์ ์ ์ฌ์ฉํ๋ ์น ๊ฐ๋ฐ ๊ธฐ๋ฒ
โฐ ์น ํ์ด์ง์ ํ์ํ ๋ถ๋ถ์ ํ์ํ ๋ฐ์ดํฐ๋ง ๋น๋๊ธฐ์ ์ผ๋ก ๋ฐ์์์ ํ๋ฉด์ ๊ทธ๋ฆด ์ ์๋ค.
โฐ ex) ๊ฒ์์ฐฝ์ ๊ธ์๋ฅผ ์ ๋ ฅํ ๋๋ง๋ค ์ถ์ฒ๊ฒ์์ด๋ฅผ ๋ณด์ฌ์ฃผ๊ฒ ๋๋ค.
โ๏ธ AJAX์ ํต์ฌ ๊ธฐ์
โฐ JS์ DOM, ๊ทธ๋ฆฌ๊ณ Fetch
โฐ Fetch๋ฅผ ์ฌ์ฉํ๋ฉด, ํ์ด์ง๋ฅผ ์ด๋ํ์ง ์์๋ ์๋ฒ๋ก๋ถํฐ ํ์ํ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์ฌ ์ ์๋ค.
โฐ ๋ธ๋ผ์ฐ์ ๋ Fetch๊ฐ ์๋ฒ์ ์์ฒญ์ ๋ณด๋ด๊ณ ์๋ต์ ๋ฐ์ ๋๊น์ง ๋ชจ๋ ๋์์ ๋ฉ์ถ๋ ๊ฒ์ด ์๋๋ผ ๊ณ์ํด์ ํ์ด์ง๋ฅผ ์ฌ์ฉํ ์ ์๊ฒ ํ๋ ๋น๋๊ธฐ์ ์ธ ๋ฐฉ์์ ์ฌ์ฉํ๋ค.
โฐ ํ์ํ ๋ฐ์ดํฐ๋ง ๊ฐ์ ธ์์ DOM์ ์ ์ฉ์์ผ ๊ธฐ์กด ํ์ด์ง์์ ํ์ํ ๋ถ๋ถ๋ง ๋ณ๊ฒฝ ํ ์ ์๋ค.
๐ฃ XHR๊ณผ Fetch
โฐ Fetch ์ด์ ์๋ XHR์ ์ฌ์ฉํ๋ค.
โฐ Fetch๋ XHR์ ๋จ์ ์ ๋ณด์ํ ์๋ก์ด Web API๋ก, XML ๋ณด๋ค ๊ฐ๋ณ๊ณ JS์ ํธํ๋๋ JSON์ผ๋ฅด ์ฌ์ฉํ๋ค.
โฐ promise ์ง์ ๋ฑ์ ์ฅ์ ์ ๊ฐ์ง๊ณ ์์ด ์ง๊ธ์ XHR๋ณด๋ค ๋ง์ด ์ฌ์ฉํ๋ค.
โ XHR์ด๋?
โฐ XMLHttpRequest๋ก, AJAX ์์ฒญ์ ์์ฑํ๋ JS API ๋ค.
โฐ XHR ๋ฉ์๋๋ก ๋ธ๋ผ์ฐ์ ์ ์๋ฒ๊ฐ์ ๋คํธ์ํฌ ์์ฒญ์ ์ ์กํ ์ ์๋ค.
โฐ ์ ์ฒด ํ์ด์ง๋ฅผ ๊ณ ์น์ง ์๊ณ ๋ URL์์ ๋ฐ์ดํฐ๋ฅผ ๊ฒ์ํ ์ ์๊ณ , ํ์ด์ง์ ์ผ๋ถ๋ง ์ ๋ฐ์ดํธ ํ ์ ์๋ค.
โฐ Cross-Site ์ด์ ๋ฑ์ ๋ถํธํจ์ด ์กด์ฌํ๋ค.
โ Cross-Site Scripting(XSS) ์ด๋?
๏น์น ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ผ์ด๋๋ ์ทจ์ฝ์ ์ผ๋ก ๊ด๋ฆฌ์๊ฐ ์๋ ๊ถํ์ด ์๋ ์ฌ์ฉ์๊ฐ ์น ์ฌ์ดํธ์ ์คํฌ๋ฆฝํธ๋ฅผ ์ฝ์ ํ๋ ๊ณต๊ฒฉ ๊ธฐ๋ฒ
โฐ XHR ์์
// XMLHttpRequest๋ฅผ ์ฌ์ฉ
var xhr = new XMLHttpRequest();
xhr.open('get', 'http://52.78.213.9:3000/messages');
xhr.onreadystatechange = function(){
if(xhr.readyState !== 4) return;
// readyState 4: ์๋ฃ
if(xhr.status === 200) {
// status 200: ์ฑ๊ณต
console.log(xhr.responseText); // ์๋ฒ๋ก๋ถํฐ ์จ ์๋ต
} else {
console.log('์๋ฌ: ' + xhr.status); // ์์ฒญ ๋์ค ์๋ฌ ๋ฐ์
}
}
xhr.send(); // ์์ฒญ ์ ์ก
โฐ Fetch ์์
// Fetch๋ฅผ ์ฌ์ฉ
fetch('http://52.78.213.9:3000/messages')
.then (function(response) {
return response.json();
})
.then(function (json) {
...
});
๐ฃ AJAX์ ์ฅ์
1๏ธโฃ ์๋ฒ์์ HTML์ ์์ฑํ์ฌ ๋ณด๋ด์ฃผ์ง ์์๋ ์น ํ์ด์ง๋ฅผ ๋ง๋ค ์ ์๋ค.
โฐ ์๋ฒ์์ ์์ฑ๋ HTML์ ๋ณด๋ด์ฃผ์ง ์์๋ ํ์ํ ๋ฐ์ดํฐ๋ฅผ ๋น๋๊ธฐ์ ์ผ๋ก ๊ฐ์ ธ์ ๋ธ๋ผ์ฐ์ ์์ ํ๋ฉด์ ์ผ๋ถ๋ง ์ ๋ฐ์ดํธํ์ฌ ๋ ๋๋ง ํ ์ ์๋ค.
2๏ธโฃ ํ์คํ๋ ๋ฐฉ๋ฒ
โฐ ์ด์ ์๋ ๋ธ๋ผ์ฐ์ ๋ง๋ค ๋ค๋ฅธ ๋ฐฉ์์ผ๋ก AJAX๋ฅผ ์ฌ์ฉํ์ผ๋, XHR์ด ํ์คํ๋๋ฉด์๋ถํฐ ๋ธ๋ผ์ฐ์ ์ ์๊ด์์ด AJAX๋ฅผ ์ฌ์ฉํ ์ ์๊ฒ ๋์๋ค.
3๏ธโฃ ์ ์ ์ค์ฌ ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ
โฐ AJAX๋ฅผ ์ฌ์ฉํ๋ฉด ์ผ๋ถ๋ถ๋ง ๋ ๋๋ง์ด ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ ๋น ๋ฅด๊ณ ๋ ๋ง์ ์ํธ์์ฉ์ด ๊ฐ๋ฅํ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ง๋ค ์ ์๋ค.
4๏ธโฃ ๋ ์์ ๋์ญํญ(๋คํธ์ํฌ ํต์ ํ ๋ฒ์ ๋ณด๋ผ ์ ์๋ ๋ฐ์ดํฐ์ ํฌ๊ธฐ)
โฐ AJAX๋ ํ์ํ ๋ฐ์ดํฐ๋ฅผ ํ ์คํธ ํํ(JSON, XML)๋ก ๋ณด๋ด๋ฉด ๋๊ธฐ ๋๋ฌธ์ ๋น๊ต์ ๋ฐ์ดํฐ์ ํฌ๊ธฐ๊ฐ ์๋ค.
๐ฃ AJAX์ ๋จ์
1๏ธโฃ Search Engine Optimization(SEO)์ ๋ถ๋ฆฌํ๋ค.
โฐ ์ฒ์ ๋ฐ๋ HTML ํ์ผ์๋ ๋ฐ์ดํฐ๋ฅผ ์ฑ์ฐ๊ธฐ ์ํ ํ๋ง ์์ฑ๋์ด ์๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค. HTML ํ์ผ์ ๋ผ๋๋ง ์๊ณ ๋ฐ์ดํฐ๋ ์๊ธฐ ๋๋ฌธ์ ์ฌ์ดํธ์ ์ ๋ณด๋ฅผ ๊ธ์ด๊ฐ๊ธฐ๊ฐ ์ด๋ ค์ ๊ฒ์ ์ต์ ํ๊ฐ ์ด๋ ต๋ค.
2๏ธโฃ ๋ค๋ก๊ฐ๊ธฐ ๋ฒํผ ๋ฌธ์
โฐ AJAX๋ ์ด์ ์ํ๋ฅผ ๊ธฐ์ตํ์ง ์๊ธฐ ๋๋ฌธ์ ๋ค๋ก๊ฐ๊ธฐ ๋ฒํผ์ด ์ฌ์ฉ์๊ฐ ์๋ํ ๋๋ก ๋์ํ์ง ์๋๋ค. ๋๋ฌธ์ ๋ค๋ก๊ฐ๊ธฐ ๋ฑ์ ๊ธฐ๋ฅ์ ๊ตฌํํ๊ธฐ ์ํด์๋ History API๋ฅผ ๋ฐ๋ก ์ฌ์ฉํด์ผ ํ๋ค.
๐ฃ SSR๊ณผ CSR
โ๏ธ SSR
โฐ Server Side Rendering
โฐ ์น ํ์ด์ง๋ฅผ ๋ธ๋ผ์ฐ์ ์์ ๋ ๋๋งํ๋ ๋์ ์ ์๋ฒ์์ ๋ ๋๋ง ํ๋ค.
โฐ SSR ์ ๊ณผ์
๏น๋ธ๋ผ์ฐ์ ๊ฐ URI๋ก GET ์์ฒญ์ ๋ณด๋ด๋ฉด, ์๋ฒ๋ ์ ํด์ง ์น ํ์ด์ง ํ์ผ์ ๋ธ๋ผ์ฐ์ ๋ก ์ ์กํ๋ค.
๏น์๋ฒ์ ์น ํ์ด์ง๊ฐ ๋ธ๋ผ์ฐ์ ์ ๋์ฐฉํ๋ฉด ์์ ํ ๋ ๋๋ง ๋๋ค.
โฐ ์๋ฒ์์ ์น ํ์ด์ง๋ฅผ ๋ธ๋ผ์ฐ์ ๋ก ๋ณด๋ด๊ธฐ ์ ์ ์๋ฒ์์ ์์ ํ ๋ ๋๋งํ๊ธฐ ๋๋ฌธ์ Server Side Rendering ์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค.
โฐ ์น ํ์ด์ง์ ๋ด์ฉ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฐ์ดํฐ๊ฐ ํ์ํ ๊ฒฝ์ฐ, ์๋ฒ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฌ์จ ๋ค์ ์น ํ์ด์ง๋ฅผ ์์ ํ ๋ ๋๋ง ๋ ํ์ด์ง๋ก ๋ณํํ ํ์ ๋ธ๋ผ์ฐ์ ์ ์๋ต์ผ๋ก ๋ณด๋ธ๋ค.
โฐ ์ฌ์ฉ์๊ฐ ๋ค๋ฅธ ๊ฒฝ๋ก๋ก ์ด๋ํ ๊ฒฝ์ฐ, ์๋ฒ๋ ๊ฐ์ ์์ ์ ๋ค์ ์ํํ๋ค. (์๋ก์ด ์ ์ ํ์ผ์ ์์ฒญ)
โ๏ธ CSR
โฐ Client Side Rendering
โฐ ํด๋ผ์ด์ธํธ(์น ๋ธ๋ผ์ฐ์ )์์ ํ์ด์ง๋ฅผ ๋ ๋๋ง ํ๋ค.
โฐ CSR์ ๊ณผ์
๏น๋ธ๋ผ์ฐ์ ์ ์์ฒญ์ ์๋ฒ๋ก ๋ณด๋ด๋ฉด ์๋ฒ๋ ์น ํ์ด์ง๋ฅผ ๋ ๋๋งํ๋ ๋์ , ์น ํ์ด์ง์ ๊ณจ๊ฒฉ์ด ๋ ๋จ์ผ ํ์ด์ง๋ฅผ ํด๋ผ์ด์ธํธ์ ๋ณด๋ธ๋ค.
๏น์ด๋ ์๋ฒ๋ ์น ํ์ด์ง์ ํจ๊ผ JS ํ์ผ์ ๋ณด๋ด๊ณ , ํด๋ผ์ด์ธํธ๊ฐ ์น ํ์ด์ง๋ฅผ ๋ฐ์ผ๋ฉด ์น ํ์ด์ง์ ํจ๊ป ์ ๋ฌ๋ JS ํ์ผ์ ๋ธ๋ผ์ฐ์ ์
์น ํ์ด์ง๋ฅผ ์์ ํ ๋ ๋๋ง ๋ ํ์ด์ง๋ก ๋ฐ๊พผ๋ค.
โฐ DB์ ๋ฐ์ดํฐ๊ฐ ํ์ํ ๊ฒฝ์ฐ, ๋ธ๋ผ์ฐ์ ๋ DB์ ์ ์ฅ๋ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์์ ์น ํ์ด์ง๋ฅผ ๋ ๋๋ง ํด์ผ ํ๋ฏ๋ก Fetch์ ๊ฐ์ API ๊ฐ ์ฌ์ฉ๋๋ค.
โฐ ์ฌ์ฉ์๊ฐ ๋ค๋ฅธ ๊ฒฝ๋ก๋ก ์ด๋ํ ๊ฒฝ์ฐ, ์๋ฒ๊ฐ ์น ํ์ด์ง๋ฅผ ๋ค์ ๋ณด๋ด์ง ์๊ณ ๋ธ๋ผ์ฐ์ ๋ ๋ธ๋ผ์ฐ์ ๊ฐ ์์ฒญํ ๊ฒฝ๋ก์ ๋ฐ๋ผ ํ์ด์ง๋ฅผ ๋ค์ ๋ ๋๋ง ํ๋ค. (๋์ ์ผ๋ก ๋ผ์ฐํ ์ ๊ด๋ฆฌํ๋ค)
๐ฃ SSR๊ณผ CSR์ ์ฐจ์ด์
SSR ์ฌ์ฉ | CSR ์ฌ์ฉ |
๏น์๋ฒ์์ ํ์ด์ง๋ฅผ ๋ ๋๋ง ํ๋ค. ๏นSEO๊ฐ ์ฐ์ ์์์ธ ๊ฒฝ์ฐ ์ฌ์ฉ ๏น์น ํ์ด์ง์ ์ฒซ ํ๋ฉด ๋ ๋๋ง์ด ๋นจ๋ผ์ผ ํ๋ ๊ฒฝ์ฐ ๏น๋ค์ด๋ฒ ๋ธ๋ก๊ทธ, ๋ด์ ํ์์ค |
๏นํด๋ผ์ด์ธํธ(๋ธ๋ผ์ฐ์ )์์ ํ์ด์ง๋ฅผ ๋ ๋๋ง ํ๋ค. ๏นSEO๊ฐ ์ฐ์ ์์๊ฐ ์๋ ๊ฒฝ์ฐ ์ฌ์ฉ ๏น์ฌ์ดํธ์ ํ๋ถํ ์ํธ ์์ฉ์ด ์๋ ๊ฒฝ์ฐ ๏น์๊ณ ๋ค ๊ฐ์ ์์ฝ ์ฌ์ดํธ |
'CodeStates > learning contents' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
S2) Unit 8. [HTTP/๋คํธ์ํฌ] Postman (0) | 2023.02.01 |
---|---|
S2) Unit 8. [HTTP/๋คํธ์ํฌ] REST API (0) | 2023.01.31 |
S2) Unit 7. [HTTP/๋คํธ์ํฌ] ๋ธ๋ผ์ฐ์ ์ ์๋ ์๋ฆฌ(๋ณด์ด์ง ์๋ ๊ณณ) (0) | 2023.01.30 |
S2) Unit 7. [HTTP/๋คํธ์ํฌ] HTTP (0) | 2023.01.30 |
S2) Unit 6. [React] React State & Props (2) | 2023.01.26 |