JDBC

๋ž ๋œจยท2024๋…„ 12์›” 3์ผ

๐Ÿ”Ž Overview

ย ์ž๋ฐ”์™€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ด€๋ จ๋œ ๊ฒƒ๋“ค์„ ํ•™์Šตํ•˜๊ฒŒ ๋˜๋ฉด ์ œ์ผ ๋จผ์ € ํŠ€์–ด๋‚˜์˜ค๋Š” ๊ฒŒ ์žˆ๋‹ค.
ํ†ต์นญ JDBC (Java Database Connectivity). ์ž๋ฐ”์™€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์—ฐ๋™ํ•˜๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•˜๋‹ค๋Š” ๊ฒƒ๋งŒ ์•Œ๊ณ  ์žˆ๋‹ค.
JDBC์— ๋Œ€ํ•ด ์ข€ ๋” ๊นŠ๊ฒŒ ์•Œ์•„๋ณด์ž.


JDBC

  • JDBC๋Š” Java ํ”„๋กœ๊ทธ๋žจ๊ณผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์—ฐ๊ฒฐํ•ด์ฃผ๋Š” ๊ธฐ์ˆ ์ด๋‹ค.
  • JDBC์˜ ๋™์ž‘ ๋ฐฉ์‹์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค.
  1. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ
    • Java ํ”„๋กœ๊ทธ๋žจ๊ณผ DB ์‚ฌ์ด์˜ ์—ฐ๊ฒฐ์„ ๋งŒ๋“ ๋‹ค.

  2. SQL๋ฌธ ์‹คํ–‰
    • ์ž‘์„ฑ๋œ SQL ๋ช…๋ น๋ฌธ์„ DB๋กœ ๋‚ด๋ณด๋‚ด๊ณ  ์‹คํ–‰ํ•œ๋‹ค.

  3. ๊ฒฐ๊ณผ ๋ฐ˜ํ™˜
    • DB์—์„œ ์‹คํ–‰ํ•œ SQL๋ฌธ์˜ ๊ฒฐ๊ณผ๋ฅผ Java ํ”„๋กœ๊ทธ๋žจ์œผ๋กœ ๊ฐ€์ ธ์˜จ๋‹ค.

  4. ์—ฐ๊ฒฐ ์ข…๋ฃŒ
    • ์ž‘์—…์ด ๋๋‚˜๋ฉด ์—ฐ๊ฒฐ์„ ๋‹ซ๊ณ , ํ•„์š” ์—†๋Š” ๋ฆฌ์†Œ์Šค๋ฅผ ์ •๋ฆฌํ•œ๋‹ค.

JDBC์˜ ์ฃผ์š” ๊ฐœ๋…

1. DriverManager

  • DB์— ์—ฐ๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ๋“œ๋ผ์ด๋ฒ„๋ฅผ ๊ด€๋ฆฌํ•œ๋‹ค.
  • DB์™€์˜ ์—ฐ๊ฒฐ์„ ๋งŒ๋“ค์–ด์ค€๋‹ค.
  • ์ „ํ™”๊ตญ ๊ฐ™์€ ์—ญํ• ์ด๋‹ค.

2. Connection

  • Java ํ”„๋กœ๊ทธ๋žจ๊ณผ DB ๊ฐ„์˜ ์—ฐ๊ฒฐ์„ ๋‹ด๋‹นํ•œ๋‹ค.
  • ์ „ํ™”์„  ๊ฐ™์€ ์—ญํ• ์ด๋‹ค.

3. Statment

  • Java ํ”„๋กœ๊ทธ๋žจ์— ์ž…๋ ฅ๋œ SQL ๋ช…๋ น๋ฌธ์„ DB๋กœ ์ „๋‹ฌํ•œ๋‹ค.
  • ์ „ํ™”๊ธฐ ๊ฐ™์€ ์—ญํ• ์ด๋‹ค.

4. ResultSet

  • DB์—์„œ SQL ๋ช…๋ น๋ฌธ์„ ์ˆ˜ํ–‰ํ•œ ๊ฒฐ๊ณผ๋ฅผ Java ํ”„๋กœ๊ทธ๋žจ์œผ๋กœ ๊ฐ€์ ธ์˜จ๋‹ค.
  • ์ „ํ™”๊ธฐ๋ฅผ ํ†ตํ•ด ์ƒ๋Œ€๋ฐฉ์—๊ฒŒ ์ „ํ•ด๋ฐ›๋Š” ๋‹ต๋ณ€ ์ด๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

5. SQLException

  • DB์™€ ๊ด€๋ จ๋œ ์ž‘์—… ์ค‘ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ๋˜์ ธ์ง€๋Š” ์˜ˆ์™ธ์ด๋‹ค.

JDBC์˜ ๋™์ž‘ ํ๋ฆ„

1. ๋“œ๋ผ์ด๋ฒ„ ๋กœ๋“œ

  • DBMS ์šฉ ๋“œ๋ผ์ด๋ฒ„๋ฅผ ๋กœ๋“œํ•œ๋‹ค.
  • ์ด ๋“œ๋ผ์ด๋ฒ„๋ฅผ ํ†ตํ•ด Java ํ”„๋กœ๊ทธ๋žจ๊ณผ DB ๊ฐ„์˜ ํ†ต์‹ ์ด ๊ฐ€๋Šฅํ•ด์ง„๋‹ค.
Class.forName(url);

2. ์—ฐ๊ฒฐ ์ƒ์„ฑ

  • DriverManager๋ฅผ ํ†ตํ•ด์„œ DB์™€ ์—ฐ๊ฒฐํ•œ๋‹ค.
Connection conn = DriverManger.getConnection(url, username, password);

3. (Prepared)Statement ์ƒ์„ฑ ๋ฐ SQL ๋ช…๋ น๋ฌธ ์‹คํ–‰

  • Statement๋ฅผ ์ƒ์„ฑํ•ด SQL ๋ช…๋ น๋ฌธ์„ ๋‹ด์„ ์ค€๋น„๋ฅผ ํ•˜๊ณ , ์ฟผ๋ฆฌ๋ฅผ ๋‹ด์•„์„œ DB์— ์ „์†ก ๋ฐ ์‹คํ–‰ํ•œ๋‹ค.
Statement stmt = conn.createStatement();
stmt.executeUpdate(query);

// Statement ๋Œ€์‹  PreparedStatement ๊ฐ์ฒด๋ฅผ ์ด์šฉํ•ด์„œ ์œ ์ €๋กœ๋ถ€ํ„ฐ ์ „๋‹ฌ๋ฐ›๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๋‹ด์„ ์ˆ˜ ์žˆ๋‹ค. (์ถ”ํ›„ ๋‹ค๋ค„๋ณผ ์˜ˆ์ •)


4. ๊ฒฐ๊ณผ ์ฒ˜๋ฆฌ

  • ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•œ ํ›„ ์–ป์€ ๊ฒฐ๊ณผ๋ฅผ ResultSet ๊ฐ์ฒด๋ฅผ ํ†ตํ•ด ์ฒ˜๋ฆฌํ•œ๋‹ค.
try (PreparedStatement stmt = conn.prepareStatement(query, PreparedStatement.RETURN_GENERATED_KEYS)
) {
	ResultSet rs = stmt.getGeneratedKeys()
	while (rs.next()) {
		return rs.getLong(1);
} catch (SQLException e) {
	throw new RuntimeException("SQL ERROR", e);
}

5. ์—ฐ๊ฒฐ ํ•ด์ œ

  • ์ž‘์—…์ด ๋๋‚˜๋ฉด ๋ฆฌ์†Œ์Šค ๋‚ญ๋น„๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด DB์™€์˜ ์—ฐ๊ฒฐ์„ ๋‹ซ์•„์ค€๋‹ค.
conn.close();


JDBC์˜ ์žฅ๋‹จ์ 

์žฅ์ 

  • DBMS์— ์ข…์†๋˜์ง€ ์•Š์•„์„œ ์—ฌ๋Ÿฌ DB์™€ ํ˜ธํ™˜๋œ๋‹ค.
  • SQL ๋ช…๋ น๋ฌธ์„ ์ง์ ‘ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์œ ์—ฐํ•œ ๋ฐ์ดํ„ฐ ์กฐ์ž‘์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

๋‹จ์ 

  • SQL ๋ช…๋ น๋ฌธ์„ ์ง์ ‘ ๋‹ค๋ค„์•ผ ํ•˜๋ฏ€๋กœ ์ฝ”๋“œ๊ฐ€ ์ง€์ €๋ถ„ํ•˜๋ฉฐ ๋ฐ˜๋ณต๋˜๋Š” ์ฝ”๋“œ๊ฐ€ ๋งŽ์•„ ์œ ์ง€๋ณด์ˆ˜์— ์–ด๋ ค์›€์ด ์žˆ๋‹ค.
  • SQL ๋ฌธ๋ฒ•์„ ์ถ”๊ฐ€๋กœ ๊ณต๋ถ€ํ•˜์ง€ ์•Š์œผ๋ฉด DB ์ž‘์—…์„ ์ˆ˜์›”ํ•˜๊ฒŒ ํ•  ์ˆ˜ ์—†๋‹ค.

๐Ÿค” JDBC๋ฅผ ์œ ์—ฐํ•˜๊ฒŒ ๋‹ค๋ฃจ๊ธฐ ์œ„ํ•œ ํŒ

  • Connection Pool
    • ๊ธฐ์กด ์—ฐ๊ฒฐ์„ ์žฌ์‚ฌ์šฉํ•ด์„œ ์„ฑ๋Šฅ์„ ๋†’์ด๊ณ  ๊ฐœ๋ฐœ ๋น„์šฉ์„ ์ค„์ธ๋‹ค.
  • PreparedStatement
    • ์„ฑ๋Šฅ์ตœ์ ํ™” ๋ฐ SQL injection์˜ ๋ฐฉ์ง€๋ฅผ ํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๋ฐ›๋Š” ๊ฒƒ๋„ ๊ฐ€๋Šฅํ•˜๋‹ค.

์ฐธ๊ณ ) OpenAI. (2024).ChatGPT(4o)[Large language model].https://chatgpt.com/

profile
๊ธฐ๋ก

0๊ฐœ์˜ ๋Œ“๊ธ€