์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- JavaScript
- ๋ฐฐ์์ ๋ฐฐ์
- ์ฝ๋ฉ
- ์ค๋ผํด
- ๋ฐ์ดํฐ๋ฒ ์ด์ค
- K๋ฐฐํฐ๋ฆฌ๋ ๋ณผ๋ฃจ์
- ํ์ด์ฌ
- ๊ฐ์ดํ ์ข ๋ญ๊ฐ๋น
- ๋ ์
- database
- ์ ๋ฆฌํธ๋ฆฌํธ
- ๋๊ฐ
- ๊น๋ฏธ๊ฒฝ์๋งํ์์
- Java
- ํ์ฒ์ ๋ฆฌํธ๋ฆฌํธ
- ์ค๋ธ์
- ์ฑ
- ๋ฐ์ํ
- ์นดํ๋๊ฐ
- ํฐ์คํ ๋ฆฌ์ฑ๋ฆฐ์ง
- css
- ์๋ฐ์คํฌ๋ฆฝํธ
- ์๋ฐ
- ์ํ์ฃผ
- html
- ํ๋ก๊ทธ๋๋ฐ
- ์นํผ๋ธ๋ฆฌ์ฑ
- ๊ฐ๋ฐ
- ์ํ
- Python
- Today
- Total
JiYoung Dev ๐ฅ
JDBC์ Spring JDBC ๊ธฐ๋ณธ ์ดํดํ๊ธฐ ๋ณธ๋ฌธ
JDBC(Java Database Connectivity)
JDBC๋ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅ๋ ๋ฐ์ดํฐ์ ์ ๊ทผ, ์กฐ์ํ ์ ์๊ฒ ํ๋ ์๋ฐ API์ด๋ค. ์๋ฐ ์์ฉ ํ๋ก๊ทธ๋จ์ด ๋ค์ํ DBMS์ ๋ํด ์ผ๊ด๋ API๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๊ฒฐ, ๊ฒ์, ์์ , ๊ด๋ฆฌ ๋ฑ์ ํ ์ ์๊ฒ ํ๋ค.
๋ฐ๋ผ์ ์๋ฐ๋ก ๊ฐ๋ฐ์์๋ DBMS ์ข ๋ฅ์ ๊ด๊ณ์์ด JDBC API๋ง์ ์ด์ฉํ๋ฉด ๋๋ค.
์ผ๋ฐ์ ์ผ๋ก DBMS๋ฅผ ์ ๊ณตํ๋ ํ์ฌ์์ JDBC ๋๋ผ์ด๋ฒ๋ฅผ ์ ๊ณตํ๋ฉฐ ์๋ฐ ์์ฉํ๋ก๊ทธ๋จ์์๋ JDBC ๋๋ผ์ด๋ฒ๋ฅผ JDBC ๋งค๋์ ๋ฅผ ํตํด ๋ก๋ํ์ฌ ์ฌ์ฉํ๋ค.
๋ฐ๋ผ์ ์ฌ์ฉํ๋ DBMS๊ฐ ๋ฐ๊ปด๋ ์ด์ ๋ฐ๋ฅธ JDBC ๋๋ผ์ด๋ฒ๋ง ๋ก๋ํ๋ฉด ๋๋ฏ๋ก ์๋ฐ ํ๋ก๊ทธ๋จ์๋ DBMS ๋ณ๊ฒฝ์ ๋ฐ๋ฅธ ํ๋ก๊ทธ๋จ ์์ ์ด ํ์ ์๋ค.
- JDBC ๋๋ผ์ด๋ธ ๋งค๋์ : ์๋ฐ API์์ ์ง์ํ๋ฉฐ DBMS๋ฅผ ์ ๊ทผํ ์ ์๋ JDBC ๋๋ผ์ด๋ฒ ๋ก๋
- JDBC ๋๋ผ์ด๋ฒ: DBMS๋ง๋ค ๊ณ ์ ํ JDBC ๋๋ผ์ด๋ฒ๋ฅผ ์ ๊ณตํ๋ฉฐ, JDBC ๋๋ผ์ด๋ฒ์ DBMS๋ ์ ์ฉ ํ๋กํ ์ฝ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฒ๋ฆฌ
JDBC์ ์ฃผ์ ์ญํ
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๊ฒฐ ๊ด๋ฆฌ
- SQL ์ฟผ๋ฆฌ ์คํ
- ๊ฒฐ๊ณผ ์ธํธ(ResultSet) ์ฒ๋ฆฌ
- ํธ๋์ญ์ ๊ด๋ฆฌ
JDBC API ๊ตฌ์ฑ
- DriverManager: ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๊ฒฐ ์ค์ ๋ฐ ๊ด๋ฆฌ
- Connection: ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ฐ๊ฒฐ์ ๋ํ๋
- Statement, PreparedStatement, CallableStatement: SQL ์คํ
- ResultSet: SQL ์คํ ๊ฒฐ๊ณผ ์ฒ๋ฆฌ
- SQLException: ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ด๋ จ ์์ธ ์ฒ๋ฆฌ
JDBC ๋๋ผ์ด๋ฒ
JDBC ๋๋ผ์ด๋ฒ๋ JDBC API๋ฅผ ๊ตฌํํ์ฌ Java ์ ํ๋ฆฌ์ผ์ด์ ์ด ํน์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํต์ ํ ์ ์๋๋ก ๋์์ฃผ๋ ์ํํธ์จ์ด์ด๋ค. ๊ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฒค๋์ฌ์์ ์์ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ง๋ JDBC ๋๋ผ์ด๋ฒ๋ฅผ ์ ๊ณตํ๋ค.
JDBC ๋๋ผ์ด๋ฒ ์ฃผ์ ์ญํ
- JDBC API ํธ์ถ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ์ดํดํ ์ ์๋ ๋ค์ดํฐ๋ธ ์ฝ๋๋ก ๋ณํ
- ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์๋ต์ Java ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ดํดํ ์ ์๋๋ก ๋ณํ
์ฃผ์ JDBC ๋๋ผ์ด๋ฒ
๋ฐ์ดํฐ๋ฒ ์ด์ค | JDBC ๋๋ผ์ด๋ฒ ์ด๋ฆ | ๋๋ผ์ด๋ฒ ํด๋์ค๋ช |
MySQL | MySQL Connector/J | com.mysql.cj.jdbc.Driver |
MariaDB | MariaDB Connector/J | org.mariadb.jdbc.Driver |
Oracle | Oracle JDBC Thin Driver | oracle.jdbc.OracleDriver |
PostgreSQL | PostgreSQL JDBC Driver | org.postgresql.Driver |
Microsofe SQL Server | Microsoft JDBC Driver for SQL Server | com.microsoft.sqlserver.jdbc.SQLServerDriver |
JDBC์ JDBC ๋๋ผ์ด๋ฒ์ ์ฐจ์ด
๊ตฌ๋ถ | JDBC | JDBC ๋๋ผ์ด๋ฒ |
์ญํ | ํ์ค API๋ก, ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ํธ์์ฉ ์ ์ | ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ค์ ํต์ ๊ตฌํ |
์ ๊ณต ์ฃผ์ฒด | Java ํ๋ซํผ | ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฒค๋ |
๊ตฌ์ฒดํ | ์ถ์ํ๋ ์ธํฐํ์ด์ค๋ก ์ ๊ณต | ๊ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ง์ถ ๊ตฌ์ฒด์ ์ธ ๊ตฌํ |
์ข ์์ฑ | ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ ๋ฆฝ์ | ํน์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ฐ๊ฒฐ์ ์ข ์์ |
์ฆ, JDBC๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ํธ์์ฉ์ ์ํ ํ์ค API๋ฅผ ์ ๊ณตํ๋ Java ๊ธฐ์ ์ด๊ณ , JDBC ๋๋ผ์ด๋ฒ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ํต์ ์ ์ค์ ๋ก ๊ตฌํํ๋ ์ํํธ์จ์ด์ด๋ค.
Spring JDBC
๋ง์ฝ Spring Framework๋ฅผ ์ฌ์ฉํ๋ค๋ฉด JDBC API๋ฅผ ์ฌ์ฉํ๋ ๋์ , Spring JDBC ํน์ Spring ORM์ ์ฌ์ฉํ์ฌ DB์ ์ํธ์์ฉ์ ํ๊ฒ ๋๋ค.
์ด ๊ณผ์ ์์ Spring์ด JDBC API๋ฅผ ๋ด๋ถ์ ์ผ๋ก ํ์ฉํ๊ธด ํ์ง๋ง, ์ด๋ฅผ ๊ฐ์ธ๋ ์ถ์ํ ๋ ์ด์ด ๋๋ถ์ ๊ฐ๋ฐ์๊ฐ ์ง์ JDBC ์ฝ๋๋ฅผ ์์ฑํ์ง ์์๋ ๋๋ค.
Spring JDBC ํต์ฌ ๊ตฌ์ฑ ์์
DataSource
- ์ญํ : ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๊ฒฐ์ ๊ด๋ฆฌํ๋ ๊ฐ์ฒด
- Spring JDBC๋ javax.sql.DataSource ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํด ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๊ฒฐ์ ์ถ์ํํ๋ฉฐ, ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๊ฒฐ ํ(Connection Pool)๋ ์ง์ํ๋ค.
- ์ผ๋ฐ์ ์ผ๋ก HikariCP, Apache DBCP, Tomcat JDBC Connection Pool๊ณผ ๊ฐ์ ๊ตฌํ์ฒด๋ฅผ ์ฌ์ฉํ๋ค.
Database ์ฐ๊ฒฐ ํ(Connection Pool)
๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๊ฒฐ ํ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ฐ๊ฒฐ์ ๋ฏธ๋ฆฌ ์์ฑํด ๋๊ณ , ์ ํ๋ฆฌ์ผ์ด์ ์์ ํ์ํ ๋๋ง๋ค ์ด๋ฅผ ์ฌ์ฌ์ฉํ๋๋ก ๊ด๋ฆฌํ๋ ๊ธฐ์ ์ด๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๊ฒฐ์ ์์ฑํ๊ณ ๋ซ๋ ๊ณผ์ ์ ์์์ ๋ง์ด ์๋ชจํ๋ ๊ณผ์ ์ธ๋ฐ ์ฌ์ฉ์๊ฐ ๋ง์์ง๋ง ์ฐ๊ฒฐ ์์ฑ ๋น์ฉ์ด ์ปค์ ธ ์ ํ๋ฆฌ์ผ์ด์ ์ฑ๋ฅ์ ๋ณ๋ชฉ์ด ๋ ์ ์๋ค. ๋ฐ๋ผ์ ์ฐ๊ฒฐ ํ์ ๋ฏธ๋ฆฌ ๋ง๋ค์ด ๋๊ณ ์ด๋ฏธ ์์ฑ๋ ์ฐ๊ฒฐ์ ์ฌ์ฌ์ฉํ๋ ๋ฐฉ์์ผ๋ก ์ฑ๋ฅ์ ํฅ์์ํค๊ธฐ ์ํด ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๊ฒฐ ํ์ ์ฌ์ฉํ๊ฒ ๋๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๊ฒฐ ํ ๊ตฌํ์ฒด๋ก๋ HikariCP, Apache DBCP, C3P0, Tomcat JDBC Connection Pool์ด ์๊ณ , ํ์ฌ์ Spring Boot์์๋ HikariCP๊ฐ ๊ธฐ๋ณธ ์ฐ๊ฒฐ ํ์ด๋ฉฐ, 1.x ๋ฒ์ ๋์์๋ Tomcat JDBC Connection Pool์ ์ฌ์ฉํ์๋ค.
- JdbcTemplate
- ํต์ฌ ํด๋์ค๋ก JDBC ์์ ์ ๊ฐ์ํํ๋ค.
- SQL ์คํ, PreparedStatement ์์ฑ, ResultSet ์ฒ๋ฆฌ ๋ฑ ๋๋ถ๋ถ์ ์์ ์ ์๋์ผ๋ก ์ฒ๋ฆฌํ๋ค.
- ์ฃผ์ ๋ฉ์๋:
- query(): SELECT ์คํ
- update(): INSERT, UPDATE, DELETE ์คํ
- execute(): DDL ๋๋ ๋ณต์กํ SQL ์คํ
- batchUpdate(): ๋๋ ์ ๋ฐ์ดํธ
- RowMapper
- ์ญํ : ResultSet์ ๋ฐ์ดํฐ๋ฅผ java ๊ฐ์ฒด๋ก ๋งคํํ๋ค.
- JdbcTemplate์ด SQL ์คํ ๊ฒฐ๊ณผ๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํด ์ฌ์ฉ
- ๊ธฐ๋ณธ ์ ๊ณต ํด๋์ค:
- BeanPropertyRowMapper: ResultSet์ Java Bean์ผ๋ก ๋งคํ
- RowMapper: ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํด ์ปค์คํฐ๋ง์ด์ฆ ๊ฐ๋ฅ
- Exception Translation
- JDBC API์ SQLException์ Spring์ ๋ฐ์ดํฐ ์์ธ์ค ์์ธ ๊ณ์ธต์ผ๋ก ๋ณํ
- ์ฃผ์ ์์ธ ๊ณ์ธต:
- DataAccessException: Spring JDBC์ ์ต์์ ์์ธ
- DuplicateKeyException, DataIntergrityViolationException ๋ฑ ์ธ๋ถํ๋ ์์ธ ์ ๊ณต
Spring JDBC vs ์์ JDBC
ํน์ง | Spring JDBC | ์์ JDBC |
์ฝ๋ ๋ณต์ก๋ | ๊ฐ๊ฒฐํจ(์๋ ์ฐ๊ฒฐ ๊ด๋ฆฌ ๋ฐ ์์ ์ ๋ฆฌ) | ๋ณต์กํจ(์ฐ๊ฒฐ, ์์ ์๋ ๊ด๋ฆฌ ํ์) |
์์ธ ์ฒ๋ฆฌ | Spring์ DataAccessException ๊ณ์ธต ์ฌ์ฉ | SQLException ์๋ ์ฒ๋ฆฌ ํ์ |
ํธ๋์ญ์ ๊ด๋ฆฌ | Spring ํธ๋์ญ์ ์ง์(@Transactional) | ์ง์ ๊ตฌํ ํ์ |
๊ฒฐ๊ณผ ๋งคํ | RowMapper๋ก ๊ฐ๋จํ ๋งคํ ๊ฐ๋ฅ | ์๋์ผ๋ก ResultSet ์ฒ๋ฆฌ ํ์ |