JDBC(Java Database Connectivity)

์ž๋ฐ”์—์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ ‘์†ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ์ž๋ฐ” API๋กœ, Java๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์—ฐ๊ฒฐ ๋ฐ ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ œ๊ณตํ•œ๋‹ค.

์ธํ„ฐํŽ˜์ด์Šค/๊ฐœ๋…์„ค๋ช…์‚ฌ์šฉ๋˜๋Š” ํด๋ž˜์Šค/๋ฉ”์„œ๋“œ

java.sql.Connection

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€์˜ ์—ฐ๊ฒฐ์„ ๋‚˜ํƒ€๋‚ด๋Š” ์ธํ„ฐํŽ˜์ด์Šค, ์—ฐ๊ฒฐ ์ •๋ณด ๋ฐ ๊ด€๋ฆฌ ๋‹ด๋‹น

java.sql.DriverManager (์—ฐ๊ฒฐ ์–ป๊ธฐ), Connection ์ธํ„ฐํŽ˜์ด์Šค ๋ฉ”์„œ๋“œ (์—ฐ๊ฒฐ ๊ด€๋ฆฌ)

java.sql.Statement

SQL ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ๊ฒฐ๊ณผ๋ฅผ ๋ฐ›์•„์˜ค๋Š” ์—ญํ• ์„ ํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค

Connection.createStatement(), Statement ์ธํ„ฐํŽ˜์ด์Šค ๋ฉ”์„œ๋“œ (์ฟผ๋ฆฌ ์‹คํ–‰ ๋ฐ ์„ค์ •)

java.sql.ResultSet

SQL ์ฟผ๋ฆฌ์˜ ์‹คํ–‰ ๊ฒฐ๊ณผ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ธํ„ฐํŽ˜์ด์Šค

Statement.executeQuery(), ResultSet ์ธํ„ฐํŽ˜์ด์Šค ๋ฉ”์„œ๋“œ (๊ฒฐ๊ณผ ์ฒ˜๋ฆฌ)

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

ํŠน์ • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ฒค๋”์—์„œ ์ œ๊ณตํ•˜๋Š” JDBC ๋“œ๋ผ์ด๋ฒ„ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

๋ฒค๋”๋ณ„ JDBC ๋“œ๋ผ์ด๋ฒ„ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ (์˜ˆ: Oracle JDBC ๋“œ๋ผ์ด๋ฒ„, MySQL JDBC ๋“œ๋ผ์ด๋ฒ„ ๋“ฑ)

์œ„์˜ ์„ธ ๊ฐœ์˜ ์ธํ„ฐํŽ˜์ด์Šค์™€ JDBC ๋“œ๋ผ์ด๋ฒ„๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ DB์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.

JDBC Flow

๋‹จ๊ณ„์„ค๋ช…์‚ฌ์šฉ ํด๋ž˜์Šค/๋ฉ”์„œ๋“œ

1. Get Connection

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์—ฐ๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ์—ฐ๊ฒฐ ์ •๋ณด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ DriverManager ํด๋ž˜์Šค๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ

java.sql.Connection ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” DriverManager.getConnection() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Connection ๊ฐ์ฒด ์ƒ์„ฑ

2. Create Statement

Connection ๊ฐ์ฒด๋กœ๋ถ€ํ„ฐ SQL ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•œ Statement ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑ

java.sql.Statement ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” Connection.createStatement() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Statement ๊ฐ์ฒด ์ƒ์„ฑ

3. Configure Statement

์ƒ์„ฑ๋œ Statement ๊ฐ์ฒด์— ์‹คํ–‰ํ•˜๋ ค๋Š” SQL ์ฟผ๋ฆฌ๋ฅผ ์„ค์ • (๋ณดํ†ต PreparedStatement ์‚ฌ์šฉ)

java.sql.PreparedStatement ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ PreparedStatement ๊ฐ์ฒด ์ƒ์„ฑ ๋ฐ ๋งค๊ฐœ๋ณ€์ˆ˜ ์„ค์ •

4. Execute Statement

๊ตฌ์„ฑ๋œ SQL ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰

- executeQuery(): SELECT ๋ฌธ์„ ์‹คํ–‰ํ•˜๊ณ  ๊ฒฐ๊ณผ๋ฅผ ResultSet ๊ฐ์ฒด๋กœ ๋ฐ˜ํ™˜ - executeUpdate(): INSERT, UPDATE, DELETE ๋“ฑ์˜ ๋ฐ์ดํ„ฐ ์กฐ์ž‘ ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ์˜ํ–ฅ์„ ๋ฐ›์€ ํ–‰์˜ ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜

5. Handle Warning

SQL ์ฟผ๋ฆฌ ์‹คํ–‰ ์ค‘์— ๋ฐœ์ƒํ•œ ๊ฒฝ๊ณ ๋‚˜ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ

- try-catch ๋ธ”๋ก์„ ์‚ฌ์šฉํ•˜์—ฌ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ

6. Return Result

์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•œ ๊ฒฐ๊ณผ ๋ฐ์ดํ„ฐ ๋ฐ˜ํ™˜

- ResultSet ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฒฐ๊ณผ๋ฅผ ๊ฒ€์ƒ‰ ๋ฐ ์ฒ˜๋ฆฌ

7. Close Statement

์ž‘์—…์ด ์™„๋ฃŒ๋˜๋ฉด ์‚ฌ์šฉํ•œ Statement ๊ฐ์ฒด๋ฅผ Statement.close() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ช…์‹œ์ ์œผ๋กœ ๋‹ซ์•„ ์ž์› ํ•ด์ œ

java.sql.Statement ์ธํ„ฐํŽ˜์ด์Šค์˜ close() ๋ฉ”์„œ๋“œ

8. Close Connection

๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ž‘์—… ์™„๋ฃŒ ํ›„ Connection ๊ฐ์ฒด๋ฅผ Connection.close() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ช…์‹œ์ ์œผ๋กœ ๋‹ซ์•„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ ์ž์›์„ ํ•ด์ œ ํ›„ ์—ฐ๊ฒฐ์„ ์ข…๋ฃŒ

java.sql.Connection ์ธํ„ฐํŽ˜์ด์Šค์˜ close() ๋ฉ”์„œ๋“œ

๊ต‰์žฅํžˆ ๋งŽ์€ ๊ณผ์ •์„ ํ•„์š”๋กœ ํ•˜์ง€๋งŒ JdbcTemplate๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ด๋Ÿฌํ•œ ๊ณผ์ •์„ ๋Œ€์‹  ์ฒ˜๋ฆฌํ•ด์ฃผ์–ด ํŽธ๋ฆฌํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

JDBC์˜ ์‚ฌ์šฉ

JDBC์™€ JdbcTemplate๋Š” ์ด๋ฏธ ์—ฌ๋Ÿฌ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ด์ฃผ๊ณ  ํŽธ๋ฆฌํ•จ์„ ์ œ๊ณตํ•ด์ฃผ์—ˆ์ง€๋งŒ, ์ตœ๊ทผ์—๋Š” ์ง์ ‘ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค๋Š” SQL Mapper๋‚˜ ORM์„ ๊ฒฐํ•ฉํ•˜์—ฌ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค.

  • SQL Mapper

    • ์žฅ์ 

      • SQL ์‘๋‹ต ๊ฒฐ๊ณผ๋ฅผ ๊ฐ์ฒด๋กœ ํŽธ๋ฆฌํ•˜๊ฒŒ ๋ณ€ํ™˜

      • JDBC์˜ ๋ฐ˜๋ณต ์ฝ”๋“œ๋ฅผ ์ œ๊ฑฐ

    • ๋‹จ์ 

      • ๊ฐœ๋ฐœ์ž๊ฐ€ SQL์„ ์ง์ ‘ ์ž‘์„ฑ

    • ๋Œ€ํ‘œ ๊ธฐ์ˆ : ์Šคํ”„๋ง JdbcTemplate, MyBatis

  • ORM

    • ์žฅ์ 

      • ๊ฐ์ฒด์™€ RDB์˜ ํŒจ๋Ÿฌ๋‹ค์ž„ ๋ถˆ์ผ์น˜ ํ•ด๊ฒฐ

      • ์ƒ์‚ฐ์„ฑ

      • ์œ ์ง€๋ณด์ˆ˜

    • ๋‹จ์ 

      • ํ•™์Šต๋น„์šฉ

      • ์ž˜๋ชป ์‚ฌ์šฉํ•˜๋ฉด ์„ฑ๋Šฅ ์ด์Šˆ

    • JPA๋Š” ์ž๋ฐ” ์ง„์˜์˜ ORM ํ‘œ์ค€ ์ธํ„ฐํŽ˜์ด์Šค

    • ๋Œ€ํ‘œ ๊ธฐ์ˆ : JPA, ํ•˜์ด๋ฒ„๋„ค์ดํŠธ, ์ดํด๋ฆฝ์Šค๋งํฌ

์ฐธ๊ณ ์ž๋ฃŒ

Last updated