** ๐Ÿ“ŒDTO ์„ค๊ณ„ (์ž…๋ ฅํผ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ด๋Š” Java ํด๋ž˜์Šค) **

์‚ฌ์šฉ์ž์˜ ์ž…๋ ฅ๊ฐ’์„ ๊ฐ์ฒด๋กœ ์•ˆ์ „ํ•˜๊ฒŒ ์ €์žฅํ•˜๋Š” ๋ฐฉ๋ฒ•

๊ตฌ์กฐ, ํ™œ์šฉ ์˜ˆ์ œ, ๊ธฐ์ˆ  ๋ฉด์ ‘๊นŒ์ง€ ์™„์ „ ์ •๋ฆฌ


๐Ÿงฉ ๋ชฉ์ฐจ

  1. DTO๋ž€ ๋ฌด์—‡์ธ๊ฐ€?
  2. ์™œ DTO๋ฅผ ์‚ฌ์šฉํ•˜๋Š”๊ฐ€?
  3. DTO ํด๋ž˜์Šค ๊ธฐ๋ณธ ๊ตฌ์กฐ
  4. ์‹ค์ „ ํ๋ฆ„ ์˜ˆ์‹œ (ํผ โ†’ DTO โ†’ DB)
  5. ์˜ˆ์ œ ์ฝ”๋“œ (ํšŒ์›๊ฐ€์ž…์šฉ DTO)
  6. ๊ธฐ์ˆ  ๋ฉด์ ‘ ๋Œ€๋น„ ์š”์•ฝ
  7. ๋งˆ๋ฌด๋ฆฌ ์š”์•ฝ + Notion ์ž‘์„ฑ ํŒ

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

์šฉ์–ด ์˜๋ฏธ
DTO (Data Transfer Object) ๋ฐ์ดํ„ฐ๋ฅผ ์•ˆ์ „ํ•˜๊ฒŒ ์ „๋‹ฌํ•˜๊ธฐ ์œ„ํ•œ ํด๋ž˜์Šค
์‚ฌ์šฉ ๋ชฉ์  JSP/Servlet ๊ฐ„ ๋˜๋Š” DB ์—ฐ๋™ ์‹œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ์ฒด ๋‹จ์œ„๋กœ ์ฃผ๊ณ ๋ฐ›๊ธฐ ์œ„ํ•จ
ํŠน์ง• ํ•„๋“œ๋Š” private, ์ ‘๊ทผ์€ getter/setter ์‚ฌ์šฉ

โœ… 2. ์™œ DTO๋ฅผ ์‚ฌ์šฉํ•˜๋Š”๊ฐ€?

์ด์œ  ์„ค๋ช…
๐Ÿ’ก ๋ฐ์ดํ„ฐ ๋ฌถ์Œ ์ฒ˜๋ฆฌ ํผ ์ž…๋ ฅ๊ฐ’ ์—ฌ๋Ÿฌ ๊ฐœ๋ฅผ ํ•˜๋‚˜์˜ ๊ฐ์ฒด๋กœ ๋ฌถ์–ด์„œ ์ „๋‹ฌ
๐Ÿ›ก๏ธ ๋ณด์•ˆ์„ฑ & ๊ตฌ์กฐํ™” ์ง์ ‘ ํŒŒ๋ผ๋ฏธํ„ฐ ๋Œ€์‹  ์•ˆ์ „ํ•œ ์ ‘๊ทผ ๋ฐฉ์‹ ์‚ฌ์šฉ (์บก์Аํ™”)
๐Ÿ”„ ์œ ์ง€๋ณด์ˆ˜ ์šฉ์ด ํ•„๋“œ ์ถ”๊ฐ€/์‚ญ์ œ๊ฐ€ ์šฉ์ดํ•˜๋ฉฐ ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅ
๐Ÿค MVC ๋ถ„๋ฆฌ Controller(์„œ๋ธ”๋ฆฟ)์™€ Model(DB) ์‚ฌ์ด๋ฅผ ์—ฐ๊ฒฐํ•ด์คŒ

โœ… 3. DTO ํด๋ž˜์Šค ๊ธฐ๋ณธ ๊ตฌ์กฐ โœ๏ธ

// MemberDTO.java
public class MemberDTO {
  // 1. private ๋ณ€์ˆ˜ ์„ ์–ธ
  private String name;
  private String email;

  // 2. ๊ธฐ๋ณธ ์ƒ์„ฑ์ž
  public MemberDTO() {}

  // 3. getter & setter
  public String getName() {
    return name;
  }

  public void setName(String name) {
    this.name = name;
  }

  public String getEmail() {
    return email;
  }

  public void setEmail(String email) {
    this.email = email;
  }
}

โœ… 4. ์‹ค์ „ ํ๋ฆ„ ์˜ˆ์‹œ ๐ŸŽฏ

[form.jsp] ์‚ฌ์šฉ์ž ์ž…๋ ฅ
   โฌ‡๏ธ request.getParameter()
[Servlet] ์ž…๋ ฅ๊ฐ’ โ†’ DTO ์ €์žฅ
   โฌ‡๏ธ setName(), setEmail()
[DAO] DTO ๊ฐ’์„ DB์— ์ €์žฅ

โœ… 5. ์˜ˆ์ œ ์ฝ”๋“œ ํ๋ฆ„

๐Ÿ“„ form.jsp (์‚ฌ์šฉ์ž ์ž…๋ ฅ ํผ)

<form action="register" method="post">
  ์ด๋ฆ„: <input type="text" name="name" /><br />
  ์ด๋ฉ”์ผ: <input type="text" name="email" /><br />
  <input type="submit" value="ํšŒ์›๊ฐ€์ž…" />
</form>

๐Ÿ“„ RegisterServlet.java (DTO ๊ฐ์ฒด ์ƒ์„ฑ ๋ฐ ์ „๋‹ฌ)

@WebServlet("/register")
public class RegisterServlet extends HttpServlet {
  protected void doPost(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {

    request.setCharacterEncoding("UTF-8");

    // 1. ์ž…๋ ฅ๊ฐ’ ๋ฐ›๊ธฐ
    String name = request.getParameter("name");
    String email = request.getParameter("email");

    // 2. DTO ๊ฐ์ฒด ์ƒ์„ฑ ๋ฐ ๊ฐ’ ์„ค์ •
    MemberDTO dto = new MemberDTO();
    dto.setName(name);
    dto.setEmail(email);

    // 3. DAO์— ์ „๋‹ฌ
    MemberDAO dao = new MemberDAO();
    dao.insert(dto);

    // 4. ์‘๋‹ต ์ฒ˜๋ฆฌ
    response.sendRedirect("success.jsp");
  }
}

๐Ÿ“„ MemberDAO.java (DTO๋ฅผ ์‚ฌ์šฉํ•œ DB ์ €์žฅ)

public class MemberDAO {
  public void insert(MemberDTO dto) {
    try {
      Connection conn = DB.getConnection();
      String sql = "INSERT INTO members(name, email) VALUES (?, ?)";
      PreparedStatement ps = conn.prepareStatement(sql);
      ps.setString(1, dto.getName());
      ps.setString(2, dto.getEmail());
      ps.executeUpdate();
      conn.close();
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
}

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

์งˆ๋ฌธ ์š”์  ์ •๋ฆฌ
DTO๋ž€ ๋ฌด์—‡์ธ๊ฐ€์š”? ๋ฐ์ดํ„ฐ๋ฅผ ๋ฌถ์–ด์„œ ์ „๋‹ฌํ•˜๋Š” ๊ฐ์ฒด, ์ฃผ๋กœ Form โ†’ Servlet โ†’ DB ์ „๋‹ฌ์— ์‚ฌ์šฉ
DTO์˜ ์žฅ์ ์€? ์บก์Аํ™”, ์ฝ”๋“œ ๊ฐ„๊ฒฐํ™”, ์œ ์ง€๋ณด์ˆ˜ ์šฉ์ด
DTO๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ์ง์ ‘ ์ฒ˜๋ฆฌํ•˜๋ฉด ์–ด๋–ค ๋ฌธ์ œ๊ฐ€ ์žˆ๋‚˜์š”? ํ•„๋“œ ๊ด€๋ฆฌ๊ฐ€ ์–ด๋ ค์›Œ์ง€๊ณ  ์œ ์ง€๋ณด์ˆ˜ ์‹œ ์—๋Ÿฌ ๋ฐœ์ƒ ํ™•๋ฅ  โ†‘
DTO์™€ JavaBean์˜ ๊ด€๊ณ„๋Š”? ๋Œ€๋ถ€๋ถ„ DTO๋Š” JavaBean ๊ทœ์น™(๊ธฐ๋ณธ ์ƒ์„ฑ์ž, private, getter/setter)์„ ๋”ฐ๋ฆ„

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