๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Today I Learned(TIL)/์ŠคํŒŒ๋ฅดํƒ€ ๋‚ด์ผ๋ฐฐ์›€์บ ํ”„

์›น ๊ฐœ๋ฐœ ์ข…ํ•ฉ_3์ฃผ์ฐจ

by carrot0911 2024. 10. 30.

์›น ๊ฐœ๋ฐœ 3์ฃผ ์ฐจ์— ๋ฐฐ์šด ๋‚ด์šฉ

Jquery + fetch

2์ฃผ ์ฐจ์— JQuery๋ฅผ ๋ง›๋ณด๊ธฐ ํ–ˆ์—ˆ๋Š”๋ฐ 3์ฃผ ์ฐจ์—๋Š” ๋ฐฐ์šด JQuery๋ฅผ ํ”„๋กœ์ ํŠธ์— ์ ์šฉํ•ด ๋ดค๋‹ค!
fetch๋ผ๋Š” ์ƒˆ๋กœ์šด ๊ฐœ๋…๋„ ๋“ฑ์žฅํ•˜์˜€๊ณ , ๋งˆ์ง€๋ง‰ ์ˆ™์ œ๋กœ ๋ฐฐ์šด ๋‚ด์šฉ์„ ๋ฐ”ํƒ•์œผ๋กœ ํŽ˜์ด์ง€ ์˜ˆ์‹œ ์‚ฌ์ง„์„ ๋ณด๋ฉฐ ์ง์ ‘ ํŽ˜์ด์ง€๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ๋„ ๊ฒฝํ—˜ํ–ˆ๋‹ค๐Ÿ˜Ž

์ถ”์–ต์•จ๋ฒ” - JQuery ์ ์šฉํ•˜๊ธฐ!

์ „์— ๋งŒ๋“ค์—ˆ๋˜ ์ถ”์–ต์•จ๋ฒ”์˜ PostBox๋ฅผ ๋ฒ„ํŠผ์„ ํ†ตํ•ด ์—ด๊ณ  ๋‹ซ๋Š” ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ–ˆ๋‹ค!!

function openClose() {
    $('#postingbox').toggle();  //display ๊ฐ’์ด none์œผ๋กœ ๋ฐ”๋€Œ๋ฉด์„œ ์•ˆ๋ณด์ด๊ฒŒ ๋˜๋Š” ์›๋ฆฌ์ด๋‹ค. 
}
<div class="mytitle">
    <h1>๋‚˜๋งŒ์˜ ์ถ”์–ต์•จ๋ฒ”</h1>
    <p>ํ˜„์žฌ ์„œ์šธ์˜ ๋ฏธ์„ธ๋จผ์ง€ : <span id="msg">๋‚˜์จ</span></p>
    <button onclick="openClose()">์ถ”์–ต ์ €์žฅํ•˜๊ธฐ</button>
</div>
<div class="mypostingbox" id="postingbox">
    <div class="form-floating mb-3">
        <input type="email" class="form-control" id="image" placeholder="์•จ๋ฒ” ์ด๋ฏธ์ง€">
        <label for="floatingInput">์•จ๋ฒ” ์ด๋ฏธ์ง€</label>
    </div>
    <div class="form-floating mb-3">
        <input type="email" class="form-control" id="title" placeholder="์•จ๋ฒ” ์ œ๋ชฉ">
        <label for="floatingInput">์•จ๋ฒ” ์ œ๋ชฉ</label>
    </div>
    <div class="form-floating mb-3">
        <input type="email" class="form-control" id="content" placeholder="์•จ๋ฒ” ๋‚ด์šฉ">
        <label for="floatingInput">์•จ๋ฒ” ๋‚ด์šฉ</label>
    </div>
    <div class="form-floating mb-3">
        <input type="email" class="form-control" id="date" placeholder="์•จ๋ฒ” ๋‚ ์งœ">
        <label for="floatingInput">์•จ๋ฒ” ๋‚ ์งœ</label>
    </div>
    <div class="mybtn">
        <button type="button" class="btn btn-dark" onclick="makeCard()">๊ธฐ๋กํ•˜๊ธฐ</button>
        <button type="button" class="btn btn-outline-dark">๋‹ซ๊ธฐ</button>
    </div>
</div>

๋จผ์ € HTML์˜ head ํƒœ๊ทธ ์•ˆ์— script ํƒœ๊ทธ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  function ํ•จ์ˆ˜ openClose๋ฅผ ์ž‘์„ฑํ–ˆ๋‹ค.
์ถ”์–ต ์ €์žฅํ•˜๊ธฐ ๋ฒ„ํŠผ ํƒœ๊ทธ์— onclick="openClose()" ๋ฅผ ์ถ”๊ฐ€ํ–ˆ๊ณ   id="postingbox" ๋ฅผ ๊ฐ€์ ธ์™€์„œ toggle ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด PostBox๋ฅผ ์—ด๊ณ  ๋‹ซ๊ณ  ํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค!!
์‚ฌ๋ผ์ง€๊ณ  ๋‹ค์‹œ ๋‚˜ํƒ€๋‚˜๋Š” ๊ฑธ ๋ˆˆ์œผ๋กœ ์ง์ ‘ ๋ณด๋‹ˆ๊นŒ ๋” ์‹ ๊ธฐํ–ˆ๋˜ ๊ฒƒ ๊ฐ™๋‹ค ๐Ÿ˜ฎ

์™ผ์ชฝ์ด ์ถ”์–ต ์ €์žฅํ•˜๊ธฐ ๋ฒ„ํŠผ์„ ์ด์šฉํ•ด์„œ PostBox๋ฅผ ๋‹ซ๊ธฐ ์ „, ์˜ค๋ฅธ์ชฝ์ด PostBox๋ฅผ ๋‹ซ์€ ํ›„ ๋ชจ์Šต์ด๋‹ค ๐Ÿ˜Š

๋‹ค์Œ์œผ๋กœ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ž…๋ ฅํ•˜๊ณ  ์นด๋“œ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ–ˆ๋‹ค!!

function makeCard() {
    let image = $('#image').val();  //์•ˆ์— ์žˆ๋Š” image value ๊ฐ’์„ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋‹ค.
    let title = $('#title').val();  //์•ˆ์— ์žˆ๋Š” title value ๊ฐ’์„ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋‹ค.
    let content = $('#content').val();  //์•ˆ์— ์žˆ๋Š” content value ๊ฐ’์„ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋‹ค.
    let date = $('#date').val();  //์•ˆ์— ์žˆ๋Š” date value ๊ฐ’์„ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋‹ค.

    let temp_html = `
    <div class="col">
        <div class="card h-100">
            <img src="${image}"
                class="card-img-top" alt="...">
            <div class="card-body">
                <h5 class="card-title">${title}</h5>
                <p class="card-text">${content}</p>
            </div>
            <div class="card-footer">
                <small class="text-body-secondary">${date}</small>
            </div>
        </div>
    </div>`;

    $('#card').append(temp_html);  //card ํ•˜๋‚˜ ์ถ”๊ฐ€ํ•˜๊ธฐ!
}
<div class="mybtn">
    <button type="button" class="btn btn-dark" onclick="makeCard()">๊ธฐ๋กํ•˜๊ธฐ</button>
    <button type="button" class="btn btn-outline-dark">๋‹ซ๊ธฐ</button>
</div>
<div id="card" class="row row-cols-1 row-cols-md-4 g-4">
    <div class="col">
        <div class="card h-100">
            <img src="https://images.unsplash.com/photo-1446768500601-ac47e5ec3719?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&w=1446&q=80"
                class="card-img-top" alt="...">
            <div class="card-body">
                <h5 class="card-title">์•จ๋ฒ” ์ œ๋ชฉ</h5>
                <p class="card-text">์•จ๋ฒ” ๋‚ด์šฉ</p>
            </div>
            <div class="card-footer">
                <small class="text-body-secondary">์•จ๋ฒ” ๋‚ ์งœ</small>
            </div>
        </div>
    </div>
</div>


script ํƒœ๊ทธ ์•ˆ์— function ํ•จ์ˆ˜ makeCard๋ฅผ ์ž‘์„ฑํ–ˆ๋‹ค.
๊ธฐ๋กํ•˜๊ธฐ ๋ฒ„ํŠผ์—์„œ onclick="makeCard()" ๋ฅผ ์ถ”๊ฐ€ํ–ˆ๊ณ  id="card" ๋ฅผ ๊ฐ€์ ธ์™€์„œ append ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ์ƒˆ๋กœ์šด ์นด๋“œ๋ฅผ ์›ํ•˜๋Š” ์œ„์น˜์— ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค!!
๋‚ด๊ฐ€ ์›ํ•˜๋Š” ๋‚ด์šฉ์„ ์ž…๋ ฅํ•˜๊ณ  ๋ฒ„ํŠผ์„ ๋ˆŒ๋ €์„ ๋•Œ ์ž…๋ ฅํ–ˆ๋˜ ๋‚ด์šฉ๋“ค์ด ์นด๋“œ๋กœ ๋งŒ๋“ค์–ด์ง€๋Š” ๊ณผ์ •์„ ๋ณด๋‹ˆ๊นŒ ๊ฐ•์˜๋ฅผ ๋” ํฅ๋ฏธ๋กญ๊ฒŒ ๋“ค์„ ์ˆ˜ ์žˆ์—ˆ๋‹ค ๐Ÿ˜Ž

์™ผ์ชฝ์ด ๋‚ด์šฉ๋งŒ ์ž…๋ ฅํ–ˆ์„ ๋•Œ, ์˜ค๋ฅธ์ชฝ์ด ๊ธฐ๋กํ•˜๊ธฐ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅธ ํ›„ ์นด๋“œ๊ฐ€ ์ƒ์„ฑ๋œ ๋ชจ์Šต์ด๋‹ค ๐Ÿ˜Š
ํ•˜์ง€๋งŒ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•ด์„œ ๋ณด์—ฌ์ฃผ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ์„œ ์ƒˆ๋กœ๊ณ ์นจ์„ ํ•˜๋ฉด ๊ทธ ์ „์— ์ถ”๊ฐ€ํ–ˆ๋˜ ๋‚ด์šฉ๋“ค์ด ๋ชจ๋‘ ์‚ฌ๋ผ์กŒ๋‹ค.......

 

์ŠคํŒŒ๋ฅดํƒ€ํ”Œ๋ฆญ์Šค - JQuery ์ ์šฉํ•˜๊ธฐ!

๋‹ค์Œ์œผ๋กœ ์ŠคํŒŒ๋ฅดํƒ€ํ”Œ๋ฆญ์Šค์˜  ํŽ˜์ด์ง€์—์„œ ์ถ”์–ต์•จ๋ฒ”์— ์‚ฌ์šฉํ–ˆ๋˜ ๊ธฐ๋Šฅ๋“ค์„ ๋‹ค์‹œ ํ•œ๋ฒˆ ํ•ด๋ณด๋Š” ์‹œ๊ฐ„์„ ๊ฐ€์กŒ๋‹ค!

function openClose() {
    $('#postingbox').toggle();
}
<div class="main">
        <div class="p-5 mb-4 bg-body-tertiary rounded-3">
            <div class="container-fluid py-5">
                <h1 class="display-5 fw-bold">ํ‚น๋ค</h1>
                <p class="col-md-8 fs-4">๋ณ‘๋“  ์™•์„ ๋‘˜๋Ÿฌ์‹ธ๊ณ  ํ‰ํ‰ํ•œ ์†Œ๋ฌธ์ด ๋– ๋ˆ๋‹ค. ์–ด๋‘ ์— ๋’ค๋ฎ์ธ ์กฐ์„ , ๊ธฐ์ดํ•œ ์—ญ๋ณ‘์— ์‹ ์Œํ•˜๋Š” ์‚ฐํ•˜. ์ •์ฒด ๋ชจ๋ฅผ ์•…์— ๋งž์„œ ๋ฐฑ์„ฑ์„ ๊ตฌ์›ํ•  ํฌ๋ง์€ ์˜ค์ง
                    ์„ธ์ž๋ฟ์ด๋‹ค.</p>
                <button onclick="openClose()" type="button" class="btn btn-outline-light">์˜ํ™” ๊ธฐ๋กํ•˜๊ธฐ</button>
                <button type="button" class="btn btn-outline-light">์ƒ์„ธ์ •๋ณด</button>
            </div>
        </div>
    </div>
<div class="mypostingbox" id="postingbox">
    <div class="form-floating mb-3">
        <input type="email" class="form-control" id="image" placeholder="์˜ํ™” ์ด๋ฏธ์ง€ ์ฃผ์†Œ">
        <label for="floatingInput">์˜ํ™” ์ด๋ฏธ์ง€ ์ฃผ์†Œ</label>
    </div>
    <div class="form-floating mb-3">
        <input type="email" class="form-control" id="title" placeholder="์˜ํ™” ์ œ๋ชฉ">
        <label for="floatingInput">์˜ํ™” ์ œ๋ชฉ</label>
    </div>
    <div class="input-group mb-3">
        <label class="input-group-text" for="inputGroupSelect01">๋ณ„์ </label>
        <select class="form-select" id="star">
            <option selected>๋ณ„์ ์„ ํƒ</option>
            <option value="โญ">โญ</option>
            <option value="โญโญ">โญโญ</option>
            <option value="โญโญโญ">โญโญโญ</option>
            <option value="โญโญโญโญ">โญโญโญโญ</option>
            <option value="โญโญโญโญโญ">โญโญโญโญโญ</option>
        </select>
    </div>
    <div class="form-floating mb-3">
        <input type="email" class="form-control" id="comment" placeholder="์ถ”์ฒœ ์ด์œ ">
        <label for="floatingInput">์ถ”์ฒœ ์ด์œ </label>
    </div>
    <button type="button" class="btn btn-danger" onclick="makeCard()">๊ธฐ๋กํ•˜๊ธฐ</button>
</div>

๋จผ์ € HTML์˜ head ํƒœ๊ทธ ์•ˆ์— script ํƒœ๊ทธ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  function ํ•จ์ˆ˜ openClose๋ฅผ ์ž‘์„ฑํ–ˆ๋‹ค.
์˜ํ™” ๊ธฐ๋กํ•˜๊ธฐ ๋ฒ„ํŠผ ํƒœ๊ทธ์— onclick="openClose()" ๋ฅผ ์ถ”๊ฐ€ํ–ˆ๊ณ   id="postingbox" ๋ฅผ ๊ฐ€์ ธ์™€์„œ toggle ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด PostBox๋ฅผ ์—ด๊ณ  ๋‹ซ๊ณ  ํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค!!
๋‹ค์‹œ ํ•œ ๋ฒˆ ๋ณต์Šตํ•˜๋Š” ๊ฑฐ์˜€์ง€๋งŒ ์—ฌ์ „ํžˆ ์‹ ๊ธฐํ–ˆ๋‹ค ๐Ÿ˜ฎ

์™ผ์ชฝ์ด ์˜ํ™” ๊ธฐ๋กํ•˜๊ธฐ ๋ฒ„ํŠผ์„ ์ด์šฉํ•ด์„œ PostBox๋ฅผ ๋‹ซ๊ธฐ ์ „, ์˜ค๋ฅธ์ชฝ์ด PostBox๋ฅผ ๋‹ซ์€ ํ›„ ๋ชจ์Šต์ด๋‹ค ๐Ÿ˜Š

๋‹ค์Œ์œผ๋กœ ๋™์ผํ•˜๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ์ž…๋ ฅํ•˜๊ณ  ์นด๋“œ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ–ˆ๋‹ค!!

function makeCard() {
    let image = $('#image').val();
    let title = $('#title').val();
    let comment = $('#comment').val();

    let star = $('#star').val();  //select๋กœ ์ด๋ฃจ์–ด์ง„ ๋ถ€๋ถ„์—์„œ๋Š” value์— ์žˆ๋Š” ๊ฐ’์„ ์ถœ๋ ฅํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ์ถœ๋ ฅํ•˜๊ณ  ์‹ถ์€ ๊ฐ’์œผ๋กœ value ๊ฐ’์„ ๋ณ€๊ฒฝํ•˜๋ฉด ๋œ๋‹ค!

    //console.log(image, title, comment);  //console ์ฐฝ์— ๊ฐ’ ๋„์šฐ๊ธฐ!
    //console.log(star);  //console ์ฐฝ์— ๊ฐ’ ๋„์šฐ๊ธฐ!

    let temp_html = `            
    <div class="col">
        <div class="card h-100">
            <img src="${image}"
                class="card-img-top" alt="...">
            <div class="card-body">
                <h5 class="card-title">${title}</h5>
                <p class="card-text">${star}</p>
                <p class="card-text">${comment}</p>
            </div>
        </div>
    </div>`;

    $('#card').append(temp_html);  //์นด๋“œ ์ถ”๊ฐ€ํ•˜๊ธฐ!
}
<div class="mypostingbox" id="postingbox">
    <button type="button" class="btn btn-danger" onclick="makeCard()">๊ธฐ๋กํ•˜๊ธฐ</button>
</div>
<div class="mycards">
    <div id="card" class="row row-cols-1 row-cols-md-4 g-4">
        <div class="col">
            <div class="card h-100">
                <img src="https://movie-phinf.pstatic.net/20210728_221/1627440327667GyoYj_JPEG/movie_image.jpg"
                    class="card-img-top" alt="...">
                <div class="card-body">
                    <h5 class="card-title">์˜ํ™” ์ œ๋ชฉ</h5>
                    <p class="card-text">โญโญโญ</p>
                    <p class="card-text">์˜ํ™” ์ฝ”๋ฉ˜ํŠธ</p>
                </div>
            </div>
        </div>
    </div>
</div>

script ํƒœ๊ทธ ์•ˆ์— function ํ•จ์ˆ˜ makeCard๋ฅผ ์ž‘์„ฑํ–ˆ๋‹ค.
๊ธฐ๋กํ•˜๊ธฐ ๋ฒ„ํŠผ์—์„œ onclick="makeCard()" ๋ฅผ ์ถ”๊ฐ€ํ–ˆ๊ณ  id="card" ๋ฅผ ๊ฐ€์ ธ์™€์„œ append ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ์ƒˆ๋กœ์šด ์นด๋“œ๋ฅผ ์›ํ•˜๋Š” ์œ„์น˜์— ์ถ”๊ฐ€ํ–ˆ๋‹ค!!
๋‹ค์‹œ ๋ฐ˜๋ณตํ•ด์„œ ํ•ด๋ณด๋Š” ๊ฑฐ์˜€์ง€๋งŒ ์ „์— ํ•œ ๋ฒˆ ํ–ˆ๋˜ ๊ฑธ ์ƒ๊ฐํ•˜๋ฉด์„œ ์ง์ ‘ ํ•ด๋ณด๋‹ˆ๊นŒ ๋” ํฅ๋ฏธ๋กญ๊ฒŒ ๋‹ค๊ฐ€์™”๋‹ค ๐Ÿ˜Ž

์™ผ์ชฝ์ด ๋‚ด์šฉ๋งŒ ์ž…๋ ฅํ–ˆ์„ ๋•Œ, ์˜ค๋ฅธ์ชฝ์ด ๊ธฐ๋กํ•˜๊ธฐ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅธ ํ›„ ์นด๋“œ๊ฐ€ ์ƒ์„ฑ๋œ ๋ชจ์Šต์ด๋‹ค ๐Ÿ˜Š

ํด๋ผ์ด์–ธํŠธ & ์„œ๋ฒ„ ๊ฐœ๋… ์ดํ•ดํ•˜๊ธฐ

fetch๋ผ๋Š” ์ƒˆ๋กœ์šด ๊ฐœ๋…์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ ์šฐ์„  ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„์˜ ๊ฐœ๋…์„ ์ดํ•ดํ•˜๋Š” ์‹œ๊ฐ„์„ ๊ฐ€์กŒ๋‹ค.

์„œ๋ฒ„ → ํด๋ผ์ด์–ธํŠธ : ๋ฐ์ดํ„ฐ๋ฅผ ์ค„ ๋•Œ๋Š” JSON ํ˜•์‹์œผ๋กœ ์ „๋‹ฌ๋˜์—ˆ๋‹ค.
JSON ํ˜•์‹์€ Key-Value๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์–ด์„œ ๋”•์…”๋„ˆ๋ฆฌ ๊ตฌ์กฐ์™€ ์•„์ฃผ ์œ ์‚ฌํ•˜๋‹ค!

ํฌ๋กฌ ์ต์Šคํ…์…˜ JSONview๋ฅผ ์„ค์น˜ํ•˜๊ณ  ์„œ์šธ์‹œ ๋ฏธ์„ธ๋จผ์ง€ OpenAPI ๋ฅผ ์‚ดํŽด๋ณด์•˜๋‹ค.
์„ค์น˜ํ•˜๊ณ  ๋‚˜๋‹ˆ ๋ˆˆ์— ๋ณด๊ธฐ ์‰ฝ๊ฒŒ ๋ฐ์ดํ„ฐ๋“ค์ด ๋ฐ”๋€Œ์–ด ์žˆ์—ˆ๋‹ค.

ํด๋ผ์ด์–ธํŠธ → ์„œ๋ฒ„ : GET ๋ฐฉ์‹์œผ๋กœ ๋ฐ์ดํ„ฐ๊ฐ€ ์ „๋‹ฌ๋˜์—ˆ๋‹ค.

โญAPI๋Š” ์€ํ–‰ ์ฐฝ๊ตฌ์™€ ๊ฐ™์€ ๊ฒƒ!โญ

๊ฐ™์€ ์˜ˆ๊ธˆ ์ฐฝ๊ตฌ์—์„œ๋„ ๊ฐœ์ธ ๊ณ ๊ฐ์ด๋ƒ ๊ธฐ์—… ๊ณ ๊ฐ์ด๋ƒ์— ๋”ฐ๋ผ
๊ฐ€์ ธ์™€์•ผ ํ•˜๋Š” ๊ฒƒ / ์ฒ˜๋ฆฌํ•ด์ฃผ๋Š” ๊ฒƒ์ด ๋‹ค๋ฅธ ๊ฒƒ์ฒ˜๋Ÿผ,
ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์š”์ฒญ ํ•  ๋•Œ์—๋„, "ํƒ€์ž…"์ด๋ผ๋Š” ๊ฒƒ์ด ์กด์žฌํ•œ๋‹ค.

* GET → ํ†ต์ƒ์ ์œผ๋กœ! ๋ฐ์ดํ„ฐ ์กฐํšŒ(Read)๋ฅผ ์š”์ฒญํ•  ๋•Œ
                ์˜ˆ) ์˜ํ™” ๋ชฉ๋ก ์กฐํšŒ

* POST → ํ†ต์ƒ์ ์œผ๋กœ! ๋ฐ์ดํ„ฐ ์ƒ์„ฑ(Create), ๋ณ€๊ฒฝ(Update), ์‚ญ์ œ(Delete) ์š”์ฒญํ•  ๋•Œ
์˜ˆ) ํšŒ์› ๊ฐ€์ž…, ํšŒ์› ํƒˆํ‡ด, ๋น„๋ฐ€๋ฒˆํ˜ธ ์ˆ˜์ •

https://movie.daum.net/moviedb/main?movieId=68593

์œ„ ์ฃผ์†Œ๋Š” ํฌ๊ฒŒ ๋‘ ๋ถ€๋ถ„์œผ๋กœ ์ชผ๊ฐœ์ง„๋‹ค.
๋ฐ”๋กœ "?"๊ฐ€ ์ชผ๊ฐœ์ง€๋Š” ์ง€์ ์ธ๋ฐ "?" ๊ธฐ์ค€์œผ๋กœ ์•ž ๋ถ€๋ถ„์ด <์„œ๋ฒ„ ์ฃผ์†Œ> ๋’ท๋ถ€๋ถ„์ด [์˜ํ™” ๋ฒˆํ˜ธ]์ด๋‹ค.

โœ”๏ธ์ฐธ๊ณ  - GET ๋ฐฉ์‹์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•˜๋Š” ๋ฐฉ๋ฒ•

? : ์—ฌ๊ธฐ์„œ๋ถ€ํ„ฐ ์ „๋‹ฌํ•  ๋ฐ์ดํ„ฐ๊ฐ€ ์ž‘์„ฑ๋œ๋‹ค๋Š” ์˜๋ฏธ์ž…๋‹ˆ๋‹ค.
& : ์ „๋‹ฌํ•  ๋ฐ์ดํ„ฐ๊ฐ€ ๋” ์žˆ๋‹ค๋Š” ๋œป์ž…๋‹ˆ๋‹ค.

์˜ˆ์‹œ) google.com/search?q=์•„์ดํฐ&sourceid=chrome&ie=UTF-8

 

Fetch

fetch ์—ฐ์Šต์„ ์œ„ํ•ด ์šฐ์„  HTML ํŒŒ์ผ์„ ํ•˜๋‚˜ ์ƒ์„ฑํ•œ๋‹ค.

<!doctype html>
<html lang="ko">

<head>
    <meta charset="UTF-8">
    <title>Fetch ์‹œ์ž‘ํ•˜๊ธฐ</title>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
    <script>
        function hey() {
            alert('์—ฐ๊ฒฐ์™„๋ฃŒ');
        }
    </script>
</head>

<body>
    <button onclick="hey()">fetch ์—ฐ์Šต!</button>
</body>

</html>

๋ฏธ์„ธ๋จผ์ง€ OpenApi URL์„ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค.
Fetch์˜ ๊ธฐ๋ณธ ๊ณจ๊ฒฉ์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

fetch("์—ฌ๊ธฐ์— URL์„ ์ž…๋ ฅ")
// ์ด URL๋กœ ์›น ํ†ต์‹ ์„ ์š”์ฒญํ•œ๋‹ค. ๊ด„ํ˜ธ ์•ˆ์— ๋‹ค๋ฅธ ๊ฒƒ์ด ์—†๋‹ค๋ฉด GET!
	.then(res => res.json()) 
// ํ†ต์‹  ์š”์ฒญ์„ ๋ฐ›์€ ๋ฐ์ดํ„ฐ๋Š” res๋ผ๋Š” ์ด๋ฆ„์œผ๋กœ JSONํ™” ํ•œ๋‹ค.
	.then(data => { 
		console.log(data)
	}) // JSON ํ˜•ํƒœ๋กœ ๋ฐ”๋€ ๋ฐ์ดํ„ฐ๋ฅผ data๋ผ๋Š” ์ด๋ฆ„์œผ๋กœ ๋ถ™์—ฌ ์‚ฌ์šฉํ•œ๋‹ค.
  • fetch("์—ฌ๊ธฐ์— URL์„ ์ž…๋ ฅ") : URL๋กœ ์›น ํ†ต์‹  ์š”์ฒญ์„ ๋ณด๋‚ผ ๊ฑฐ์•ผ!
  • ๊ด„ํ˜ธ ์•ˆ์— URL๋ฐ–์— ๋“ค์–ด์žˆ์ง€ ์•Š๋‹ค๋ฉด ๊ธฐ๋ณธ์ƒํƒœ์ธ GET!
  • .then() : ํ†ต์‹  ์š”์ฒญ์„ ๋ฐ›์€ ๋‹ค์Œ ์ด๋ ‡๊ฒŒ ํ•  ๊ฑฐ๋‹ค!
  • res ⇒ res.json()
    • ํ†ต์‹  ์š”์ฒญ์„ ๋ฐ›์€ ๋ฐ์ดํ„ฐ๋Š” res๋ผ๋Š” ์ด๋ฆ„์„ ๋ถ™์ธ๋‹ค.(๋ณ€๊ฒฝ ๊ฐ€๋Šฅ)
    • res๋Š” JSON ํ˜•ํƒœ๋กœ ๋ฐ”๊ฟ”์„œ ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค!
  • .then(data ⇒ {}) : JSON ํ˜•ํƒœ๋กœ ๋ฐ”๋€ ๋ฐ์ดํ„ฐ๋ฅผ data๋ผ๋Š” ์ด๋ฆ„์œผ๋กœ ๋ถ™์ธ๋‹ค.

์ด๋ ‡๊ฒŒ fetch์™€ OpenApi๋ฅผ ํ™œ์šฉํ•ด์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๊ณ  ์ถœ๋ ฅ๊นŒ์ง€ ๊ฐ€๋Šฅํ•˜๋‹ค.

function hey() {
    let url = 'http://spartacodingclub.shop/sparta_api/seoulair';  //open api URL
    fetch(url).then(res => res.json()).then(data => {  //open api์— ์žˆ๋˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์™€์„œ data๋ผ๋Š” ๋ณ€์ˆ˜์— ์ €์žฅ~!
        let rows = data['RealtimeCityAir']['row'];

        rows.forEach(a => {
            let gu_name = a['MSRSTE_NM'];  //๊ตฌ ์ด๋ฆ„
            let gu_mise = a['IDEX_NM'];  //๊ตฌ ๋ฏธ์„ธ๋จผ์ง€

            console.log(gu_name, gu_mise);
        });

        //console.log(data['RealtimeCityAir']['row'][0]);  //data - RealtimeCityAir - row - 0๋ฒˆ์งธ ๋ฐ์ดํ„ฐ ๊ฐ€์ ธ์˜ค๊ธฐ!

    })
}

fetch๋ฅผ ์ด์šฉํ•ด์„œ ๋ฏธ์„ธ๋จผ์ง€ ์ˆ˜์น˜๊ฐ€ 40 ์ด์ƒ์ด๋ผ๋ฉด ๋นจ๊ฐ„์ƒ‰ ๊ธ€์”จ๋กœ ํ‘œ์‹œํ•˜๊ฒŒ๋” ํ•  ์ˆ˜๋„ ์žˆ๋‹ค ๐Ÿ˜ฎ

.bad {
    color: red;
}
function q1() {
    let url = 'http://spartacodingclub.shop/sparta_api/seoulair';  //open api URL

    $('#names-q1').empty();

    fetch(url).then(res => res.json()).then(data => {  //open api์— ์žˆ๋˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์™€์„œ data๋ผ๋Š” ๋ณ€์ˆ˜์— ์ €์žฅ~!
        let rows = data['RealtimeCityAir']['row'];

        rows.forEach(a => {
            let gu_name = a['MSRSTE_NM'];  //๊ตฌ ์ด๋ฆ„
            let gu_mise = a['IDEX_MVL'];  //๊ตฌ ๋ฏธ์„ธ๋จผ์ง€ ๋†๋„

            //console.log(gu_name, gu_mise);

            let temp_html = ``;
            if (gu_mise > 40) {
                temp_html = `<li class="bad">${gu_name} : ${gu_mise}</li>`;
            } else {
                temp_html = `<li>${gu_name} : ${gu_mise}</li>`;
            }
            $('#names-q1').append(temp_html);
        });
        //console.log(data['RealtimeCityAir']['row'][0]);  //data - RealtimeCityAir - row - 0๋ฒˆ์งธ ๋ฐ์ดํ„ฐ ๊ฐ€์ ธ์˜ค๊ธฐ!
    })
}

 

์ถ”์–ต์•จ๋ฒ” - Fetch ์ ์šฉํ•˜๊ธฐ!

fetch ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•ด์„œ ๋ฏธ์„ธ๋จผ์ง€์˜ ์ •๋„๋ฅผ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ๋‹ค!!

$(document).ready(function () {  //ํŽ˜์ด์ง€ ์ค€๋น„๊ฐ€ ๋‹ค ๋˜์—ˆ์„ ๋•Œ ์‹คํ–‰๋˜๋Š” ์ฝ”๋“œ์ด๋‹ค!
    let url = "http://spartacodingclub.shop/sparta_api/seoulair";

    fetch(url).then(res => res.json()).then(data => {
        let mise = data['RealtimeCityAir']['row'][0]['IDEX_NM'];
        //console.log(mise);  //mise ์ถœ๋ ฅํ•˜๊ธฐ! - ์ข‹์Œ๋งŒ ์ถœ๋ ฅ๋œ๋‹ค.

        $('#msg').text(mise);  //span ํƒœ๊ทธ ์•ˆ์˜ '๋‚˜์จ'์ด๋ผ๋Š” ๋‹จ์–ด๋ฅผ mise ๊ฐ’์œผ๋กœ ๋ณ€๊ฒฝํ•ด์ค€๋‹ค. ํ•„์š”ํ•œ ๊ณณ์— ํ…์ŠคํŠธ๋ฅผ ๊ฐˆ์•„๋ผ์› ๋‹ค.
    })
})

script ํƒœ๊ทธ ์•ˆ์— $(document).ready(function () { ... }) ํ•จ์ˆ˜๋ฅผ ์ž‘์„ฑํ•œ๋‹ค.
fetch ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•˜์—ฌ ์ฃผ์–ด์ง„ URL์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๊ณ  fetch(url).then(res => res.json()) ์„ ํ†ตํ•ด ๋ฐ˜ํ™˜๋œ ์‘๋‹ต ๋‚ด์šฉ์„ JSON ํ˜•์‹์œผ๋กœ ๋งŒ๋“ ๋‹ค.
.then(data => { ... }) ์œผ๋กœ JSON ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜จ ํ›„ mise ๋ณ€์ˆ˜์— ๊ฐ’์„ ๋‹ด๋Š”๋‹ค.
$('#msg').text(mise); ๋ฅผ ํ†ตํ•ด ํ…์ŠคํŠธ๋ฅผ mise ๋ณ€์ˆ˜ ๊ฐ’์œผ๋กœ ๋ณ€๊ฒฝํ•œ๋‹ค.
span ํƒœ๊ทธ๋ฅผ ์ด์šฉํ•ด์„œ ๋ฐ”๊พธ๊ณ  ์‹ถ์€ ๋ถ€๋ถ„๋งŒ ๋”ฐ๋กœ ๋ฌถ๊ณ  ๊ทธ ๋ถ€๋ถ„๋งŒ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ๋‹ค!

๋‚˜๋งŒ์˜ ์ถ”์–ต์•จ๋ฒ” ๋ฐ‘์— ํ˜„์žฌ ์„œ์šธ์˜ ๋ฏธ์„ธ๋จผ์ง€ : ์ข‹์Œ์ด ์ƒ๊ธด ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค ๐Ÿ˜ฎ๐Ÿ˜ฎ

 

์ŠคํŒŒ๋ฅดํƒ€ํ”Œ๋ฆญ์Šค - Fetch ์ ์šฉํ•˜๊ธฐ!

fetch ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•ด์„œ ํ˜„์žฌ๊ธฐ์˜จ์„ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ๋‹ค!!

$(document).ready(function () {  //ํŽ˜์ด์ง€ ์ค€๋น„๊ฐ€ ๋‹ค ๋˜์—ˆ์„ ๋•Œ ์‹คํ–‰๋˜๋Š” ์ฝ”๋“œ์ด๋‹ค!
    let url = "http://spartacodingclub.shop/sparta_api/weather/seoul";

    fetch(url).then(res => res.json()).then(data => {
        let temp = data['temp'];

        $('#msg').text(temp);
    })
})

์ถ”์–ต์•จ๋ฒ”์—์„œ ์‚ฌ์šฉํ•œ ๋ฐฉ๋ฒ•์„ ๋˜‘๊ฐ™์ด ์‚ฌ์šฉํ•˜์—ฌ ํ˜„์žฌ ๊ธฐ์˜จ์œผ๋กœ ํ…์ŠคํŠธ๋ฅผ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ๋‹ค.

๋‚ด๊ฐ€ ์ฐœํ•œ ์ฝ˜ํ…์ธ  ์˜†์— ํ˜„์žฌ๊ธฐ์˜จ์ด ์ƒ๊ธด ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค ๐Ÿ˜ฎ๐Ÿ˜ฎ
์—ฌ๊ธฐ์„œ ํ•˜๋‚˜ ํ—ค๋งธ๋˜ ๋ถ€๋ถ„์ด ํ˜„์žฌ ๊ธฐ์˜จ์„ ์ ์šฉํ•ด์„œ ํ…์ŠคํŠธ๋ฅผ ๊ณ ์น˜๋Š” ๊ณผ์ •์—์„œ ๊ธฐ์˜จ์ด ๋ฐ”๋€Œ์ง€ ์•Š์•„์„œ ์ฝ”๋“œ ์˜ค๋ฅ˜์ธ ์ค„ ์•Œ์•˜๋Š”๋ฐ...
์•Œ๊ณ  ๋ณด๋‹ˆ ์ž‘์„ฑํ•œ ๊ธฐ์˜จ๊ณผ ํ˜„์žฌ๊ธฐ์˜จ์ด ๋™์ผํ•ด์„œ ์•ˆ ๋ฐ”๋€Œ๋Š” ๊ฒƒ์ด์—ˆ๋‹ค....... ๐Ÿฅฒ๐Ÿฅฒ๐Ÿฅฒ
์ฝ”๋“œ ์˜ค๋ฅ˜๊ฐ€ ์•„๋‹ˆ์—ˆ๋˜ ๊ฒƒ์ด ๋‹คํ–‰์ด์—ˆ๋‹ค ํœด...

์ˆ™์ œ

๋งˆ์ง€๋ง‰์œผ๋กœ ์ง€๊ธˆ๊นŒ์ง€ ๋ฐฐ์šด ๋‚ด์šฉ๋“ค์„ ๋ณต์Šตํ•œ๋‹ค๋Š” ๊ฐœ๋…์œผ๋กœ 3์ฃผ ์ฐจ์—๋Š” ์ˆ™์ œ๊ฐ€ ์žˆ์—ˆ๋‹ค.
์˜ˆ์‹œ ์‚ฌ์ง„์„ ๋ณด๋ฉด์„œ ๊ฐ™์€ ํŽ˜์ด์ง€๋ฅผ ๋งŒ๋“œ๋Š” ์ˆ™์ œ์˜€๋‹ค. ์ˆ™์ œ๋ฅผ ๋ง‰์ƒ ์‹œ์ž‘ํ•˜๊ณ ๋Š” ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ•˜๋‚˜ ๋ง‰๋ง‰ํ–ˆ๋Š”๋ฐ, ์ˆ™์ œ๋ฅผ ํ‘ธ๋Š” ์ˆœ์„œ๊ฐ€ ๋‚˜์™€์žˆ์—ˆ๊ณ  ์ฐจ๊ทผ์ฐจ๊ทผ ํ•˜๋‚˜์”ฉ ํ•ด๊ฒฐํ•˜๋‹ค ๋ณด๋‹ˆ ๋ฐฐ์› ๋˜ ๋‚ด์šฉ๋“ค์ด ๊ธฐ์–ต์ด ๋‚ฌ๊ณ  ๋‚œ๊ด€์„ ํ•˜๋‚˜์”ฉ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.
๊ธ€๊ณผ PostBox์˜ ์œ„์น˜ ๋งž์ถ”๋Š” ๋ฐฉ๋ฒ•์„ margin๊ณผ padding ๊ฐ’์„ ํ†ตํ•ด ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์—ˆ๊ณ , ๊ธ€์”จ๋ฅผ ์ง„ํ•˜๊ฒŒ ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ b ํƒœ๊ทธ๋ฅผ ํ†ตํ•ด ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.
์นด๋“œ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐฉ๋ฒ•๊ณผ ๋‚ด๊ฐ€ ์›ํ•˜๋Š” ๋‚ด์šฉ ๋„ฃ๋Š” ๋ฐฉ๋ฒ• ๋“ฑ๋“ฑ ์ง€๊ธˆ๊นŒ์ง€ ๋ฐฐ์šด ๋‚ด์šฉ๋“ค์ด ๋ชจ๋‘ ๋ชจ์—ฌ์žˆ๋Š” ์ˆ™์ œ์ฒ˜๋Ÿผ ๋Š๊ปด์กŒ๋‹ค.
ํ•˜๋‚˜์”ฉ ํ•ด๊ฒฐํ•ด ๋‚˜๊ฐ€๋‹ค ๋ณด๋‹ˆ ์‹œ๊ฐ„์€ ๊ฝค ์˜ค๋ž˜ ๊ฑธ๋ ธ์ง€๋งŒ ์ˆ™์ œ๋ฅผ ์ „๋ถ€ ํ•ด๊ฒฐํ•ด์„œ ์˜ˆ์‹œ ์‚ฌ์ง„๊ณผ ๊ฐ™์€ ํŽ˜์ด์ง€๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์—ˆ๋‹ค ๐Ÿ˜Ž๐Ÿ˜Ž

์ˆ™์ œ๋ฅผ ํ†ตํ•ด ๋‚ด๊ฐ€ ๋งŒ๋“  ์ŠคํŒŒ๋ฅดํƒ€ ํ‘ธ๋“œํŒŒ์ดํ„ฐ ํŽ˜์ด์ง€ ๐Ÿคจ

 

+ ์˜ค๋Š˜ ์‹คํ–‰ํ•œ ๊ณ„ํš

  • SQL, ์ž๋ฐ” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ ๊ฐ๊ฐ 2๋ฌธ์ œ์”ฉ ํ’€๊ธฐ!
    • SQL ๋ฌธ์ œ๋Š” ์–ด๋ ต์ง€ ์•Š๊ฒŒ ํ•ด๊ฒฐํ–ˆ๋Š”๋ฐ ์ž๋ฐ” ๋ฌธ์ œ์—์„œ ๋ฐฐ์—ด ๊ฐœ๋…์„ ์ ์šฉํ•˜๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ๋‹ค. ์•„์ง ๋ฐฐ์—ด์— ๋Œ€ํ•œ ํ™•์‹คํ•œ ๊ฐœ๋…์ด ์—†์—ˆ๋˜ ์ƒํ™ฉ์ด์–ด์„œ ๊ตฌ๊ธ€๋ง์„ ํ†ตํ•ด ๋ฐฐ์—ด์— ๋Œ€ํ•œ ๊ฐœ๋…์„ ํ™•์ธํ•˜์˜€๊ณ  ๋ฌธ์ œ๋ฅผ ๋ฌด์‚ฌํžˆ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.
  • Java ์ž…๋ฌธ ๊ฐ•์˜_์Šค์ฝ”ํ”„, ํ˜•๋ณ€ํ™˜ ํŒŒํŠธ๋ฅผ ๋“ค์œผ๋ ค๊ณ  ํ–ˆ์ง€๋งŒ ์ˆ™์ œ์— ์ƒ๋‹นํ•œ ์‹œ๊ฐ„์ด ๊ฑธ๋ ค์„œ ๋‚ด์ผ ์ˆ˜๊ฐ•ํ•  ๊ณ„ํš์ด๋‹ค!

์˜ค๋Š˜๋„ ์•Œ์ฐฌ ํ•˜๋ฃจ๋ฅผ ๋ณด๋ƒˆ๋‹ค๐Ÿ˜Ž๐Ÿ˜Ž