** ๐Ÿ“ŒMVC ํŒจํ„ด ์ดํ•ด**

JSP + Servlet + DAO/DTO๋กœ ์›น์‚ฌ์ดํŠธ๋ฅผ ๊ตฌ์กฐํ™”ํ•˜๊ธฐ ์œ„ํ•œ ํ•ต์‹ฌ ๊ฐœ๋…

์‹ค๋ฌดํ˜• ๊ตฌ์กฐ ์„ค๊ณ„ + ์‹ค์ „ ํ๋ฆ„ + ๊ธฐ์ˆ  ๋ฉด์ ‘๊นŒ์ง€ ์ปค๋ฒ„


๐Ÿงฉ ๋ชฉ์ฐจ

  1. MVC ํŒจํ„ด์ด๋ž€?
  2. ๊ฐ ๊ตฌ์„ฑ์š”์†Œ ์—ญํ•  ์ •๋ฆฌ
  3. ๊ตฌ์กฐ๋„ + ๋™์ž‘ ํ๋ฆ„
  4. ์‹ค์ „ ์˜ˆ์‹œ ํ๋ฆ„๋„
  5. ๋ฉด์ ‘ ์งˆ๋ฌธ ๋Œ€๋น„
  6. ๋งˆ๋ฌด๋ฆฌ ์š”์•ฝ + Notion ์ž‘์„ฑ ํŒ

โœ… 1. MVC ํŒจํ„ด์ด๋ž€?

์šฉ์–ด ์˜๋ฏธ
M (Model) ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ์˜์—ญ (DB ์—ฐ๊ฒฐ, DTO/DAO ํด๋ž˜์Šค)
V (View) ํ™”๋ฉด ์ถœ๋ ฅ ๋‹ด๋‹น (JSP)
C (Controller) ์š”์ฒญ ์ฒ˜๋ฆฌ/์ค‘๊ณ„ ์—ญํ•  (Servlet)

๐Ÿ“Œ ์›น์‚ฌ์ดํŠธ๋ฅผ ๊ตฌ์„ฑ์š”์†Œ๋ณ„๋กœ ์—ญํ• ์„ ๋ถ„๋ฆฌํ•ด์„œ ์œ ์ง€๋ณด์ˆ˜์™€ ์žฌ์‚ฌ์šฉ์„ฑ์„ ๋†’์ด๋Š” ๊ตฌ์กฐ


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

๊ตฌ์„ฑ ์š”์†Œ ์‚ฌ์šฉ ๊ธฐ์ˆ  ์—ญํ• 
Model Java ํด๋ž˜์Šค (DTO/DAO) ๋ฐ์ดํ„ฐ ์ €์žฅ, DB ์ฒ˜๋ฆฌ
View JSP ์‚ฌ์šฉ์ž์—๊ฒŒ ํ™”๋ฉด ์ถœ๋ ฅ
Controller Servlet ์š”์ฒญ์„ ๋ฐ›์•„ Model ํ˜ธ์ถœ + ๊ฒฐ๊ณผ๋ฅผ View์— ์ „๋‹ฌ

โœ… 3. MVC ๊ตฌ์กฐ๋„ ๐Ÿงฑ

[์‚ฌ์šฉ์ž ๋ธŒ๋ผ์šฐ์ €]
       โฌ‡๏ธ
[View: form.jsp]
  ์‚ฌ์šฉ์ž ์ž…๋ ฅ ํ™”๋ฉด
       โฌ‡๏ธ form ์ „์†ก
[Controller: SaveServlet.java]
  ์š”์ฒญ ํŒŒ๋ผ๋ฏธํ„ฐ ๋ฐ›์Œ
       โฌ‡๏ธ
[Model: DTO + DAO]
  DB ์ €์žฅ ์ฒ˜๋ฆฌ
       โฌ‡๏ธ
[View: result.jsp / list.jsp]
  ๊ฒฐ๊ณผ ํ™”๋ฉด ์ถœ๋ ฅ

โœ… 4. ์‹ค์ „ ํ๋ฆ„ ์˜ˆ์‹œ: ๊ฒŒ์‹œ๊ธ€ ์ €์žฅ

๐Ÿงพ ์ƒํ™ฉ

์‚ฌ์šฉ์ž๊ฐ€ form.jsp์—์„œ ๊ฒŒ์‹œ๊ธ€ ์ž‘์„ฑ โ†’ ์ €์žฅ ๋ฒ„ํŠผ ํด๋ฆญ


๋‹จ๊ณ„ ํŒŒ์ผ ์—ญํ• 
1 form.jsp ์‚ฌ์šฉ์ž ์ž…๋ ฅ ํ™”๋ฉด (View)
2 SaveServlet.java ์ž…๋ ฅ๊ฐ’ ๋ฐ›๊ธฐ + DAO ํ˜ธ์ถœ (Controller)
3 BoardDTO.java ๋ฐ์ดํ„ฐ ์ €์žฅ์šฉ ๊ฐ์ฒด (Model - DTO)
4 BoardDAO.java DB ์ €์žฅ ๋กœ์ง (Model - DAO)
5 result.jsp ์ €์žฅ ์™„๋ฃŒ ํ™”๋ฉด ์ถœ๋ ฅ (View)

โœ… ์‹ค์ „ ์˜ˆ์ œ ํ๋ฆ„ ๊ฐ„๋‹จ ์š”์•ฝ

<!-- form.jsp -->
<form action="save" method="post">
  ์ œ๋ชฉ: <input type="text" name="title" /><br />
  ๋‚ด์šฉ: <textarea name="content"></textarea><br />
  <input type="submit" value="์ €์žฅ" />
</form>
// SaveServlet.java (Controller)
protected void doPost(HttpServletRequest req, HttpServletResponse resp) {
  String title = req.getParameter("title");
  String content = req.getParameter("content");

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

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

  resp.sendRedirect("list.jsp");
}
// BoardDTO.java (Model)
public class BoardDTO {
  private String title;
  private String content;
  // getter/setter ์ƒ๋žต
}
// BoardDAO.java (Model)
public void insertPost(BoardDTO dto) {
  Connection conn = DB.getConnection();
  String sql = "INSERT INTO board(title, content) VALUES (?, ?)";
  PreparedStatement ps = conn.prepareStatement(sql);
  ps.setString(1, dto.getTitle());
  ps.setString(2, dto.getContent());
  ps.executeUpdate();
  conn.close();
}

โœ… 5. ๊ธฐ์ˆ  ๋ฉด์ ‘ ๋Œ€๋น„ ํ•ต์‹ฌ ์งˆ๋ฌธ

์งˆ๋ฌธ ์š”์  ์š”์•ฝ
MVC ํŒจํ„ด์ด๋ž€? Model, View, Controller๋กœ ์›น ๊ตฌ์กฐ๋ฅผ ๋‚˜๋ˆˆ ์„ค๊ณ„ ๋ฐฉ์‹
JSP์—์„œ Controller ์—ญํ• ์€? Servlet์ด Controller ์—ญํ•  ์ˆ˜ํ–‰
Model์—๋Š” ๋ฌด์—‡์ด ๋“ค์–ด๊ฐ€๋‚˜์š”? DTO (๋ฐ์ดํ„ฐ ๊ฐ์ฒด) + DAO (DB ์ฒ˜๋ฆฌ ํด๋ž˜์Šค)
MVC์˜ ์žฅ์ ์€? ์œ ์ง€๋ณด์ˆ˜ ์‰ฌ์›€, ์—ญํ•  ๋ถ„๋ฆฌ๋กœ ๊ตฌ์กฐํ™” ๊ฐ€๋Šฅ, ํ˜‘์—…์— ์œ ๋ฆฌํ•จ

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