** ๐Ÿ“ŒMVC 2 ํŒจํ„ด ์„ค๊ณ„ **

View์™€ Controller๋ฅผ ์™„์ „ํžˆ ๋ถ„๋ฆฌํ•˜๋Š” ๊ตฌ์กฐ๋กœ

์œ ์ง€๋ณด์ˆ˜์„ฑ๊ณผ ํ™•์žฅ์„ฑ์„ ๊ทน๋Œ€ํ™”ํ•˜๋Š” ์‹ค์ „ ์•„ํ‚คํ…์ฒ˜ ์„ค๊ณ„ ๋ฐฉ์‹

JSP + Servlet ๊ธฐ๋ฐ˜ ์‹ค์ „ ๊ตฌ์กฐ ์™„์ „ ์ •๋ฆฌ


๐Ÿงฉ ๋ชฉ์ฐจ

  1. MVC๋ž€ ๋ฌด์—‡์ธ๊ฐ€?
  2. MVC1 vs MVC2 ๋น„๊ต
  3. MVC2 ํ๋ฆ„๋„
  4. ๊ตฌ์„ฑ ์š”์†Œ๋ณ„ ์—ญํ• 
  5. ์‹ค์ „ ์˜ˆ์ œ ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ
  6. MVC2 ์žฅ์ ๊ณผ ์ฃผ์˜์ 
  7. ๊ธฐ์ˆ  ๋ฉด์ ‘ ๋Œ€๋น„ ํ•ต์‹ฌ ์š”์•ฝ
  8. ๋งˆ๋ฌด๋ฆฌ ์š”์•ฝ + Notion ์ž‘์„ฑ ํŒ

โœ… 1. MVC๋ž€ ๋ฌด์—‡์ธ๊ฐ€?

์š”์†Œ ์„ค๋ช… ์˜ˆ์‹œ
M (Model) ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ (DB, DAO, DTO) BoardDAO, BoardDTO
V (View) ์‚ฌ์šฉ์ž ํ™”๋ฉด (JSP) list.jsp, write.jsp
C (Controller) ์š”์ฒญ ์ฒ˜๋ฆฌ, ํ๋ฆ„ ์ œ์–ด (Servlet) BoardListServlet

๐Ÿง  MVC๋Š” ์—ญํ• ์„ ๋ถ„๋ฆฌํ•˜์—ฌ ์ฝ”๋“œ ๊ด€๋ฆฌ์™€ ํ™•์žฅ์„ ์‰ฝ๊ฒŒ ๋งŒ๋“œ๋Š” ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค.


โœ… 2. MVC1 vs MVC2 ๋น„๊ต

ํ•ญ๋ชฉ MVC1 MVC2
๊ตฌ์กฐ JSP๊ฐ€ ์š”์ฒญ/์‘๋‹ต/๋น„์ฆˆ๋‹ˆ์Šค ๋ชจ๋‘ ์ฒ˜๋ฆฌ Servlet์ด ์š”์ฒญ ์ฒ˜๋ฆฌ, JSP๋Š” View ์ „๋‹ด
ํ๋ฆ„ JSP โ†’ DAO โ†’ ์‘๋‹ต JSP(ํผ) โ†’ Servlet โ†’ DAO โ†’ JSP(์‘๋‹ต)
ํ™•์žฅ์„ฑ ๋‚ฎ์Œ ๋†’์Œ (View/Controller ์™„์ „ ๋ถ„๋ฆฌ)
์œ ์ง€๋ณด์ˆ˜ ์–ด๋ ค์›€ ์‰ฝ๊ณ  ์ฒด๊ณ„์ 

โœ… 3. MVC2 ํ๋ฆ„๋„

[์‚ฌ์šฉ์ž ์š”์ฒญ]
 โฌ‡
๐Ÿ“„ form.jsp (์ž…๋ ฅ)
 โฌ‡
๐Ÿ“„ Servlet (Controller)
   โ†’ ์š”์ฒญ ๋ถ„์„
   โ†’ DTO ์ƒ์„ฑ
   โ†’ DAO ํ˜ธ์ถœ (DB ์ฒ˜๋ฆฌ)
   โ†’ ๊ฒฐ๊ณผ ์ €์žฅ (request.setAttribute)
 โฌ‡
๐Ÿ“„ JSP (View)๋กœ ์ด๋™ (RequestDispatcher.forward)
 โฌ‡
[์‘๋‹ต ์ถœ๋ ฅ]

โœ… 4. ๊ตฌ์„ฑ ์š”์†Œ๋ณ„ ์—ญํ• 

๊ตฌ์„ฑ ์˜ˆ์‹œ ์—ญํ• 
View list.jsp, write.jsp ํ™”๋ฉด ์ถœ๋ ฅ (HTML, EL, JSTL)
Controller BoardListServlet ์‚ฌ์šฉ์ž์˜ ์š”์ฒญ ์ฒ˜๋ฆฌ, ํ๋ฆ„ ์ œ์–ด
Model - DTO BoardDTO ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ด๋Š” ์ž๋ฐ” ๊ฐ์ฒด
Model - DAO BoardDAO DB ์ ‘๊ทผ, SELECT/INSERT ์ฒ˜๋ฆฌ
Util DB.java ๊ณตํ†ต DB ์—ฐ๊ฒฐ ์ฒ˜๋ฆฌ

โœ… 5. ์‹ค์ „ ์˜ˆ์ œ ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ

๐Ÿ“ controller/
  โ””โ”€ BoardListServlet.java
  โ””โ”€ BoardWriteServlet.java

๐Ÿ“ dao/
  โ””โ”€ BoardDAO.java

๐Ÿ“ dto/
  โ””โ”€ BoardDTO.java

๐Ÿ“ view/
  โ””โ”€ list.jsp
  โ””โ”€ write.jsp

๐Ÿ“ util/
  โ””โ”€ DB.java

โœ… Servlet ์ฝ”๋“œ ํ๋ฆ„ ์˜ˆ์‹œ (Controller)

@WebServlet("/board/list")
public class BoardListServlet extends HttpServlet {
  protected void doGet(HttpServletRequest req, HttpServletResponse resp)
      throws ServletException, IOException {

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

    req.setAttribute("list", list);
    RequestDispatcher rd = req.getRequestDispatcher("/view/list.jsp");
    rd.forward(req, resp);
  }
}

โœ… list.jsp ์˜ˆ์‹œ (View)

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

<h2>๊ฒŒ์‹œ๊ธ€ ๋ชฉ๋ก</h2>
<table border="1">
<% for(BoardDTO dto : list) { %>
  <tr>
    <td><%= dto.getId() %></td>
    <td><%= dto.getTitle() %></td>
  </tr>
<% } %>
</table>

โœ… 6. MVC2 ์žฅ์ ๊ณผ ์ฃผ์˜์ 

ํ•ญ๋ชฉ ๋‚ด์šฉ
โœ… ์žฅ์  ์—ญํ•  ๋ถ„๋ฆฌ๋กœ ์œ ์ง€๋ณด์ˆ˜์„ฑ โ†‘, ํ˜‘์—… ์šฉ์ด, ํ™•์žฅ์„ฑ ์šฐ์ˆ˜
โœ… ๊ตฌ์กฐ ๋ช…ํ™• ๊ธฐ๋Šฅ๋ณ„ ํŒจํ‚ค์ง€ ๋ถ„๋ฆฌ๋กœ ์ฝ”๋“œ ๊ฐ€๋…์„ฑ ์ฆ๊ฐ€
โš ๏ธ ์ฃผ์˜ Servlet์ด ๋„ˆ๋ฌด ๋งŽ์€ ๊ธฐ๋Šฅ์„ ๋‹ด๋‹นํ•˜์ง€ ์•Š๋„๋ก ๋ถ„๋ฆฌ ์œ ์ง€ (๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์€ DAO๋กœ)

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

์งˆ๋ฌธ ์š”์  ์ •๋ฆฌ
MVC ํŒจํ„ด์ด๋ž€? Model-View-Controller๋กœ ๊ตฌ์„ฑ๋œ ์›น ๊ตฌ์กฐ ์„ค๊ณ„ ๋ฐฉ์‹
MVC1๊ณผ MVC2 ์ฐจ์ด์ ์€? MVC2๋Š” View์™€ Controller๋ฅผ ๋ถ„๋ฆฌํ•˜์—ฌ ํ™•์žฅ์„ฑโ†‘, ์œ ์ง€๋ณด์ˆ˜ ์šฉ์ด
Controller ์—ญํ• ์€? ์š”์ฒญ ํŒŒ๋ผ๋ฏธํ„ฐ ์ฒ˜๋ฆฌ, ๋กœ์ง ํ๋ฆ„ ์ œ์–ด, ๊ฒฐ๊ณผ ์ „๋‹ฌ
JSP์˜ ์—ญํ• ์€? View ์—ญํ• ๋งŒ ์ˆ˜ํ–‰, ๋กœ์ง์€ ํฌํ•จ โŒ

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