DB & SQL

JDBC Driver์€ Java Application๊ณผ DB์˜ ์ค‘๊ฐ„๋‹ค๋ฆฌ ์—ญํ• ์„ ํ•œ๋‹ค.

devJK93 2024. 12. 5.

 

๐Ÿ“ JDBC ๋“œ๋ผ์ด๋ฒ„๋ž€ ๋ฌด์—‡์ธ๊ฐ€?

JDBC ๋“œ๋ผ์ด๋ฒ„๋Š” Java ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ์ƒํ˜ธ์ž‘์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๋•๋Š” ์ค‘๊ฐ„ ๋‹ค๋ฆฌ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.

1. JDBC๋ž€ ๋ฌด์—‡์ธ๊ฐ€?

JDBC(Java Database Connectivity)๋Š” Java์—์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ์ƒํ˜ธ์ž‘์šฉํ•˜๊ธฐ ์œ„ํ•œ ํ‘œ์ค€ API์ž…๋‹ˆ๋‹ค. Java ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ JDBC API๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋ช…๋ น(SQL)์„ ๋ณด๋‚ด๊ณ , ๊ฒฐ๊ณผ๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ JDBC API๋Š” ํ‘œ์ค€ ์ธํ„ฐํŽ˜์ด์Šค์ด๊ธฐ ๋•Œ๋ฌธ์—, ์‹ค์ œ๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ํ†ต์‹ ํ•˜๋ ค๋ฉด ๊ฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋งž๋Š” ๊ตฌ์ฒด์ ์ธ ๊ตฌํ˜„(๋“œ๋ผ์ด๋ฒ„)์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ JDBC ๋“œ๋ผ์ด๋ฒ„๊ฐ€ ๋‹ด๋‹นํ•ฉ๋‹ˆ๋‹ค.

2. JDBC ๋“œ๋ผ์ด๋ฒ„์˜ ์—ญํ• 

JDBC ๋“œ๋ผ์ด๋ฒ„๋Š” Java ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ํŠน์ • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ฐ„์˜ ํ†ต์‹ ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๋Š” ๊ตฌํ˜„์ฒด์ž…๋‹ˆ๋‹ค.

JDBC ๋“œ๋ผ์ด๋ฒ„๊ฐ€ ํ•˜๋Š” ์ผ:

  • JDBC API ํ˜ธ์ถœ ์ฒ˜๋ฆฌ: Java ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ํ˜ธ์ถœํ•œ JDBC ๋ฉ”์„œ๋“œ(e.g., Connection, Statement, ResultSet)๋ฅผ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
  • SQL ๋ช…๋ น ์ „๋‹ฌ: JDBC ๋“œ๋ผ์ด๋ฒ„๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์ž‘์„ฑํ•œ SQL ๋ช…๋ น์„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋„ค์ดํ‹ฐ๋ธŒ ํ”„๋กœํ† ์ฝœ๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  • ๊ฒฐ๊ณผ ๋ณ€ํ™˜: ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ๋ฐ˜ํ™˜๋œ ๊ฒฐ๊ณผ๋ฅผ Java์—์„œ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ํ˜•ํƒœ๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ: SQL ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ → ResultSet.
  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ ๊ด€๋ฆฌ: ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์—ฐ๊ฒฐํ•˜๊ณ  ์—ฐ๊ฒฐ์„ ์ข…๋ฃŒํ•˜๋Š” ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

3. ์™œ JDBC ๋“œ๋ผ์ด๋ฒ„๊ฐ€ ํ•„์š”ํ•œ๊ฐ€?

3.1. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋งˆ๋‹ค ๋‹ค๋ฅธ ํ”„๋กœํ† ์ฝœ

๊ฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค(MySQL, PostgreSQL, Oracle, H2 ๋“ฑ)๋Š” ์„œ๋กœ ๋‹ค๋ฅธ ๋ฐฉ์‹์œผ๋กœ ๋ช…๋ น์„ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค:

  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ณ„๋กœ ๊ณ ์œ ํ•œ ํ”„๋กœํ† ์ฝœ, ๋ช…๋ น์–ด, ๋„คํŠธ์›Œํฌ ๋ฉ”์‹œ์ง€๊ฐ€ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.
  • Java ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์ด๋Ÿฌํ•œ ๋ชจ๋“  ์š”๊ตฌ์‚ฌํ•ญ์„ ์ง์ ‘ ์ฒ˜๋ฆฌํ•˜๋ ค๋ฉด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ณ„๋กœ ๋ณ„๋„์˜ ๊ตฌํ˜„์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

3.2. JDBC ๋“œ๋ผ์ด๋ฒ„์˜ ์ค‘๊ฐ„ ์—ญํ• 

JDBC ๋“œ๋ผ์ด๋ฒ„๋Š” Java ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‚ฌ์ด์˜ ์ถ”์ƒํ™” ๊ณ„์ธต์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค:

  • Java ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ JDBC API๋ฅผ ์‚ฌ์šฉํ•ด ํ‘œ์ค€ํ™”๋œ ๋ฐฉ์‹์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋ช…๋ น์„ ๋ณด๋ƒ…๋‹ˆ๋‹ค.
  • JDBC ๋“œ๋ผ์ด๋ฒ„๊ฐ€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋งž๋Š” ํ˜•์‹์œผ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ๋ช…๋ น์„ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.

4. JDBC ๋™์ž‘ ์›๋ฆฌ

JDBC ๋“œ๋ผ์ด๋ฒ„๊ฐ€ ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•˜๋Š”์ง€ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด, Java ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ํ†ต์‹ ํ•˜๋Š” ๊ณผ์ •์„ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค:

  1. ๋“œ๋ผ์ด๋ฒ„ ๋กœ๋“œ: JDBC ๋“œ๋ผ์ด๋ฒ„๋ฅผ ๋กœ๋“œํ•˜์—ฌ Java์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๋งŒ๋“ญ๋‹ˆ๋‹ค. ์˜ˆ: Class.forName("org.h2.Driver");.
  2. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ: DriverManager๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  3. SQL ๋ช…๋ น ์‹คํ–‰: Connection ๊ฐ์ฒด์—์„œ Statement๋‚˜ PreparedStatement๋ฅผ ์ƒ์„ฑํ•˜์—ฌ SQL ๋ช…๋ น์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  4. ๊ฒฐ๊ณผ ์ฒ˜๋ฆฌ: ResultSet ๊ฐ์ฒด๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๊ฒฐ๊ณผ๋ฅผ Java ์ฝ”๋“œ์—์„œ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
  5. ์—ฐ๊ฒฐ ์ข…๋ฃŒ: Connection.close()๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ์„ ์ข…๋ฃŒํ•ฉ๋‹ˆ๋‹ค.

5. JDBC ๋“œ๋ผ์ด๋ฒ„๊ฐ€ ์ค‘์š”ํ•œ ์ด์œ 

JDBC ๋“œ๋ผ์ด๋ฒ„๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ณ„๋กœ ๊ณ ์œ ํ•œ ๊ตฌํ˜„์„ ์‹ ๊ฒฝ ์“ฐ์ง€ ์•Š๊ณ , JDBC API๋ฅผ ํ†ตํ•ด ๋™์ผํ•œ ๋ฐฉ์‹์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ค๋‹ˆ๋‹ค.

์˜ˆ:

  • MySQL์„ ์‚ฌ์šฉํ•˜๋‹ค๊ฐ€ H2 Database๋กœ ๋ฐ”๊พธ๊ณ  ์‹ถ์„ ๋•Œ: ๋“œ๋ผ์ด๋ฒ„๋งŒ ๋ณ€๊ฒฝํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.
  • SQL ๋ช…๋ น๊ณผ JDBC API ํ˜ธ์ถœ์€ ๊ทธ๋Œ€๋กœ ์œ ์ง€๋ฉ๋‹ˆ๋‹ค.

6. JDBC ๋“œ๋ผ์ด๋ฒ„์˜ ์ข…๋ฅ˜

JDBC ๋“œ๋ผ์ด๋ฒ„๋Š” ๊ตฌํ˜„ ๋ฐฉ์‹์— ๋”ฐ๋ผ 4๊ฐ€์ง€ ์œ ํ˜•์œผ๋กœ ๋ถ„๋ฅ˜๋ฉ๋‹ˆ๋‹ค:

  1. Type 1: JDBC-ODBC ๋ธŒ๋ฆฟ์ง€ ๋“œ๋ผ์ด๋ฒ„ (๊ตฌํ˜•, ์ž˜ ์‚ฌ์šฉ๋˜์ง€ ์•Š์Œ)
  2. Type 2: ๋„ค์ดํ‹ฐ๋ธŒ API ๋“œ๋ผ์ด๋ฒ„ (ํ”Œ๋žซํผ ์˜์กด์ )
  3. Type 3: ๋„คํŠธ์›Œํฌ ํ”„๋กœํ† ์ฝœ ๋“œ๋ผ์ด๋ฒ„ (๋ฏธ๋“ค์›จ์–ด ์„œ๋ฒ„ ์‚ฌ์šฉ)
  4. Type 4: ๋„ค์ดํ‹ฐ๋ธŒ ํ”„๋กœํ† ์ฝœ ๋“œ๋ผ์ด๋ฒ„ (Pure Java, ๊ฐ€์žฅ ๋„๋ฆฌ ์‚ฌ์šฉ๋จ)

7. ๊ฒฐ๋ก 

JDBC ๋“œ๋ผ์ด๋ฒ„๋Š”:

  • Java ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ฐ„์˜ ํ†ต์‹ ์„ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ณ„๋กœ ๋‹ฌ๋ผ์ง€๋Š” ํ”„๋กœํ† ์ฝœ ๋ฐ ์š”๊ตฌ์‚ฌํ•ญ์„ ๊ฐ์ถฅ๋‹ˆ๋‹ค.
  • ๊ฐœ๋ฐœ์ž๊ฐ€ JDBC API์—๋งŒ ์˜์กดํ•ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ž‘์—…์„ ์‰ฝ๊ฒŒ ์ˆ˜ํ–‰ํ•˜๋„๋ก ๋•์Šต๋‹ˆ๋‹ค.

์ฆ‰, JDBC ๋“œ๋ผ์ด๋ฒ„๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ Java ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ํ†ต์—ญ์‚ฌ ์—ญํ• ์„ ํ•˜๋ฉฐ, ์ด ๋•๋ถ„์— ๊ฐœ๋ฐœ์ž๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ณ„ ์„ธ๋ถ€์‚ฌํ•ญ์„ ๊ฑฑ์ •ํ•˜์ง€ ์•Š์•„๋„ ๋ฉ๋‹ˆ๋‹ค.

๋Œ“๊ธ€