** ๐Ÿ“ŒMariaDB ์—ฐ๋™ (JDBC + SQL + ํ…Œ์ด๋ธ” ์ƒ์„ฑ) **

Java์—์„œ MariaDB์— ์—ฐ๊ฒฐํ•˜๊ณ  SQL๋กœ ํ…Œ์ด๋ธ”์„ ์ƒ์„ฑํ•˜๊ณ  ์‚ฌ์šฉํ•˜๋Š” ์ „์ฒด ํ๋ฆ„

JDBC ์—ฐ๊ฒฐ๋ถ€ํ„ฐ SQL ์‹คํ–‰๊นŒ์ง€ ์™„์ „ ์ •๋ฆฌ + ๋ฉด์ ‘ ๋Œ€๋น„


๐Ÿงฉ ๋ชฉ์ฐจ

  1. MariaDB๋ž€?
  2. JDBC + MariaDB ์—ฐ๋™ ๊ตฌ์„ฑ์š”์†Œ
  3. ์—ฐ๋™ ์ ˆ์ฐจ ์ˆœ์„œ
  4. ํ…Œ์ด๋ธ” ์ƒ์„ฑ SQL ์˜ˆ์ œ
  5. ์‹ค์ „ ํ๋ฆ„: Java โ†’ JDBC โ†’ MariaDB
  6. ์ž์ฃผ ๋ฐœ์ƒํ•˜๋Š” ์—๋Ÿฌ์™€ ํ•ด๊ฒฐ๋ฒ•
  7. ๊ธฐ์ˆ  ๋ฉด์ ‘ ๋Œ€๋น„ ์š”์•ฝ
  8. ๋งˆ๋ฌด๋ฆฌ ์š”์•ฝ + Notion ์ž‘์„ฑ ํŒ

โœ… 1. MariaDB๋ž€?

ํ•ญ๋ชฉ ์„ค๋ช…
์ •์˜ ์˜คํ”ˆ์†Œ์Šค ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค (MySQL๊ณผ ํ˜ธํ™˜)
์‚ฌ์šฉ ๋ชฉ์  Java ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ
์—ฐ๊ฒฐ ๋ฐฉ์‹ JDBC(Java Database Connectivity)๋ฅผ ํ†ตํ•ด ์—ฐ๊ฒฐ

โœ… 2. JDBC + MariaDB ์—ฐ๋™ ๊ตฌ์„ฑ์š”์†Œ

๊ตฌ์„ฑ ์š”์†Œ ์—ญํ• 
JDBC ๋“œ๋ผ์ด๋ฒ„ Java โ†” DB ์—ฐ๊ฒฐ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ด์ฃผ๋Š” ๋‹ค๋ฆฌ
Connection DB์™€ ์—ฐ๊ฒฐ๋œ ํ†ต๋กœ ๊ฐ์ฒด
PreparedStatement SQL ์‹คํ–‰ ๊ฐ์ฒด (ํŒŒ๋ผ๋ฏธํ„ฐ ๋ฐ”์ธ๋”ฉ ๊ฐ€๋Šฅ)
ResultSet SELECT ๊ฒฐ๊ณผ๋ฅผ ๋ฐ›์•„์˜ค๋Š” ๊ฐ์ฒด

โœ… 3. ์—ฐ๋™ ์ ˆ์ฐจ ์ˆœ์„œ

โ‘  ๋“œ๋ผ์ด๋ฒ„ ๋กœ๋”ฉ
    Class.forName("org.mariadb.jdbc.Driver")

โ‘ก DB ์—ฐ๊ฒฐ
    DriverManager.getConnection(URL, ID, PW)

โ‘ข SQL ์‹คํ–‰
    PreparedStatement โ†’ executeUpdate() ๋˜๋Š” executeQuery()

โ‘ฃ ๊ฒฐ๊ณผ ์ฒ˜๋ฆฌ
    ResultSet โ†’ while(rs.next()) { }

โ‘ค ์—ฐ๊ฒฐ ์ข…๋ฃŒ
    conn.close()

โœ… 4. ํ…Œ์ด๋ธ” ์ƒ์„ฑ SQL ์˜ˆ์ œ ๐ŸŽฏ

-- ํšŒ์› ํ…Œ์ด๋ธ” ์ƒ์„ฑ ์˜ˆ์ œ
CREATE TABLE members (
  id INT AUTO_INCREMENT PRIMARY KEY,
  name VARCHAR(50) NOT NULL,
  email VARCHAR(100),
  regdate DATETIME DEFAULT NOW()
);

๐Ÿ“Œ SQL์€ HeidiSQL, DBeaver ๋˜๋Š” CLI์—์„œ ์‹คํ–‰ ๊ฐ€๋Šฅ


โœ… 5. ์‹ค์ „ ํ๋ฆ„ ์˜ˆ์ œ: Java โ†’ JDBC โ†’ DB ์ €์žฅ

๐Ÿ“„ DB.java (JDBC ์—ฐ๊ฒฐ)

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

๐Ÿ“„ MemberDAO.java (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();
  }
}

๐Ÿ“„ MemberDTO.java

public class MemberDTO {
  private String name;
  private String email;

  // ๊ธฐ๋ณธ ์ƒ์„ฑ์ž + getter/setter ์ƒ๋žต
}

โœ… 6. ์ž์ฃผ ๋ฐœ์ƒํ•˜๋Š” ์—๋Ÿฌ & ํ•ด๊ฒฐ๋ฒ• ๐Ÿ›ก๏ธ

์—๋Ÿฌ ๋ฉ”์‹œ์ง€ ์›์ธ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•
ClassNotFoundException JDBC ๋“œ๋ผ์ด๋ฒ„ ์—†์Œ mariadb-java-client.jar ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ถ”๊ฐ€
Access denied DB ๊ณ„์ •/๋น„๋ฒˆ ์˜ค๋ฅ˜ ์‚ฌ์šฉ์ž ๊ณ„์ • ๊ถŒํ•œ ํ™•์ธ
Unknown database DB๊ฐ€ ์—†์Œ MariaDB์— ๋จผ์ € CREATE DATABASE ์‹คํ–‰
Connection refused ํฌํŠธ ๋˜๋Š” DB ๊บผ์ง MariaDB ์„œ๋ฒ„ ์‹คํ–‰ ์ƒํƒœ, ํฌํŠธ(3306) ํ™•์ธ

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

์งˆ๋ฌธ ์š”์  ์ •๋ฆฌ
JDBC ์—ฐ๊ฒฐ ์ˆœ์„œ๋Š”? โ‘  ๋“œ๋ผ์ด๋ฒ„ ๋กœ๋”ฉ โ†’ โ‘ก getConnection โ†’ โ‘ข SQL ์‹คํ–‰ โ†’ โ‘ฃ ๊ฒฐ๊ณผ ์ฒ˜๋ฆฌ
DB ์—ฐ๊ฒฐ์„ Java์—์„œ ์–ด๋–ป๊ฒŒ ํ•˜๋‚˜์š”? JDBC ๋“œ๋ผ์ด๋ฒ„๋ฅผ ํ†ตํ•ด Connection ๊ฐ์ฒด ์ƒ์„ฑ
insert ์‹œ ์–ด๋–ค ๊ฐ์ฒด๋ฅผ ์“ฐ๋‚˜์š”? PreparedStatement ์‚ฌ์šฉ (SQL Injection ๋ฐฉ์ง€ ํšจ๊ณผ๋„ ์žˆ์Œ)
ResultSet์€ ์–ธ์ œ ์“ฐ๋‚˜์š”? SELECT ์ฟผ๋ฆฌ ์‹คํ–‰ ์‹œ ๊ฒฐ๊ณผ ์ €์žฅ์šฉ์œผ๋กœ ์‚ฌ์šฉ

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