JDBC(Java Database Connectivity)

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

์ธํ„ฐํŽ˜์ด์Šค/๊ฐœ๋…
์„ค๋ช…

java.sql.Connection

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€์˜ ์—ฐ๊ฒฐ(์„ธ์…˜)์„ ๋‚˜ํƒ€๋‚ด๋Š” ์ธํ„ฐํŽ˜์ด์Šค

java.sql.Statement

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

java.sql.PreparedStatement

๋ฏธ๋ฆฌ ์ปดํŒŒ์ผ๋œ SQL ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋กœ, Statement๋ฅผ ์ƒ์†

java.sql.ResultSet

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

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

ํŠน์ • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ฒค๋”์—์„œ ์ œ๊ณตํ•˜๋Š” JDBC ํ‘œ์ค€ ์ธํ„ฐํŽ˜์ด์Šค์˜ ๊ตฌํ˜„์ฒด

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๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ด๋Ÿฌํ•œ ๊ณผ์ •์„ ๋Œ€์‹  ์ฒ˜๋ฆฌํ•ด์ฃผ์–ด ํŽธ๋ฆฌํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

Statement / PreparedStatement

JDBC๋Š” SQL์„ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ์ธํ„ฐํŽ˜์ด์Šค๋กœ Statement์™€ PreparedStatement๋ฅผ ์ œ๊ณตํ•œ๋‹ค.

  • Statement: SQL ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ ์‹œ์ ์— ์ƒ์„ฑํ•˜๊ณ  ์‹คํ–‰ํ•˜๋Š” ๋ฐฉ์‹

  • PreparedStatement: SQL ์ฟผ๋ฆฌ์˜ ํ…œํ”Œ๋ฆฟ์„ ๋ฏธ๋ฆฌ ์ •์˜ํ•˜๊ณ , ์‹คํ–‰ ์‹œ์ ์— ํŒŒ๋ผ๋ฏธํ„ฐ๋งŒ ์ „๋‹ฌํ•˜์—ฌ ์‹คํ–‰ํ•˜๋Š” ๋ฐฉ์‹

    • ์„ฑ๋Šฅ: ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ์ „๋‹ฌ๋ฐ›์€ SQL ํ…œํ”Œ๋ฆฟ์„ ๋ฏธ๋ฆฌ ํŒŒ์‹ฑํ•˜๊ณ  ์ปดํŒŒ์ผํ•˜์—ฌ ์‹คํ–‰ ๊ณ„ํš์„ ์บ์‹ฑ

      • ์ดํ›„ ๋™์ผํ•œ ์ฟผ๋ฆฌ๊ฐ€ ํŒŒ๋ผ๋ฏธํ„ฐ๋งŒ ๋ฐ”๋€Œ์–ด ์š”์ฒญ๋˜๋ฉด ์บ์‹œ๋œ ์‹คํ–‰ ๊ณ„ํš์„ ์žฌ์‚ฌ์šฉํ•˜์—ฌ ์„ฑ๋Šฅ์ƒ ์ด์ ์„ ๊ฐ€์ง

    • ๋ณด์•ˆ: ํŒŒ๋ผ๋ฏธํ„ฐ ๋ฐ”์ธ๋”ฉ ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ํ†ตํ•ด SQL Injection ๊ณต๊ฒฉ์„ ์›์ฒœ์ ์œผ๋กœ ๋ฐฉ์ง€

    • ๊ฐ€๋…์„ฑ ๋ฐ ์œ ์ง€๋ณด์ˆ˜: SQL ์ฟผ๋ฆฌ์™€ ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ๋ถ„๋ฆฌ๋˜์–ด ์ฝ”๋“œ๊ฐ€ ๋” ๊น”๋”ํ•˜๊ณ  ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์šฉ์ด

JDBC ์‚ฌ์šฉ์˜ ๋ฌธ์ œ์ 

JDBC API๋ฅผ ์ง์ ‘ ์‚ฌ์šฉํ•˜๋ฉด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ์‹ค์šฉ์ ์ธ ๊ด€์ ์—์„œ ๋ช‡ ๊ฐ€์ง€ ๋ฌธ์ œ์ ์„ ๊ฐ€์ง„๋‹ค.

  • ๋ฐ˜๋ณต์ ์ธ ์ฝ”๋“œ: ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ, Statement ์ƒ์„ฑ, ResultSet ์ฒ˜๋ฆฌ, ๊ทธ๋ฆฌ๊ณ  ์—ฐ๊ฒฐ ๋ฐ ๋ฆฌ์†Œ์Šค ์ข…๋ฃŒ ๋“ฑ์˜ ๋ฐ˜๋ณต์ ์ธ ์ฝ”๋“œ ์ž‘์„ฑ ํ•„์š”

  • ๋ฆฌ์†Œ์Šค ๊ด€๋ฆฌ์˜ ๋ฒˆ๊ฑฐ๋กœ์›€: Connection, Statement, ResultSet ๋“ฑ์˜ ๋ฆฌ์†Œ์Šค์˜ ๋ช…์‹œ์  ๊ด€๋ฆฌ ํ•„์š”

  • ์˜ˆ์™ธ ์ฒ˜๋ฆฌ: JDBC๋Š” ๋Œ€๋ถ€๋ถ„์˜ ์˜ˆ์™ธ๋ฅผ SQLException์ด๋ผ๋Š” checked exception์œผ๋กœ ๋˜์ง€๋ฉฐ, ๋ฒค๋”๋ณ„๋กœ ๋‹ค๋ฅธ ์—๋Ÿฌ ์ฝ”๋“œ๋ฅผ ๊ฐ€์ง€๋ฏ€๋กœ ์ผ๊ด€๋œ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๊ฐ€ ์–ด๋ ค์›€

JDBC์˜ ์‚ฌ์šฉ

์ตœ๊ทผ์—๋Š” ์ง์ ‘ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค๋Š” SQL Mapper๋‚˜ ORM์„ ๊ฒฐํ•ฉํ•˜์—ฌ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค.

JDBC์— ์ ‘๊ทผํ•˜๋Š” ์—ฌ๋Ÿฌ ๋ฐฉ๋ฒ•

SQL Mapper์™€ ORM ๋น„๊ต

๊ธฐ์ˆ  ์œ ํ˜•
์žฅ์ 
๋‹จ์ 
๋Œ€ํ‘œ ๊ธฐ์ˆ 

SQL Mapper

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

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

์Šคํ”„๋ง JdbcTemplate, MyBatis

ORM

- ๊ฐ์ฒด์™€ RDB์˜ ํŒจ๋Ÿฌ๋‹ค์ž„ ๋ถˆ์ผ์น˜ ํ•ด๊ฒฐ - ์ƒ์‚ฐ์„ฑ - ์œ ์ง€๋ณด์ˆ˜

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

JPA(์ž๋ฐ” ์ง„์˜ ORM ํ‘œ์ค€ ์ธํ„ฐํŽ˜์ด์Šค), ํ•˜์ด๋ฒ„๋„ค์ดํŠธ, ์ดํด๋ฆฝ์Šค๋งํฌ

์ฐธ๊ณ ์ž๋ฃŒ

Last updated

Was this helpful?