** ๐Ÿ“Œ๋ฐ์ดํ„ฐ ์ˆ˜์ •/์‚ญ์ œ ๊ตฌํ˜„ **

๊ฒŒ์‹œ๊ธ€์„ ์ˆ˜์ •ํ•˜๊ฑฐ๋‚˜ ์‚ญ์ œํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๋Š” ์ „์ฒด ํ๋ฆ„

ํŒŒ๋ผ๋ฏธํ„ฐ ์ „๋‹ฌ โ†’ ์ˆ˜์ • ํผ โ†’ DAO ์ฒ˜๋ฆฌ โ†’ ๋ฆฌ์ŠคํŠธ ๊ฐฑ์‹ ๊นŒ์ง€ ์™„์ „ ์ •๋ฆฌ


๐Ÿงฉ ๋ชฉ์ฐจ

  1. ๊ธฐ๋Šฅ ๊ฐœ์š” (์ˆ˜์ • & ์‚ญ์ œ)
  2. ์ „์ฒด ํ๋ฆ„๋„ (ํŒŒ๋ผ๋ฏธํ„ฐ โ†’ ์กฐํšŒ โ†’ ์ˆ˜์ •/์‚ญ์ œ ์ฒ˜๋ฆฌ)
  3. ๋‹จ๊ณ„๋ณ„ ์—ญํ•  ์ •๋ฆฌ
  4. ์ˆ˜์ • ๊ธฐ๋Šฅ ์‹ค์ „ ์˜ˆ์ œ
  5. ์‚ญ์ œ ๊ธฐ๋Šฅ ์‹ค์ „ ์˜ˆ์ œ
  6. URL ํŒŒ๋ผ๋ฏธํ„ฐ ํ™œ์šฉ ํฌ์ธํŠธ
  7. ๊ธฐ์ˆ  ๋ฉด์ ‘ ๋Œ€๋น„ ํ•ต์‹ฌ ์š”์•ฝ
  8. ๋งˆ๋ฌด๋ฆฌ ์š”์•ฝ + Notion ์ž‘์„ฑ ํŒ

โœ… 1. ๊ธฐ๋Šฅ ๊ฐœ์š”

๊ธฐ๋Šฅ ์„ค๋ช…
โœ๏ธ ์ˆ˜์ • ๊ธฐ์กด ๋ฐ์ดํ„ฐ๋ฅผ ๋ถˆ๋Ÿฌ์™€ ์ˆ˜์ • ํผ์— ์ถœ๋ ฅ ํ›„ ๋ณ€๊ฒฝ๋œ ๋‚ด์šฉ ์ €์žฅ
โŒ ์‚ญ์ œ ์„ ํƒํ•œ ๋ฐ์ดํ„ฐ๋ฅผ DB์—์„œ ์‚ญ์ œํ•˜๊ณ  ๋ชฉ๋ก์œผ๋กœ ์ด๋™

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

โœ๏ธ ์ˆ˜์ • ํ๋ฆ„

[list.jsp] ์ˆ˜์ • ๋ฒ„ํŠผ ํด๋ฆญ โ†’ /edit?id=3
 โฌ‡
[EditServlet] โ†’ DAO.selectById(id)
 โฌ‡
[edit.jsp] ๊ธฐ์กด ๊ฐ’ ์ถœ๋ ฅ
 โฌ‡
[UpdateServlet] โ†’ DAO.update(dto)
 โฌ‡
[list.jsp] ๋ชฉ๋ก์œผ๋กœ ๋ฆฌ๋””๋ ‰์…˜

โŒ ์‚ญ์ œ ํ๋ฆ„

[list.jsp] ์‚ญ์ œ ๋ฒ„ํŠผ ํด๋ฆญ โ†’ /delete?id=3
 โฌ‡
[DeleteServlet] โ†’ DAO.delete(id)
 โฌ‡
[list.jsp] ๋ชฉ๋ก ๋ฆฌ๋””๋ ‰์…˜

โœ… 3. ๋‹จ๊ณ„๋ณ„ ์—ญํ•  ์ •๋ฆฌ

๋‹จ๊ณ„ ํŒŒ์ผ ์„ค๋ช…
1 list.jsp ์ˆ˜์ •/์‚ญ์ œ ๋ฒ„ํŠผ์— ID ํฌํ•จ๋œ ๋งํฌ ์ œ๊ณต
2 EditServlet.java ํ•ด๋‹น ID ๋ฐ์ดํ„ฐ ์กฐํšŒ ํ›„ edit.jsp๋กœ ์ „๋‹ฌ
3 edit.jsp ๊ธฐ์กด ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋Š” ํผ ์ œ๊ณต
4 UpdateServlet.java ์ˆ˜์ •๋œ ๊ฐ’ โ†’ DAO.update()๋กœ DB ๊ฐฑ์‹ 
5 DeleteServlet.java ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋ฐ›์€ ID ์‚ญ์ œ ์ฒ˜๋ฆฌ

โœ… 4. ์ˆ˜์ • ๊ธฐ๋Šฅ ์‹ค์ „ ์˜ˆ์ œ


๐Ÿ“„ [1] list.jsp โ€“ ์ˆ˜์ • ๋งํฌ ์ถ”๊ฐ€

<a href="edit?id=<%= dto.getId() %>">์ˆ˜์ •</a>

๐Ÿ“„ [2] EditServlet.java

@WebServlet("/edit")
public class EditServlet extends HttpServlet {
  protected void doGet(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {

    int id = Integer.parseInt(request.getParameter("id"));

    BoardDAO dao = new BoardDAO();
    BoardDTO dto = dao.selectById(id);

    request.setAttribute("dto", dto);
    RequestDispatcher rd = request.getRequestDispatcher("edit.jsp");
    rd.forward(request, response);
  }
}

๐Ÿ“„ [3] BoardDAO.java โ€“ selectById()

public BoardDTO selectById(int id) {
  BoardDTO dto = new BoardDTO();
  try {
    Connection conn = DB.getConnection();
    String sql = "SELECT * FROM board WHERE id=?";
    PreparedStatement ps = conn.prepareStatement(sql);
    ps.setInt(1, id);
    ResultSet rs = ps.executeQuery();

    if(rs.next()) {
      dto.setId(rs.getInt("id"));
      dto.setTitle(rs.getString("title"));
      dto.setContent(rs.getString("content"));
    }

    conn.close();
  } catch(Exception e) {
    e.printStackTrace();
  }

  return dto;
}

๐Ÿ“„ [4] edit.jsp

<form action="update" method="post">
  <input type="hidden" name="id" value="<%= dto.getId() %>" />
  ์ œ๋ชฉ: <input type="text" name="title" value="<%= dto.getTitle() %>" /><br>
  ๋‚ด์šฉ: <textarea name="content"><%= dto.getContent() %></textarea><br>
  <input type="submit" value="์ˆ˜์ • ์™„๋ฃŒ" />
</form>

๐Ÿ“„ [5] UpdateServlet.java

@WebServlet("/update")
public class UpdateServlet extends HttpServlet {
  protected void doPost(HttpServletRequest req, HttpServletResponse resp)
      throws ServletException, IOException {

    req.setCharacterEncoding("UTF-8");

    int id = Integer.parseInt(req.getParameter("id"));
    String title = req.getParameter("title");
    String content = req.getParameter("content");

    BoardDTO dto = new BoardDTO();
    dto.setId(id);
    dto.setTitle(title);
    dto.setContent(content);

    BoardDAO dao = new BoardDAO();
    dao.update(dto);

    resp.sendRedirect("list");
  }
}

๐Ÿ“„ BoardDAO.java โ€“ update()

public void update(BoardDTO dto) {
  try {
    Connection conn = DB.getConnection();
    String sql = "UPDATE board SET title=?, content=? WHERE id=?";
    PreparedStatement ps = conn.prepareStatement(sql);
    ps.setString(1, dto.getTitle());
    ps.setString(2, dto.getContent());
    ps.setInt(3, dto.getId());
    ps.executeUpdate();
    conn.close();
  } catch(Exception e) {
    e.printStackTrace();
  }
}

โœ… 5. ์‚ญ์ œ ๊ธฐ๋Šฅ ์‹ค์ „ ์˜ˆ์ œ


๐Ÿ“„ [1] list.jsp โ€“ ์‚ญ์ œ ๋งํฌ ์ถ”๊ฐ€

<a href="delete?id=<%= dto.getId() %>"
   onclick="return confirm('์ •๋ง ์‚ญ์ œํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?')">์‚ญ์ œ</a>

๐Ÿ“„ [2] DeleteServlet.java

@WebServlet("/delete")
public class DeleteServlet extends HttpServlet {
  protected void doGet(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {

    int id = Integer.parseInt(request.getParameter("id"));
    BoardDAO dao = new BoardDAO();
    dao.delete(id);

    response.sendRedirect("list");
  }
}

๐Ÿ“„ BoardDAO.java โ€“ delete()

public void delete(int id) {
  try {
    Connection conn = DB.getConnection();
    String sql = "DELETE FROM board WHERE id=?";
    PreparedStatement ps = conn.prepareStatement(sql);
    ps.setInt(1, id);
    ps.executeUpdate();
    conn.close();
  } catch(Exception e) {
    e.printStackTrace();
  }
}

โœ… 6. URL ํŒŒ๋ผ๋ฏธํ„ฐ ํ™œ์šฉ ํฌ์ธํŠธ

๊ฐœ๋… ์„ค๋ช…
?id=3 URL ํŒŒ๋ผ๋ฏธํ„ฐ ๋ฐฉ์‹์œผ๋กœ ๋ฐ์ดํ„ฐ ์ „๋‹ฌ
request.getParameter("id") Servlet์—์„œ ๊ฐ’์„ ๋ฐ›๋Š” ๋ฐฉ๋ฒ•
parseInt() ๋ฌธ์ž์—ด์„ ์ •์ˆ˜ํ˜•์œผ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ SQL์— ์‚ฌ์šฉ

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

์งˆ๋ฌธ ์š”์  ์ •๋ฆฌ
๋ฐ์ดํ„ฐ ์ˆ˜์ • ํ๋ฆ„์€? ์ˆ˜์ • ๋ฒ„ํŠผ ํด๋ฆญ โ†’ ๊ธฐ์กด๊ฐ’ ์ถœ๋ ฅ โ†’ ์ˆ˜์ • ํ›„ DB ๊ฐฑ์‹ 
URL ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋ฐ์ดํ„ฐ ์ „๋‹ฌ ๋ฐฉ๋ฒ•์€? ?id=3, request.getParameter("id") ์‚ฌ์šฉ
DAO update()์™€ insert() ์ฐจ์ด๋Š”? update๋Š” ๊ธฐ์กด ๋ฐ์ดํ„ฐ ์ˆ˜์ •, insert๋Š” ์ƒˆ ๋ฐ์ดํ„ฐ ์ถ”๊ฐ€
์‚ญ์ œ ๊ตฌํ˜„ ๋ฐฉ์‹์€? id๋งŒ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ์ „๋‹ฌ๋ฐ›์•„ DELETE ์‹คํ–‰

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