๐Ÿ—„๏ธ Backend/Java

์ž๋ฐ”(Java) - JDBC(Oracle) : ์ด๋ก (?)

kongmi 2023. 2. 27. 21:05

JDBC

  • Java ์–ธ์–ด๋ฅผ ์ด์šฉํ•ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•œ API
  • JDBC๋ฅผ ์ด์šฉํ•˜์—ฌ Java ์–ธ์–ด๋ฅผ ์ด์šฉํ•ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ ‘์†ํ•˜๊ณ  SQL๋ฌธ์„ ์ด์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฒ€์ƒ‰ํ•˜๊ฑฐ๋‚˜ ์ˆ˜์ •
  • JDBC API ์ด์šฉ์‹œ DBMS ์ข…๋ฅ˜์— ์ƒ๊ด€์—†์ด ํ•˜๋‚˜์˜ ๋ฐฉ๋ฒ•์œผ๋กœ ์ž‘์—… ์ง„ํ–‰ ๊ฐ€๋Šฅ

JDBC ์‚ฌ์šฉ ๊ฐ์ฒด

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

๐Ÿ“Œ ๋ฐ์ดํ„ฐ ์›๋ณธ์— JDBC ๋“œ๋ผ์ด๋ฒ„๋ฅผ ํ†ตํ•˜์—ฌ ์ปค๋„ฅ์…˜์„ ๋งŒ๋“œ๋Š” ์—ญํ• 

๐Ÿ“Œ Class.forName() ๋ฉ”์†Œ๋“œ๋ฅผ  ํ†ตํ•ด ์ƒ์„ฑ๋˜๋ฉฐ ๋ฐ˜๋“œ์‹œ ์˜ˆ์™ธ์ฒ˜๋ฆฌ ํ•ด์•ผํ•จ.

๐Ÿ“Œ ์ง์ ‘ ๊ฐ์ฒด ์ƒ์„ฑ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๊ณ  getConnection() ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•จ.

  • Class.forName() : ์‚ฌ์šฉํ•˜๊ณ ์ž ํ•˜๋Š” JDBC ๋“œ๋ผ์ด๋ฒ„๋ฅผ ์ง€์ •, ํ•ด๋‹น ๋“œ๋ผ์ด๋ฒ„ ๋‚ด๋ถ€์— ์žˆ๋Š” ํด๋ž˜์Šค๋“ค์„ ๋ฉ”๋ชจ๋ฆฌ์— ๋กœ๋“œ

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค(D/B) ์—ฐ๊ฒฐ

  • ํŠน์ • ๋ฐ์ดํ„ฐ ์›๋ณธ๊ณผ ์—ฐ๊ฒฐ๋œ ์ปค๋„ฅ์…˜์„ ๋‚˜ํƒ€๋‚ด๋ฉฐ Statement ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ๋•Œ๋„ Connection์„ ์‚ฌ์šฉํ•˜์—ฌ createStatement() ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ์ƒ์„ฑ
  • SQL ๋ฌธ์žฅ์„ ์‹คํ–‰์‹œํ‚ค๊ธฐ ์ „์— ์šฐ์„  Connection ๊ฐ์ฒด๊ฐ€ ์žˆ์–ด์•ผ ํ•จ!

SQL๋ฌธ ์ฒ˜๋ฆฌ

  • SQL๋ฌธ์€ Statement๋‚˜ PreparedStatement ๊ฐ์ฒด๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ „๋‹ฌ
  • Statement๋Š” ์ •์ ์ธ SQL๋ฌธ์„ ์ฒ˜๋ฆฌํ•˜๋ฉฐ, PreparedStatement๋Š” ๋™์ ์ธ SQL๋ฌธ์„ ์ฒ˜๋ฆฌํ•จ
  • SQL๋ฌธ์„ ์ฒ˜๋ฆฌํ•˜๋ฉด ๊ฒฐ๊ณผ๊ฐ’์„ ResultSet ๊ฐ์ฒด์— ์ €์žฅํ•˜๊ฑฐ๋‚˜, ์˜ํ–ฅ์„ ๋ฐ›์€ ๋ ˆ์ฝ”๋“œ ์ˆ˜ ๋ฐ˜ํ™˜

์—ฐ๊ฒฐ ์ข…๋ฃŒ

๐Ÿ“Œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ž‘์—…์ด ๋๋‚˜๋ฉด ์—ฐ๊ฒฐ ์ข…๋ฃŒํ•ด์ค˜์•ผ ํ•จ.

JDBC ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ณผ์ •

  • JDBC ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ์ž๋ฐ”์—์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๋™ ํ”„๋กœ๊ทธ๋žจ์„ ๊ฐœ๋ฐœํ•˜๋Š” ๊ฒƒ
  • ์›น ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์ผ๋ฐ˜ ์ž๋ฐ” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๋™์ผํ•˜๊ฒŒ ์‚ฌ์šฉ ๊ฐ€

JDBC ๋“œ๋ผ์ด๋ฒ„ ์„ค์น˜

https://www.oracle.com/kr/database/technologies/appdev/jdbc-downloads.html

 

JDBC and UCP Downloads page | Oracle ๋Œ€ํ•œ๋ฏผ๊ตญ

์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ๊ฒ€์ƒ‰ ๋‚ด์šฉ๊ณผ ์ผ์น˜ํ•˜๋Š” ํ•ญ๋ชฉ์„ ์ฐพ์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค. ์›ํ•˜์‹œ๋Š” ์ •๋ณด๋ฅผ ์ฐพ๋Š” ๋ฐ ๋„์›€์ด ๋˜๋„๋ก ๋‹ค์Œ์„ ์‹œ๋„ํ•ด ๋ณด์‹ญ์‹œ์˜ค. ๊ฒ€์ƒ‰์— ์‚ฌ์šฉํ•˜์‹  ํ‚ค์›Œ๋“œ์˜ ์ฒ ์ž๊ฐ€ ์˜ฌ๋ฐ”๋ฅธ์ง€ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค. ์ž…๋ ฅ

www.oracle.com

ojdbc11.jar ์„ค์น˜

๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ


๐Ÿ’ก์ธํ…”๋ฆฌ์ œ์ด ๊ธฐ์ค€

File - Project Structure - Project Settings - Libraries - + ์„ ํƒ - ojdbc11 ์ถ”๊ฐ€ - Apply - OK


์œ„ ๊ณผ์ •์ฒ˜๋Ÿผ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ถ”๊ฐ€ํ•ด์•ผ Connection ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Connection ๊ฐ์ฒด๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์—ฐ๊ฒฐํ•ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๋Š” ๊ฐ์ฒด ์ž…๋‹ˆ๋‹ค.

DriverManager ํด๋ž˜์Šค์˜ getConnection() ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ์‚ฌ์šฉ

Connection ๊ฐ์ฒด ์–ป๊ธฐ

final static String ORACLE_URL = "jdbc:oracle:thin:@localhost:1521:xe";
final static String ORACLE_ID = "[์—ฐ๊ฒฐํ•  DB๊ณ„์ • ID]";
final static String ORACLE_PWD = "[์—ฐ๊ฒฐํ•  DB๊ณ„์ • PW]";
Connection conn = null; // Connection์€ ์˜ˆ์™ธ์ฒ˜๋ฆฌ ํ•ด์ค˜์•ผ ํ•จ.
conn = DriverManager.getConnection(ORACLE_URL, ORACLE_ID, ORACLE_PWD);

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ ๋Š๊ธฐ

conn.close();

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ž‘์—…

  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ์„ ํ•œ ํ›„ ์‹ค์ œ SQL๋ฌธ์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด์„œ Statement ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑ
  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ์— ์‚ฌ์šฉํ•œ conn ๊ฐ์ฒด๋ฅผ ํ†ตํ•ด createStatement() ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•ด Statement ๊ฐ์ฒด๋ฅผ ์–ป์–ด์˜ฌ ์ˆ˜ ์žˆ์Œ

Statement ๋ฉ”์†Œ๋“œ

๋ฉ”์†Œ๋“œ ์„ค๋ช…
executeQuery select๋ฌธ๊ณผ ๊ฐ™์ด ๊ฒฐ๊ณผ๊ฐ’์ด ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ ˆ์ฝ”๋“œ๋กœ ๋ฐ˜ํ™˜๋˜๋Š” ๊ฒฝ์šฐ ์‚ฌ์šฉ
executeUpdate insert, update, delete๋ฌธ๊ณผ ๊ฐ™์ด ํ…Œ์ด๋ธ” ๋‚ด์—์„œ ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ ํ›„ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒฐ๊ณผ ๊ฐ’์ด ํ–‰์˜ ๊ฐœ์ˆ˜์ธ ๊ฒฝ์šฐ ์‚ฌ์šฉ

ResultSet ๋ฉ”์†Œ๋“œ

๋ฉ”์†Œ๋“œ ์„ค๋ช…
next() ํ˜„์žฌ ํ–‰์—์„œ ํ•œ ํ–‰ ์•ž์œผ๋กœ ์ด๋™
previouse() ํ˜„์žฌ ํ–‰์—์„œ ํ•œ ํ–‰ ๋’ค๋กœ ์ด
first() ์ฒซ ๋ฒˆ์งธ ํ–‰์œผ๋กœ ์ด๋™
last() ๋งˆ์ง€๋ง‰ ํ–‰์œผ๋กœ ์ด๋™

PreparedStatement

Statement ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ด์šฉํ•ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ์—ฐ๋™ํ•  ๊ฒฝ์šฐ ์—ฐ๋™ํ•  ๋•Œ๋งˆ๋‹ค DBMS์—์„œ ๋‹ค์‹œ SQL๋ฌธ์„ ์ปดํŒŒ์ผ ํ•ด์•ผ ํ•˜๋ฏ€๋กœ ์†๋„๊ฐ€ ๋А๋ ค์ง€๋Š” ๋‹จ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

 

์ด๋Ÿด ๊ฒฝ์šฐ PreparedStatement ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด SQL๋ฌธ์„ ๋ฏธ๋ฆฌ ์ปดํŒŒ์ผํ•ด์„œ ์žฌ์‚ฌ์šฉํ•˜๋ฏ€๋กœ Statement ์ธํ„ฐํŽ˜์ด์Šค๋ณด๋‹ค ํ›จ์”ฌ ๋น ๋ฅด๊ฒŒ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • PreparedStatement ์ธํ„ฐํŽ˜์ด์Šค๋Š” Statement ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ƒ์†ํ•˜๋ฏ๋กœ ์ง€๊ธˆ๊นŒ์ง€ ์‚ฌ์šฉํ•œ ๋ฉ”์†Œ๋“œ๋ฅผ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • Statement ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ DBMS์— ์ „๋‹ฌํ•˜๋Š” SQL๋ฌธ์€ ๋‹จ์ˆœํ•œ ๋ฌธ์ž์—ด์ด๋ฏ€๋กœ DBMS๋Š” ์ด ๋ฌธ์ž์—ด์„ DBMS๊ฐ€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋„๋ก ์ปดํŒŒ์ผํ•˜๊ณ  ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๋ฐ˜๋ฉด์— PreparedStatement ์ธํ„ฐํŽ˜์ด์Šค๋Š” ์ปดํŒŒ์ผ๋œ SQL๋ฌธ์„ DBMS์— ์ „๋‹ฌํ•˜์—ฌ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ ์‹œํ‚ต๋‹ˆ๋‹ค.

* 2.28 ์ˆ˜์—… ํ›„ ์ถ”๊ฐ€ ์˜ˆ์ •

VO(Value Object)

  • VO๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ๊ฐ€์ ธ์˜จ ๋ ˆ์ฝ”๋“œ๋ฅผ ์ž๋ฐ” ๊ฐ์ฒด๋กœ ๋งคํ•‘ํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
  • VO ๊ฐ์ฒด๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ…Œ์ด๋ธ”์˜ ๊ฐ ์ปฌ๋Ÿผ์— ํ•ด๋‹นํ•˜๋Š” ๋ฉค๋ฒ„ ๋ณ€์ˆ˜๋ฅผ ๊ฐ–์Šต๋‹ˆ๋‹ค.
  • VO ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ๊ฐ€์ ธ์˜จ ๋ ˆ์ฝ”๋“œ๋ฅผ ๊ฐ์ฒดํ™”ํ•˜์—ฌ ๋‹ค์–‘ํ•œ ์ฒ˜๋ฆฌ๋ฅผ ์ˆ˜ํ–‰ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

DAO(Database Access Object)

  • DAO๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ ‘๊ทผํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•˜๊ฑฐ๋‚˜ ์ˆ˜์ •ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ
  • DAO๋Š” VO ๊ฐ์ฒด์™€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ฐ„์˜ ๋งคํ•‘์„ ๋‹ด๋‹น, VO๊ฐ์ฒด๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๋ ˆ์ฝ”๋“œ๋ฅผ ์กฐํšŒํ•˜๊ฑฐ๋‚˜ ์ˆ˜์ •

Controller

  • ๋ชจ๋ธ(Model)๊ณผ ๋ทฐ(View) ์‚ฌ์ด์—์„œ ์‚ฌ์šฉ์ž ์ž…๋ ฅ์„ ์ฒ˜๋ฆฌํ•˜๊ณ , ๋ชจ๋ธ์—์„œ ์ „๋‹ฌ๋ฐ›์€ ๋ฐ์ดํ„ฐ๋ฅผ ๋ทฐ์— ์ „๋‹ฌํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ
  • ์ผ๋ฐ˜์ ์œผ๋กœ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ๋Š” ์‚ฌ์šฉ์ž์˜ HTTP ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ณ , ๊ทธ์— ๋”ฐ๋ฅธ ์‘๋‹ต์„ ์ƒ์„ฑํ•˜๋Š” ๋ฐ์— Controller ์‚ฌ์šฉ

์—ญํ• 

  1. ์š”์ฒญ ์ฒ˜๋ฆฌ
    Controller๋Š” ์‚ฌ์šฉ์ž์˜ ์š”์ฒญ์„ ์ฒ˜๋ฆฌ, HTTP ์š”์ฒญ์„ ๋ถ„์„ํ•˜๊ณ , ํ•ด๋‹น ์š”์ฒญ์— ๋Œ€ํ•œ ์ž‘์—… ์ˆ˜ํ–‰
  2. ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ์ฒ˜๋ฆฌ
    Controller๋Š” ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ์ฒ˜๋ฆฌ, Model์—๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ์š”์ฒญํ•˜๊ณ , ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜์—ฌ ์ ์ ˆํ•œ ๋ฐ์ดํ„ฐ๋ฅผ View์— ์ „๋‹ฌ
  3. ์‘๋‹ต์ƒ์„ฑ
    Controller๋Š” View์™€ ํ•จ๊ป˜ ์‚ฌ์šฉ์ž์—๊ฒŒ ์‘๋‹ต์„ ์ƒ์„ฑ, View์— ์ „๋‹ฌํ•  ๋ฐ์ดํ„ฐ๋ฅผ Model์—์„œ ๊ฐ€์ ธ์™€ View๋ฅผ ๋ Œ๋”๋งํ•˜๊ณ , ์ตœ์ข…์ ์œผ๋กœ HTTP ์‘๋‹ต์„ ์ƒ์„ฑ
  4. ๋ผ์šฐํŒ…
    Controller๋Š” URL์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ผ์šฐํŒ… ๊ธฐ๋Šฅ์„ ์ œ๊ณต
    URL์— ๋”ฐ๋ผ ํ•ด๋‹น Controller์˜ ๋™์ž‘์„ ์ˆ˜ํ–‰ํ•˜๋„๋ก ๋ผ์šฐํŒ…
  5. ์—๋Ÿฌ ์ฒ˜๋ฆฌ
    Controller๋Š” ์˜ˆ์™ธ ์ƒํ™ฉ์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ ์ˆ˜ํ–‰, ์š”์ฒญ์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ๊ฐ€ ์‹คํŒจํ•˜๋ฉด ํ•ด๋‹น ์˜ˆ์™ธ์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ ์ˆ˜ํ–‰