** ๐Ÿ“ŒDAO ์„ค๊ณ„ (DB ์ ‘๊ทผ ๋กœ์ง ๊ตฌํ˜„) **

DB์— ์•ˆ์ „ํ•˜๊ณ  ํšจ์œจ์ ์œผ๋กœ ์ ‘๊ทผํ•˜๋Š” DAO ๊ตฌ์กฐ ์ •๋ฆฌ

insert, select ๋ฉ”์„œ๋“œ ๊ตฌํ˜„ ์˜ˆ์ œ + ๊ธฐ์ˆ  ๋ฉด์ ‘ ๋Œ€๋น„๊นŒ์ง€


๐Ÿงฉ ๋ชฉ์ฐจ

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

โœ… 1. DAO๋ž€?

ํ•ญ๋ชฉ ์„ค๋ช…
DAO (Data Access Object) DB์™€ ์ง์ ‘ ์—ฐ๊ฒฐ๋˜์–ด ๋ฐ์ดํ„ฐ๋ฅผ CRUD ์ฒ˜๋ฆฌํ•˜๋Š” ํด๋ž˜์Šค
์œ„์น˜ Model ๊ณ„์ธต์— ํฌํ•จ (MVC ๊ตฌ์กฐ์˜ M ๋ถ€๋ถ„)
ํŠน์ง• SQL์„ ์‹คํ–‰ํ•˜๊ณ  ๊ฒฐ๊ณผ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ์ „์šฉ ํด๋ž˜์Šค

โœ… 2. DAO์˜ ์—ญํ• ๊ณผ ์žฅ์ 

์—ญํ•  ์„ค๋ช…
๐ŸŽฏ DB ์ ‘๊ทผ ์ „๋‹ด DB ์—ฐ๊ฒฐ, SQL ์‹คํ–‰, ๊ฒฐ๊ณผ ์ฒ˜๋ฆฌ
๐Ÿ”„ DTO์™€ ์—ฐ๋™ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›๊ธฐ ์œ„ํ•ด DTO ์‚ฌ์šฉ
๐Ÿ“ฆ ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅ DAO ํ•˜๋‚˜๋กœ insert, select, update, delete ๊ด€๋ฆฌ ๊ฐ€๋Šฅ
๐Ÿงผ ์ฝ”๋“œ ๋ถ„๋ฆฌ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง(Controller)๊ณผ DB ๋กœ์ง์„ ๋ถ„๋ฆฌํ•จ์œผ๋กœ์จ ์œ ์ง€๋ณด์ˆ˜ ์šฉ์ด

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

public class MemberDAO {

  // DB ์ €์žฅ
  public void insert(MemberDTO dto) {
    // Connection โ†’ SQL โ†’ execute
  }

  // DB ์กฐํšŒ
  public List<MemberDTO> selectAll() {
    // SQL โ†’ ResultSet โ†’ DTO ๋ฆฌ์ŠคํŠธ๋กœ ๋ฐ˜ํ™˜
  }
}

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

[form.jsp]
 โฌ‡๏ธ ์‚ฌ์šฉ์ž ์ž…๋ ฅ
[Servlet]
 โฌ‡๏ธ ์ž…๋ ฅ๊ฐ’ โ†’ DTO ์ €์žฅ
[DAO]
 โฌ‡๏ธ insert(dto)
[DB]
 โฌ†๏ธ selectAll() โ†’ DTO ๋ชฉ๋ก ๋ฐ˜ํ™˜
[Servlet โ†’ JSP]
 โฌ†๏ธ ํ™”๋ฉด์— ์ถœ๋ ฅ

โœ… 5. ์˜ˆ์ œ ์ฝ”๋“œ (ํšŒ์› ๋“ฑ๋ก + ์ „์ฒด ๋ชฉ๋ก ์กฐํšŒ)


๐Ÿ“Œ insert ๊ตฌํ˜„ (ํšŒ์› ๋“ฑ๋ก)

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();
  }
}

๐Ÿ“Œ selectAll ๊ตฌํ˜„ (ํšŒ์› ์ „์ฒด ๋ชฉ๋ก)

public List<MemberDTO> selectAll() {
  List<MemberDTO> list = new ArrayList<>();

  try {
    Connection conn = DB.getConnection();
    String sql = "SELECT * FROM members ORDER BY id DESC";
    PreparedStatement ps = conn.prepareStatement(sql);
    ResultSet rs = ps.executeQuery();

    while(rs.next()) {
      MemberDTO dto = new MemberDTO();
      dto.setId(rs.getInt("id"));
      dto.setName(rs.getString("name"));
      dto.setEmail(rs.getString("email"));
      list.add(dto);
    }

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

  return list;
}

๐Ÿ“Œ DBConnection ํด๋ž˜์Šค ์˜ˆ์‹œ (๊ณตํ†ต ์—ฐ๊ฒฐ ํด๋ž˜์Šค)

public class DB {
  public static Connection getConnection() throws Exception {
    Class.forName("org.mariadb.jdbc.Driver");
    return DriverManager.getConnection(
      "jdbc:mariadb://localhost:3306/dbname", "user", "password"
    );
  }
}

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

์งˆ๋ฌธ ์š”์  ์ •๋ฆฌ
DAO๋ž€ ๋ฌด์—‡์ธ๊ฐ€์š”? DB ์ž‘์—…(insert, select ๋“ฑ)์„ ๋‹ด๋‹นํ•˜๋Š” ํด๋ž˜์Šค
DTO์™€ DAO ์ฐจ์ด๋Š”? DTO๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ด๋Š” ๊ฐ์ฒด, DAO๋Š” DB ์ฒ˜๋ฆฌ ๋กœ์ง ๋‹ด๋‹น
DAO์˜ ์žฅ์ ์€? ์ฝ”๋“œ ๋ถ„๋ฆฌ, ์žฌ์‚ฌ์šฉ์„ฑ โ†‘, MVC ํŒจํ„ด์˜ Model ๊ณ„์ธต ๊ตฌ์„ฑ
select ๊ฒฐ๊ณผ๋ฅผ ์–ด๋–ป๊ฒŒ JSP์— ๋„˜๊ธฐ๋‚˜์š”? DAO์—์„œ List ๋ฐ˜ํ™˜ โ†’ Servlet์—์„œ request์— ์ €์žฅ โ†’ JSP์—์„œ ์ถœ๋ ฅ

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