** ๐Ÿ“Œ JSP + Ajax ์—ฐ๋™ **

JSP์—์„œ ๋น„๋™๊ธฐ Ajax ์š”์ฒญ์„ ๋ฐ›์•„ JSON์œผ๋กœ ์‘๋‹ตํ•˜๋Š” ์ „์ฒด ํ๋ฆ„

์„œ๋ฒ„ โ†’ ํด๋ผ์ด์–ธํŠธ ํ†ต์‹  ๊ตฌ์กฐ + ์‹ค์ „ ์˜ˆ์ œ ์™„์ „ ์ •๋ฆฌ


๐Ÿงฉ ๋ชฉ์ฐจ

  1. ๊ฐœ๋… ์ •๋ฆฌ
  2. ์ „์ฒด ํ๋ฆ„๋„
  3. Ajax ๊ตฌ์„ฑ์š”์†Œ ํ•ต์‹ฌ
  4. ํด๋ผ์ด์–ธํŠธ(fetch) โ†’ ์„œ๋ฒ„(JSP) ์š”์ฒญ ๊ตฌ์กฐ
  5. ์„œ๋ฒ„(JSP) โ†’ JSON ์‘๋‹ต ์ฒ˜๋ฆฌ
  6. ์‹ค์ „ ์˜ˆ์ œ (๋Œ“๊ธ€ ๋ชฉ๋ก ์กฐํšŒ)
  7. ๊ธฐ์ˆ  ๋ฉด์ ‘ ๋Œ€๋น„ ํ•ต์‹ฌ ์š”์•ฝ
  8. ๋งˆ๋ฌด๋ฆฌ ์š”์•ฝ + Notion ์ž‘์„ฑ ํŒ

โœ… 1. ๊ฐœ๋… ์ •๋ฆฌ

ํ•ญ๋ชฉ ์„ค๋ช…
Ajax ํŽ˜์ด์ง€ ์ „์ฒด ์ƒˆ๋กœ๊ณ ์นจ ์—†์ด ์„œ๋ฒ„์™€ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›๋Š” ๋ฐฉ์‹ (Asynchronous JS + XML)
JSON ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›์„ ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๋Œ€ํ‘œ์ ์ธ ๊ฒฝ๋Ÿ‰ ๋ฐ์ดํ„ฐ ํฌ๋งท
JSP ์—ญํ•  ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ ์ฒ˜๋ฆฌ โ†’ DB ์กฐํšŒ โ†’ JSON ์‘๋‹ต ์ƒ์„ฑ

โœ… 2. ์ „์ฒด ํ๋ฆ„๋„

[1] fetch() โ†’ /getComment.jsp ๋น„๋™๊ธฐ ์š”์ฒญ
 โฌ‡
[2] JSP์—์„œ DB ์กฐํšŒ ํ›„ JSON ๋ฐฐ์—ด ์ƒ์„ฑ
 โฌ‡
[3] ํด๋ผ์ด์–ธํŠธ fetch().then(result โ†’ ํ™”๋ฉด ์ถœ๋ ฅ)

โœ… 3. Ajax ๊ตฌ์„ฑ์š”์†Œ ํ•ต์‹ฌ

์š”์†Œ ์„ค๋ช…
์š”์ฒญ ๋ฐฉ์‹ fetch() ๋˜๋Š” XMLHttpRequest (POST, GET)
์‘๋‹ต ํ˜•์‹ text, HTML, JSON ๋“ฑ
์„œ๋ฒ„ ์‘๋‹ต ์ฒ˜๋ฆฌ .then(res => res.json()), .then(res => res.text())

โœ… 4. ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ ๊ตฌ์กฐ (fetch)

fetch("getComment.jsp")
  .then(response => response.json())
  .then(data => {
    console.log("๋ฐ›์€ ๋Œ“๊ธ€ ๋ชฉ๋ก:", data);
  });

โœ… 5. ์„œ๋ฒ„ ์‘๋‹ต ๊ตฌ์กฐ (JSP โ†’ JSON ์‘๋‹ต)

๐Ÿ“„ getComment.jsp

<%@ page contentType="application/json; charset=UTF-8" %>
<%@ page import="java.sql.*, java.util.*, org.json.simple.JSONArray, org.json.simple.JSONObject" %>

<%
  JSONArray arr = new JSONArray();

  Connection conn = DB.getConnection();
  String sql = "SELECT * FROM comments ORDER BY id DESC";
  PreparedStatement ps = conn.prepareStatement(sql);
  ResultSet rs = ps.executeQuery();

  while (rs.next()) {
    JSONObject obj = new JSONObject();
    obj.put("id", rs.getInt("id"));
    obj.put("content", rs.getString("content"));
    obj.put("regdate", rs.getString("regdate"));
    arr.add(obj);
  }

  conn.close();
  out.print(arr.toJSONString()); // JSON ๋ฐฐ์—ด๋กœ ์‘๋‹ต
%>

โœ… ์œ„ ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด json-simple ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ lib ํด๋”์— ์ถ”๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.


โœ… 6. ์‹ค์ „ ์˜ˆ์ œ: ๋Œ“๊ธ€ ๋ชฉ๋ก ๋ถˆ๋Ÿฌ์˜ค๊ธฐ


๐Ÿ“„ index.jsp

<button id="loadBtn">๋Œ“๊ธ€ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ</button>
<ul id="commentList"></ul>

<script>
document.getElementById("loadBtn").addEventListener("click", function () {
  fetch("getComment.jsp")
    .then(response => response.json())
    .then(list => {
      const ul = document.getElementById("commentList");
      ul.innerHTML = "";
      list.forEach(comment => {
        const li = document.createElement("li");
        li.innerText = comment.content + " (" + comment.regdate + ")";
        ul.appendChild(li);
      });
    });
});
</script>

โœ… 7. ๊ธฐ์ˆ  ๋ฉด์ ‘ ๋Œ€๋น„ ํ•ต์‹ฌ ์š”์•ฝ ๐Ÿ’ฌ

์งˆ๋ฌธ ์š”์  ์ •๋ฆฌ
Ajax๋ž€? ํŽ˜์ด์ง€๋ฅผ ์ƒˆ๋กœ๊ณ ์นจํ•˜์ง€ ์•Š๊ณ  ์„œ๋ฒ„์™€ ํ†ต์‹ ํ•˜๋Š” ๋ฐฉ์‹
fetch์™€ JSP๋Š” ์–ด๋–ป๊ฒŒ ์—ฐ๋™๋˜๋‚˜์š”? JS์—์„œ fetch() โ†’ JSP์—์„œ DB ์ฒ˜๋ฆฌ ํ›„ JSON ์‘๋‹ต
JSON์ด๋ž€? ๋ฐ์ดํ„ฐ๋ฅผ ํ‚ค-๊ฐ’ ํ˜•์‹์œผ๋กœ ์ฃผ๊ณ ๋ฐ›๋Š” ๊ฒฝ๋Ÿ‰ ํฌ๋งท
JSP์—์„œ JSON ์‘๋‹ต์„ ๋งŒ๋“ค๋ ค๋ฉด? JSONArray + JSONObject ์กฐํ•ฉ ์‚ฌ์šฉ + contentType ์„ค์ •

โœ… 8. ๋งˆ๋ฌด๋ฆฌ ์š”์•ฝ ๐Ÿง