๐Ÿ“ถ ๋„คํŠธ์›Œํฌ - WEB_SERVICE 2ํƒ„

__Y0Connell__ยท2024๋…„ 6์›” 10์ผ

CS_STUDY

๋ชฉ๋ก ๋ณด๊ธฐ
16/19

์œ ํˆฌ๋ธŒ ๋„๋„ํ•œ ๊ฐœ๋ฐœ์ž๋‹˜ ๊ฐ•์˜ ๋ณต์Šต ๋ฐ ์ •๋ฆฌ๋ฅผ ์œ„ํ•œ ๊ธ€

  • ์ดˆ์ฐฝ๊ธฐ ์›น ์„œ๋น„์Šค ๊ตฌ์กฐ
  • ์›น ์„œ๋น„์Šค 3๋Œ€ ์š”์†Œ

๋„๋„๋‹˜ ์œ ํˆฌ๋ธŒ

์ดˆ์ฐฝ๊ธฐ ์›น ์„œ๋น„์Šค ๊ตฌ์กฐ : ๋‹จ๋ฐฉํ–ฅ์  ๊ตฌ์กฐ

์›น ํด๋ผ์ด์–ธํŠธ (๋ธŒ๋ผ์šฐ์ €):

์‚ฌ์šฉ์ž๋Š” ๋ธŒ๋ผ์šฐ์ €์— 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์˜ ์ฃผ์š” ์—ญํ• ์„ ์„ค๋ช…ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

  1. ํผ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ:

    • 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();
        }
    });
  2. ๋น„๋™๊ธฐ ํ†ต์‹  (AJAX):

    • JavaScript๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ AJAX ์š”์ฒญ์„ ๋ณด๋‚ด๋ฉด ํŽ˜์ด์ง€๋ฅผ ์ƒˆ๋กœ๊ณ ์นจํ•˜์ง€ ์•Š๊ณ ๋„ ์„œ๋ฒ„์™€ ํ†ต์‹ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ํŠนํžˆ ๋กœ๊ทธ์ธ๊ณผ ๊ฐ™์€ ์ž‘์—…์— ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.
    • 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);
    });
  3. ๋™์  ์ฝ˜ํ…์ธ  ์—…๋ฐ์ดํŠธ:

    • JavaScript๋Š” ์„œ๋ฒ„์—์„œ ๋ฐ›์€ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์›น ํŽ˜์ด์ง€์˜ ์ฝ˜ํ…์ธ ๋ฅผ ๋™์ ์œผ๋กœ ์—…๋ฐ์ดํŠธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋กœ๊ทธ์ธ ์„ฑ๊ณต ์‹œ ์‚ฌ์šฉ์ž ์ด๋ฆ„๊ณผ ์ธ์‚ฌ๋ง์„ ํ‘œ์‹œํ•˜๋Š” HTML ์š”์†Œ๋ฅผ ์—…๋ฐ์ดํŠธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์‚ฌ์šฉ์ž๋Š” ํŽ˜์ด์ง€๋ฅผ ๋‹ค์‹œ ๋กœ๋“œํ•˜์ง€ ์•Š๊ณ ๋„ ๋ณ€๊ฒฝ๋œ ๋‚ด์šฉ์„ ์‹ค์‹œ๊ฐ„์œผ๋กœ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    // ์˜ˆ์ œ: ๋กœ๊ทธ์ธ ํ›„ ํŽ˜์ด์ง€ ์—…๋ฐ์ดํŠธ
    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๋Š” ํด๋ผ์ด์–ธํŠธ ์ธก์—์„œ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ฐœ์„ ํ•˜๊ณ , ๋น„๋™๊ธฐ ์š”์ฒญ์„ ํ†ตํ•ด ์„œ๋ฒ„์™€ ์ƒํ˜ธ์ž‘์šฉํ•˜๋ฉฐ, ์‹ค์‹œ๊ฐ„์œผ๋กœ ์ฝ˜ํ…์ธ ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ํ–ฅ์ƒ์‹œํ‚ค๊ณ , ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ํšจ์œจ์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

profile
๋˜๋Š”๊ฑด ๋‹ค ํ•˜๊ธฐ / ํ•˜๋Š”๊ฑด ๋‹ค ๋˜๊ธฐ

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