1) JDBC (Java Database Connectivity)
(1) JDBC๋
- Java ๊ธฐ๋ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅ ๋ฐ ์ ๋ฐ์ดํธํ๊ฑฐ๋, ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅ๋ ๋ฐ์ดํฐ๋ฅผ Java์์ ์ฌ์ฉํ ์ ์๋๋ก ํ๋ ์๋ฐ API์ด๋ค.
- JDBC๋ Java ์ ํ๋ฆฌ์ผ์ด์ ์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ๊ทผํ๊ธฐ ์ํด JDBC API๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฐ๋ํ ์ ์์ผ๋ฉฐ, ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์๋ฃ๋ฅผ ์ฟผ๋ฆฌ(Query)ํ๊ฑฐ๋ ์ ๋ฐ์ดํธํ๋ ๋ฐฉ๋ฒ์ ์ ๊ณตํ๋ค.
- ๋ํ, DBMS์ ์ข ๋ฅ์ ์๊ด์์ด ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฐ๊ฒฐํ๊ณ ์์ ์ ์ฒ๋ฆฌํ ์ ์๋ค.
(2) JDBC Architecture
- Java Application์์ JDBC API๋ฅผ ํธ์ถํ๋ฉด JDBC Driver Manager๊ฐ DB ์ ํ์ ๋ฐ๋ฅธ ๋๋ผ์ด๋ฒ๋ฅผ ์์ฑํ์ฌ JDBC API์ ๋ง๊ฒ ๋์ํ ์ ์๋๋ก ์ฒ๋ฆฌํ๋ค.
- ๋ฐ๋ผ์, ์ฌ์ฉํ๋ DB๋ฅผ ๋ฐ๊พธ๋๋ผ๋ JDBC API ๋ณ๊ฒฝ ์์ด (์ฆ, ์ฝ๋ ๋ณ๊ฒฝ ์์ด) JDBC ๋๋ผ์ด๋ฒ๋ง ๋ฐ๊ฟ์ฃผ๋ฉด ์ด๋ค ์ ํ์ DB๋ ์ฐ๊ฒฐํ ์ ์๊ณ JDBC API๋ java.sql ํจํค์ง์ ์๋ค.
(3) ์ฃผ์ ํด๋์ค ๋ฐ ์ธํฐํ์ด์ค in JDBC
โ Driver ์ธํฐํ์ด์ค (java.sql.Driver)
- DB์ ์ฐ๊ฒฐํ๋ DriverManager ํด๋์ค๋ฅผ ๋ง๋ค ๋, ๋ฐ๋์ ํ์ํ ์ธํฐํ์ด์ค๋ก ๊ฐ DBMS์ ๋ฒค๋์์ ํด๋น ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ๋๋ผ์ด๋ฒ๋ฅผ ์ ๊ณตํ๋ค.
โก DriverManager ํด๋์ค (java.sql.DriverManager)
- DBMS์ ๋ฒค๋์์ ์ ๊ณตํ๋ JDBC Driver๋ฅผ ์ด์ฉํ์ฌ DB ์ฐ๊ฒฐ์ ๋์์ฃผ๋ ํด๋์ค์ด๋ฉฐ, getConnection() ๋ฉ์๋๋ฅผ ์ด์ฉํด Connection ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ค.
โข Connection ์ธํฐํ์ด์ค (java.sql.Connection)
- ํน์ DB์ ์ฐ๊ฒฐ ์ ๋ณด๋ฅผ ๊ฐ์ง๋ ์ธํฐํ์ด์ค์ด๋ค.
โฃ Statement ์ธํฐํ์ด์ค (java.sql.Statement)
- SQL๋ฌธ์ DB์ ์ ์กํ๋ ๋ฐฉ๋ฒ์ ์ ์ํ ์ธํฐํ์ด์ค์ด๋ค.
โค PreparedStatement ์ธํฐํ์ด์ค (java.sql.PreparedStatement)
- Statement์ ํ์ ์ธํฐํ์ด์ค๋ก Statement์ ๋ฌ๋ฆฌ SQL๋ฌธ์ ๋ฏธ๋ฆฌ ์ปดํ์ผํ์ฌ ์คํ ์๋๋ฅผ ๋์ธ๋ค.
โฅ CallableStatement ์ธํฐํ์ด์ค (java.sql.CallableStatement)
- PreparedStatement์ ํ์ ์ธํฐํ์ด์ค๋ก PL/SQL์ ํธ์ถํ ๋ ์ฌ์ฉํ์ง๋ง ์ฑ๋ฅ ์ ์ด์๋ก ์ธํด ๊ฑฐ์ ์ฌ์ฉํ์ง ์๋๋ค.
โฆ ResultSet ์ธํฐํ์ด์ค (java.sql.ResultSet)
- SQL๋ฌธ์ ์คํ ๊ฒฐ๊ณผ๋ฅผ ์กฐํํ ์ ์๋ ๋ฐฉ๋ฒ์ ์ ์ํ ์ธํฐํ์ด์ค๋ก ๊ฐ๋จํ SQL๋ฌธ ๊ฒฐ๊ณผ๋ฅผ ์ ์ฅํ๋ ๊ฐ์ฒด๋ผ๊ณ ๋ณผ ์ ์๋ค.
(4) JDBC API ์ฌ์ฉ ํ๋ฆ [์ฝ๋ ๋ ๋ฒจ]
- Spring Data JDBC, Spring Data JPA ๋ฑ๊ณผ ๊ฐ์ ๊ธฐ์ ์ด ๋ฑ์ฅํ ์ง๊ธ JDBC API๋ฅผ ์ง์ ์ ์ผ๋ก ์ฌ์ฉํ๋ ์ผ์ ์ค์ด๋ค์์ผ๋ Spring Data JDBC, Spring Data JPA์ ๊ฐ์ ๊ธฐ์ ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฐ๋ํ๊ธฐ ์ํด ๋ด๋ถ์ ์ผ๋ก JDBC๋ฅผ ์ด์ฉํ๊ธฐ ๋๋ฌธ์ JDBC์ ๋์ ํ๋ฆ์ ๋ํด ์ ํ์๊ฐ ์๋ค.
- JDBC API์ ๊ตฌ์ฑ ์์๋ค์ ๋์ ํ๋ฆ์ ์๋์ ๊ฐ์ด 6๋จ๊ณ๋ก ์ด๋ฃจ์ด์ง๋ค.
โ JDBC ๋๋ผ์ด๋ฒ ๋ก๋
- ์ฌ์ฉํ๊ณ ์ ํ๋ JDBC ๋๋ผ์ด๋ฒ๋ฅผ ๋ก๋ฉํ๋ฉฐ, JDBC ๋๋ผ์ด๋ฒ๋ DriverManager ํด๋์ค๋ฅผ ํตํด ๋ก๋ฉ๋๋ค.
โก Connection ๊ฐ์ฒด ์์ฑ
- JDBC ๋๋ผ์ด๋ฒ๊ฐ ์ ์์ ์ผ๋ก ๋ก๋ฉ๋๋ฉด DriverManager๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฐ๊ฒฐ๋๋ ์ธ์ (Session)์ธ Connection ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ค.
โข Statement ๊ฐ์ฒด ์์ฑ
- Statement ๊ฐ์ฒด๋ ์์ฑ๋ SQL ์ฟผ๋ฆฌ๋ฌธ์ ์คํํ๊ธฐ ์ํ ๊ฐ์ฒด๋ก ์ ์ SQL ์ฟผ๋ฆฌ ๋ฌธ์์ด์ ์ ๋ ฅ์ผ๋ก ๊ฐ์ง๋ค.
โฃ Query ์คํ
- ์์ฑ๋ Statement ๊ฐ์ฒด๋ฅผ ์ด์ฉํ์ฌ ์ ๋ ฅํ SQL ์ฟผ๋ฆฌ๋ฅผ ์คํํ๋ค.
โค ResultSet ๊ฐ์ฒด๋ก๋ถํฐ ๋ฐ์ดํฐ ์กฐํ
- ์คํ๋ SQL ์ฟผ๋ฆฌ๋ฌธ์ ๋ํ ๊ฒฐ๊ณผ ๋ฐ์ดํฐ ์ ์ด๋ค.
โฅ ResultSet, Statement, Connection ๊ฐ์ฒด close()
- JDBC API๋ฅผ ํตํด ์ฌ์ฉ๋ ๊ฐ์ฒด๋ค์ ์์ฑ๋ ๊ฐ์ฒด๋ค์ ์ฌ์ฉํ ์์์ ์ญ์์ผ๋ก Close ํ๋ค.
[Reference]
- https://sowon-dev.github.io/2021/03/22/210323jpaVSjdbc/
- https://ittrue.tistory.com/250
- https://yoon990.tistory.com/58
- https://velog.io/@dyunge_100/DB-JDBC%EC%97%90-%EB%8C%80%ED%95%9C-%EC%A0%95%EB%A6%AC
๋ฐ์ํ
'๐จโ๐ป Back End > JDBC' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Synchrozied ํค์๋๋ฅผ ์ด์ฉํ ๋์์ฑ ์ด์ ํด๊ฒฐ (0) | 2023.08.28 |
---|---|
์ปค๋ฅ์ ํ์ด๋ (Connection Pool) (0) | 2023.08.28 |
Statement๋ณด๋ค PreparedStatement๋ฅผ ์ฌ์ฉํด์ผ ํ๋ ์ด์ (2) | 2023.08.27 |
JDBC์์ ์์ฃผ ์ฌ์ฉ๋๋ ๋ฉ์๋ ์ ๋ฆฌ (0) | 2023.08.26 |
JDBC๋ฅผ ์ด์ฉํ CRUD ์ค์ต (0) | 2023.08.26 |