์ ํฌ๋ธ ๋๋ํ ๊ฐ๋ฐ์๋ ๊ฐ์ ๋ณต์ต ๋ฐ ์ ๋ฆฌ๋ฅผ ์ํ ๊ธ


์ด์ฐฝ๊ธฐ ์น ์๋น์ค ๊ตฌ์กฐ : ๋จ๋ฐฉํฅ์ ๊ตฌ์กฐ
์น ํด๋ผ์ด์ธํธ (๋ธ๋ผ์ฐ์ ):
์ฌ์ฉ์๋ ๋ธ๋ผ์ฐ์ ์ URL์ ์
๋ ฅ
๋ธ๋ผ์ฐ์ ๋ DNS๋ฅผ ํตํด ์
๋ ฅ๋ ๋๋ฉ์ธ ์ด๋ฆ์ IP ์ฃผ์๋ก ๋ณํ
์ธํฐ๋ท:
๋ธ๋ผ์ฐ์ ๋ IP ์ฃผ์๋ฅผ ์ฌ์ฉํด ์น ์๋ฒ์ TCP/IP ์ฐ๊ฒฐ์ ์ค์
์ค์ ๋ ์ฐ๊ฒฐ์ ํตํด HTTP ์์ฒญ์ ๋ณด๋
์น ์๋ฒ:
HTTP ์์ฒญ์ ์์ ํ ์น ์๋ฒ๋ ์์ฒญ๋ ๋ฆฌ์์ค๋ฅผ ์ฐพ์
์ฌ๊ธฐ์๋ HTML, CSS, ์ด๋ฏธ์ง ํ์ผ ๋ฑ์ด ํฌํจ
์น ์๋ฒ๋ ์ด ๋ฆฌ์์ค๋ค์ HTTP ์๋ต ํํ๋ก ํด๋ผ์ด์ธํธ์ ์ ๋ฌ
ํด๋ผ์ด์ธํธ ์ธก:
๋ธ๋ผ์ฐ์ ๋ ๋ฐ์ HTML, CSS, ์ด๋ฏธ์ง ๋ฑ์ ๋ฆฌ์์ค๋ฅผ ๊ตฌ๋ฌธ ๋ถ์ํ์ฌ DOM(Document Object Model)์ ์์ฑ
์ด DOM์ ์ฌ์ฉํ์ฌ ํ๋ฉด์ ๋ด์ฉ์ ๋ ๋๋ง
์ด์ฐฝ๊ธฐ ์น ์๋น์ค๋ ์น์๋ฒ์ ์ด๋ค ์๋ฃ๋ฅผ ๋ฐ๋ก ๋๊ฒจ์ ์ ์ฅํ๋ ๊ธฐ๋ฅ์ ์์๊ณ ,
๋จ๋ฐฉํฅ์ ์ผ๋ก ์น ์๋ฒ์ ์๋ ์๋ฃ๋ฅผ ์ฝ์ด์ค๋ ๊ฒ๋ง ๊ฐ๋ฅํ๋ค. (GET ๋ฐฉ์)
์๋ฐฉํฅ์ ๊ตฌ์กฐ๋ก ์งํ
์น ํด๋ผ์ด์ธํธ (๋ธ๋ผ์ฐ์ ):
์ฌ์ฉ์๋ ๋ก๊ทธ์ธ ํผ์ ์ฌ์ฉ์ ID์ ๋น๋ฐ๋ฒํธ๋ฅผ ์
๋ ฅ
๋ธ๋ผ์ฐ์ ๋ HTTP POST ์์ฒญ์ ์ฌ์ฉํ์ฌ ์ด ์ ๋ณด๋ฅผ ์๋ฒ์ ๋ณด๋
์ธํฐ๋ท:
์ฌ์ฉ์๊ฐ ์
๋ ฅํ ์ ๋ณด๋ ์ธํฐ๋ท์ ํตํด ์น ์๋ฒ๋ก ์ ๋ฌ
์น ์๋ฒ:
์น ์๋ฒ๋ ์ด ์์ฒญ์ WAS (์น ์ ํ๋ฆฌ์ผ์ด์
์๋ฒ)๋ก ์ ๋ฌ
WAS (์น ์ ํ๋ฆฌ์ผ์ด์ ์๋ฒ):
WAS๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฌ์ฉ์ ์ ๋ณด๋ฅผ ์กฐํํ๊ธฐ ์ํด SQL ์ฟผ๋ฆฌ๋ฅผ ์คํ
์: select * from User where ID = tester
๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ํด๋น ์ฌ์ฉ์์ ์ ๋ณด๋ฅผ ์ฐพ์
๋ฐ์ดํฐ๋ฒ ์ด์ค (DB):
DB๋ WAS๋ก ์ฌ์ฉ์ ์ ๋ณด์ ์กด์ฌ ์ฌ๋ถ๋ฅผ ๋ฐํ
WAS :
WAS๋ ์ฌ์ฉ์์๊ฒ ์ฑ๊ณต ๋๋ ์คํจ ์๋ต์ HTML, CSS, ์ด๋ฏธ์ง์ ํจ๊ป ์ ์ก
์ฑ๊ณต ์: ๋ก๊ทธ์ธ ์ฑ๊ณต ํ์ด์ง ๋๋ ์ฌ์ฉ์๊ฐ ์์ฒญํ ํ์ด์ง๋ฅผ ๋ฐํ
์คํจ ์: ๋ก๊ทธ์ธ ์คํจ ๋ฉ์์ง๋ฅผ ํฌํจํ ํ์ด์ง๋ฅผ ๋ฐํ
์น ํด๋ผ์ด์ธํธ :
๋ธ๋ผ์ฐ์ ๋ ๋ฐ์ ์๋ต์ ๊ตฌ๋ฌธ ๋ถ์ํ์ฌ DOM์ ์์ฑํ๊ณ ํ๋ฉด์ ๋ ๋๋ง
์ฑ๊ณต ์: ์ฌ์ฉ์ ์ด๋ฆ(์: "tester")๊ณผ ์ธ์ฌ๋ง(์: "Hi")์ ํ์
์คํจ ์: "Unknown" ๋ฉ์์ง๋ฅผ ํ์
์ถ๊ฐ์ ์ผ๋ก JAVA SCRIPT (ํด๋ผ์ด์ธํธ ๋จ์์ ์ฐ์ฐ์ด๋?)
JavaScript๋ ์น ์ ํ๋ฆฌ์ผ์ด์ ์์ ๋ค์ํ ์ญํ ์ ํฉ๋๋ค. ์ด ๋ค์ด์ด๊ทธ๋จ์์ JavaScript์ ์ฃผ์ ์ญํ ์ ์ค๋ช ํ๊ฒ ์ต๋๋ค.
ํผ ๋ฐ์ดํฐ ์ฒ๋ฆฌ:
// ์์ : ๋ก๊ทธ์ธ ํผ ๊ฒ์ฆ
document.getElementById('loginForm').addEventListener('submit', function(event) {
var username = document.getElementById('username').value;
var password = document.getElementById('password').value;
if (!username || !password) {
alert('๋ชจ๋ ํ๋๋ฅผ ์
๋ ฅํด์ฃผ์ธ์.');
event.preventDefault();
}
});
๋น๋๊ธฐ ํต์ (AJAX):
// ์์ : AJAX๋ฅผ ํตํ ๋ก๊ทธ์ธ ์์ฒญ
document.getElementById('loginForm').addEventListener('submit', function(event) {
event.preventDefault();
var xhr = new XMLHttpRequest();
xhr.open('POST', '/login', true);
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
xhr.onload = function() {
if (xhr.status === 200) {
var response = JSON.parse(xhr.responseText);
if (response.success) {
// ๋ก๊ทธ์ธ ์ฑ๊ณต ์ฒ๋ฆฌ
document.getElementById('message').textContent = '๋ก๊ทธ์ธ ์ฑ๊ณต!';
} else {
// ๋ก๊ทธ์ธ ์คํจ ์ฒ๋ฆฌ
document.getElementById('message').textContent = '๋ก๊ทธ์ธ ์คํจ: ' + response.message;
}
}
};
var formData = 'username=' + encodeURIComponent(document.getElementById('username').value) +
'&password=' + encodeURIComponent(document.getElementById('password').value);
xhr.send(formData);
});
๋์ ์ฝํ ์ธ ์ ๋ฐ์ดํธ:
// ์์ : ๋ก๊ทธ์ธ ํ ํ์ด์ง ์
๋ฐ์ดํธ
function updateUserGreeting(username) {
document.getElementById('greeting').textContent = username + '๋, ํ์ํฉ๋๋ค!';
}
// ์์ AJAX ์์ ์์ ๋ก๊ทธ์ธ ์ฑ๊ณต ์ ์ด ํจ์๋ฅผ ํธ์ถ
xhr.onload = function() {
if (xhr.status === 200) {
var response = JSON.parse(xhr.responseText);
if (response.success) {
updateUserGreeting(response.username);
} else {
document.getElementById('message').textContent = '๋ก๊ทธ์ธ ์คํจ: ' + response.message;
}
}
};
์ด์ฒ๋ผ JavaScript๋ ํด๋ผ์ด์ธํธ ์ธก์์ ์ฌ์ฉ์ ์ธํฐํ์ด์ค๋ฅผ ๊ฐ์ ํ๊ณ , ๋น๋๊ธฐ ์์ฒญ์ ํตํด ์๋ฒ์ ์ํธ์์ฉํ๋ฉฐ, ์ค์๊ฐ์ผ๋ก ์ฝํ ์ธ ๋ฅผ ์ ๋ฐ์ดํธํ๋ ์ญํ ์ ํฉ๋๋ค. ์ด๋ฅผ ํตํด ์ฌ์ฉ์ ๊ฒฝํ์ ํฅ์์ํค๊ณ , ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ํจ์จ์ฑ์ ๋์ผ ์ ์์ต๋๋ค.