** ๐Ÿ“Œ๋ฐ์ดํ„ฐ ์ถœ๋ ฅ ํ๋ฆ„ ๊ตฌํ˜„ (DB โ†’ DAO โ†’ JSP ์ถœ๋ ฅ)**

DB์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉ์ž ํ™”๋ฉด์— ์ถœ๋ ฅํ•˜๋Š” ์‹ค์ „ ํ๋ฆ„ ์™„์„ฑ

DAO๋กœ DB ์กฐํšŒ โ†’ DTO๋กœ ์ €์žฅ โ†’ JSP์—์„œ ๋ฐ˜๋ณต๋ฌธ์œผ๋กœ ์ถœ๋ ฅ๊นŒ์ง€ ์™„์ „ ์ •๋ฆฌ


๐Ÿงฉ ๋ชฉ์ฐจ

  1. ์ „์ฒด ํ๋ฆ„ ๊ฐœ์š”
  2. ๋‹จ๊ณ„๋ณ„ ์—ญํ•  (DAO โ†’ DTO โ†’ Servlet โ†’ JSP)
  3. ์ „์ฒด ์˜ˆ์ œ ์ฝ”๋“œ
  4. JSP์—์„œ ๋ฐ˜๋ณต๋ฌธ์œผ๋กœ ์ถœ๋ ฅํ•˜๊ธฐ
  5. ์ถœ๋ ฅ ํ๋ฆ„ ์ˆœ์„œ ์ •๋ฆฌ
  6. ๊ธฐ์ˆ  ๋ฉด์ ‘ ๋Œ€๋น„ ์š”์•ฝ
  7. ๋งˆ๋ฌด๋ฆฌ ์š”์•ฝ + Notion ์ž‘์„ฑ ํŒ

โœ… 1. ์ „์ฒด ํ๋ฆ„ ๊ฐœ์š”

[1] BoardDAO
 โฌ‡ DB์—์„œ ๋ฐ์ดํ„ฐ ์กฐํšŒ (SELECT)
[2] BoardDTO
 โฌ‡ ๊ฐ ํ–‰์„ ๊ฐ์ฒด๋กœ ์ €์žฅ
[3] ListServlet
 โฌ‡ List<BoardDTO>๋ฅผ request์— ์ €์žฅ
[4] list.jsp
 โฌ† request์—์„œ ๊บผ๋‚ด ๋ฐ˜๋ณต ์ถœ๋ ฅ

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

๋‹จ๊ณ„ ํŒŒ์ผ ์—ญํ• 
1 BoardDAO.java DB๋กœ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ ์ „์ฒด ์กฐํšŒ (SELECT)
2 BoardDTO.java ์กฐํšŒํ•œ ๋ฐ์ดํ„ฐ ํ•˜๋‚˜ํ•˜๋‚˜๋ฅผ ๋‹ด๋Š” ๊ฐ์ฒด
3 ListServlet.java DAO ํ˜ธ์ถœ โ†’ List request์— ์ €์žฅ
4 list.jsp request์—์„œ ๊บผ๋‚ธ List๋ฅผ forEach๋กœ ๋ฐ˜๋ณต ์ถœ๋ ฅ

โœ… 3. ์ „์ฒด ์˜ˆ์ œ ์ฝ”๋“œ ๐ŸŽฏ


๐Ÿ“„ [1] BoardDAO.java - selectAll ๋ฉ”์„œ๋“œ

public class BoardDAO {
  public List<BoardDTO> selectAll() {
    List<BoardDTO> list = new ArrayList<>();
    try {
      Connection conn = DB.getConnection();
      String sql = "SELECT * FROM board ORDER BY id DESC";
      PreparedStatement ps = conn.prepareStatement(sql);
      ResultSet rs = ps.executeQuery();

      while (rs.next()) {
        BoardDTO dto = new BoardDTO();
        dto.setId(rs.getInt("id"));
        dto.setTitle(rs.getString("title"));
        dto.setContent(rs.getString("content"));
        dto.setRegdate(rs.getTimestamp("regdate"));
        list.add(dto);
      }

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

    return list;
  }
}

๐Ÿ“„ [2] BoardDTO.java

public class BoardDTO {
  private int id;
  private String title;
  private String content;
  private Timestamp regdate;

  // getter & setter ์ƒ๋žต
}

๐Ÿ“„ [3] ListServlet.java

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

    BoardDAO dao = new BoardDAO();
    List<BoardDTO> list = dao.selectAll();

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

๐Ÿ“„ [4] list.jsp - ์ถœ๋ ฅ ํ™”๋ฉด

<%@ page contentType="text/html; charset=UTF-8" %>
<%@ page import="java.util.*, yourpackage.BoardDTO" %>
<%
  List<BoardDTO> list = (List<BoardDTO>) request.getAttribute("list");
%>

<h2>๊ฒŒ์‹œ๊ธ€ ๋ชฉ๋ก</h2>
<table border="1">
  <tr>
    <th>๋ฒˆํ˜ธ</th>
    <th>์ œ๋ชฉ</th>
    <th>์ž‘์„ฑ์ผ</th>
  </tr>

<% for(BoardDTO dto : list) { %>
  <tr>
    <td><%= dto.getId() %></td>
    <td><%= dto.getTitle() %></td>
    <td><%= dto.getRegdate() %></td>
  </tr>
<% } %>
</table>

โœ… 4. JSP์—์„œ ๋ฐ˜๋ณต๋ฌธ์œผ๋กœ ์ถœ๋ ฅํ•˜๊ธฐ

๋ฐฉ์‹ ์˜ˆ์‹œ
์ผ๋ฐ˜ for-each <% for(BoardDTO dto : list) { %>
JSTL ์‚ฌ์šฉ (๊ณ ๊ธ‰) <c:forEach var="dto" items="${list}">

์ดˆ๊ธ‰์ž๋Š” ์Šคํฌ๋ฆฝํ‹€๋ฆฟ ๋ฐฉ์‹ ๋จผ์ € ์‚ฌ์šฉํ•˜๊ณ , JSTL์€ 3๋‹จ๊ณ„์—์„œ ํ•™์Šตํ•˜์„ธ์š” ๐Ÿ˜Š


โœ… 5. ์ถœ๋ ฅ ํ๋ฆ„ ์ˆœ์„œ ์š”์•ฝ

1. DAO์—์„œ DB โ†’ List<DTO> ์กฐํšŒ
2. Servlet์—์„œ List๋ฅผ request์— ์ €์žฅ
3. JSP์—์„œ request.getAttribute()๋กœ ๊บผ๋ƒ„
4. forEach๋กœ ํ•˜๋‚˜์”ฉ ์ถœ๋ ฅ

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

์งˆ๋ฌธ ์š”์  ์ •๋ฆฌ
๋ฐ์ดํ„ฐ๋ฅผ ํ™”๋ฉด์— ์ถœ๋ ฅํ•˜๋Š” ํ๋ฆ„์€? DAO โ†’ DTO โ†’ Servlet โ†’ request โ†’ JSP
๋ฐ์ดํ„ฐ ์ „๋‹ฌ ๋ฐฉ๋ฒ•์€? request.setAttribute("list", list) ์‚ฌ์šฉ
JSP์—์„œ ๋ฆฌ์ŠคํŠธ ๊บผ๋‚ด๋Š” ๋ฐฉ๋ฒ•์€? request.getAttribute("list")๋กœ ๋‹ค์šด์บ์ŠคํŒ…
๋ฐ˜๋ณต ์ถœ๋ ฅ์€ ์–ด๋–ป๊ฒŒ ํ•˜๋‚˜์š”? forEach ๋ฌธ์œผ๋กœ DTO ํ•„๋“œ ์ถœ๋ ฅ

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