JDBC
Last updated
Last updated
์คํ๋ง - ์ธํฐํ์ด์ค ๋์ ๊ฐ์ฒด ์งํฅ ์ฝ๋ฉ ์งํฅ -> ์๋น์ค ๊ฐ์ฒด๊ฐ ๋ฐ๋ก ์ ์ฅ์๋ก ์ ๊ทผํ์ง ์์ -> ์ธํฐํ์ด์ค๋ฅผ ํตํจ
์๋น์ค ๊ฐ์ฒด(Service object)๋ ์ ์ฅ์ ์ธํฐํ์ด์ค(Repository interface)๋ฅผ ํตํด์ ์ ์ฅ์์ ์ก์ธ์คํ๋ค. ํน์ ๋ฐ์ดํฐ ์ก์ธ์ค ๊ตฌํ์ ๋ฐ์ฐฉ๋์ด ์์ง ์์ผ๋ฏ๋ก, ์ฝ๊ฒ ํ ์คํธ ํ ์ ์ด๋ค. ์ฐ๊ฒฐํ์ง ์๊ณ ๋ ํ ์คํธ๊ฐ ๋๊ฐ๋ฅํ๋ฉฐ, ๋ฐ์ดํฐ์ ์ํ ํ ์คํธ ์คํจ๋ ๋ฐ์ํ์ง ์๋๋ค.
๋ฐ์ดํฐ ์ก์ธ์ค ๊ณ์ธต์ ํผ์์คํด์ค๊ธฐ์ ์ ์๊ด ์์ด ์ก์ธ์ค, ์ค์ง ๊ด๋ จ ๋ฐ์ดํฐ ์ก์ธ์ค ๋ฉ์๋๋ง ์ธํฐํ์ด์ค๋ก ๋ ธ์ถ -> ์ ์ฐํ ์ค๊ณ ๊ฐ๋ฅ
์คํ๋ง์ ๋ฐ์ดํฐ ์ก์ธ์ค ์์ธ ๊ณ์ธต ๊ตฌ์กฐ
SQLException์ ๋ฐ์์ํค๋ ํํ ๋ฌธ์ -> ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๊ฒฐ ๋ถ๊ฐ / ์ฟผ๋ฆฌ ๋ฌธ๋ฒ ์ค๋ฅ / ํ ์ด๋ธ, ์ปฌ๋ผ ๋ฏธ์กด์ฌ / ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ ์ฝ์ฌํญ ์๋ฐฐ ๋ฑ
-> ๋๋ถ๋ถ ์น๋ช ์ ์ธ ๋ฌธ์ ๋ฅผ ์ผ์ผํค๋ฉฐ, ๋ฌธ์ ๋ฅผ ์ ๋๋ก ์ธ์ํ์ง ๋ชปํ๋ค. ๊ทผ๋ณธ์ ์ธ ์์ธ์ ์๊ธฐ ์ํด์๋ ์์ธ์ ํ๋กํผํฐ๋ฅผ ๋ชจ๋ ์ดํด๋ด์ผํจ.
-> ๋ฐ๋ผ์ ํผ์์คํดํธ ํ๋ ์์ํฌ์ ๋ฐ๋ผ, ์์ธ์ ๊ฐํ ๋ค์ํ ๊ณ์ธต๊ตฌ์กฐ๋ฅผ ์ ๊ณตํ๋ค. (hibernate๋ 20๊ฐ ์ด์์ ์์ธ ์ ๊ณต)
-> JDBC์ ์์ธ ๊ณ์ธต ๊ตฌ์กฐ๋ ๋๋ฌด ํฌ๊ด์ ์ด์ด์, ๊ณ์ธต๊ตฌ์กฐ๋ผ๊ณ ํ ๊ฒ๋ ์์
-> ์คํ๋งJDBC์์๋, ํด๋น ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐ์ดํฐ ์ก์ธ์ค ์์ธ ๊ณ์ธต์ ์ ๊ณตํ๋ค. ์ผ๋ฐ JDBC์๋ ๋์กฐ์ ์
==> ์คํ๋งJDBC์ ์์ธ๋ ์ ๋ถ, DataAccessException์ ํ์ฅํ๋ค. ํน๋ณํ ์ ์ ๋น๊ฒ์ฌํ ์์ธ์ด๊ธฐ ๋๋ฌธ์, catch๋ฅผ ๊ตณ์ด ์ฌ์ฉํ์ง ์์๋ ๋๋ค(์คํ๋ง์ ๋ง์ ์์ธ๊ฐ catch๋ก ์ก์ ์ ์๊ธฐ ๋๋ฌธ์ผ๋ก ๋ณด์, ๊ฒ์ฌํ์ ๊ฒฝ์ฐ ๋น catch๋ธ๋ก๋ ๊ฐ์ ๋จ)
๋ฐ์ดํฐ ์ก์ธ์ค ํ ํ๋ฆฟํ
ํ ํ๋ฆฟ ๋ฉ์๋ ํจํด
* ํ ํ๋ฆฟ ๋ฉ์๋๋ ์ ์ฐจ์ ๊ณจ๊ฒฉ์ ์ ์ํ๋ค(๊ณ ์ ์ )
* ์ด๋ค ๋จ๊ณ์์ ํ๋ก์ธ์ค๊ฐ ๊ทธ ๋จ๊ณ์ ์์ ์ ์๋ธํด๋์ค๋ก ์์ํ๋ค. ํด๋น ์๋ธํด๋์ค๋ก ํ์ฌ๊ธ ๊ตฌํ ์ข ์์ ์ธ ์ธ๋ถ์ฌํญ์ ์ฑ์ฐ๊ฒ ํ ์ ์์(๊ฐ๋ณ์ )
๋ฐ์ดํฐ ์ก์ธ์ค ํ ํ๋ฆฟ
* ๋ฐ์ดํฐ ์ก์ธ์ค ์ ์ฐจ์ ์์ด, ๋๋น ์ปค๋ฅ์ ์ ํ๋ํ๊ณ ๋ฐํํ๋ ์ ์ฐจ๋ ๋งค๋ฒ ๋ฐ๋ณต๋๋ค -> ์ ์ฐจ์ ๊ณจ๊ฒฉ(๊ณ ์ ์ )
* ํ์ง๋ง, ๋ฐ์ดํฐ ์ ์ฅ์์, ์ํฉ์ ๋ฐ๋ผ ์์ฑํด์ผํ ๊ฐ ๋ฐ์ดํฐ ์์ธ์ค ๋ฉ์๋๋ ์๋ก ์ฝ๊ฐ์ฉ ๋ค๋ฆ -> ๊ฐ๋ณ์ ์ธ ๋จ๊ณ
-> ์คํ๋ง์ ์ด๋ฐ, ์ ์ฐจ์์, ๊ณ ์ ๋จ๊ณ 'ํ ํ๋ฆฟtemplate', ๊ฐ๋ณ๋จ๊ณ๋ฅผ '์ฝ๋ฐฑcallback'์ด๋ผ๋ ๋ ๊ฐ์ง ๋ณ๋ ํด๋์ค๋ก ๋ถ๋ฆฌํจ
=> ์คํ๋ง์ ํผ์์คํด์ค ํ๋ซํผ์ ๋ฐ๋ผ ์ ํ๊ฐ๋ฅํ ํ ํ๋ฆฟ์ ์ ๊ณต -> ๋ํ์ ์ผ๋ก JdbcTemplate, HibernateTemplate, JpaTemlate
์คํ๋ง์ ๋ฐ์ดํฐ ์์ค ๋น์ ์ค์ ํ๋ ๋ฐฉ๋ฒ - JDBC๋๋ผ์ด๋ฒ๋ฅผ ํตํด ์ ์ธ, JNDI์ ๋ฑ๋ก, ์ปค๋ฅ์ ์ ํ๋ง
JNDI ๋ฐ์ดํฐ ์์ค ์ด์ฉ
๋๋ถ๋ถ JEE ์ ํ๋ฆฌ์ผ์ด์ ์๋ฒ์ ๋ฐฐํฌ๋ ๊ฒ์ด๋ค. ์ด๋ฐ ์๋ฒ๋ JBoss, Tomcat๊ณผ ๊ฐ์ ์น ์ปจํ ์ด๋ ์ญํ ์ ํจ. ์ด ์๋ฒ๋ค์ ๋ชจ๋ JNDI๋ฅผ ํตํด ๋ฐ์ดํฐ ์์ค๋ฅผ ํ๋ํ๋ ๋ฐฉ๋ฒ์ ์ ๊ณตํ๋ค - ์ธ๋ถ์์ ๊ด๋ฆฌ๋๋ฉฐ, ์ ๊ทผ ์์ ์ ์์ฒญ๋ง ํ๋ฉด ๋๋ค๋ ์ด์ ์ด ์์
JndiObjectFactoryBean ๊ตฌํ
ํ๋ง๊ธฐ๋ฅ์ด ์๋ ๋ฐ์ดํฐ ์์ค ์ฌ์ฉํ๊ธฐ
JNDI๋ก ๋ฐ์ดํฐ ์์ค๋ฅผ ๊ฐ์ ธ์ฌ ์ ์์ ๋, ์ฐจ์ ์ฑ ์ ํ๋ง ๊ธฐ๋ฅ์ด ์๋ ๋ฐ์ดํฐ์์ค๋ฅผ ์ค์ ํ๋ ๊ฒ
* ์ํ์น ๊ณตํต DBCP, c3p0, BoneCP ์ฌ์ฉ ๊ฐ๋ฅ
BasicDataSource ๊ตฌํ
JDBC ๋๋ผ์ด๋ฒ ๊ธฐ๋ฐ ๋ฐ์ดํฐ ์์ค
DriverManagerDataSource - ์ปค๋ฅ์ ์์ฒญํ ๋๋ง๋ค, ์๋ก์ด ์ปค๋ฅ์ ๋ฐํ, ํ๋ง ๋์ง ์์
SimpleDriverDataSource - OSGi ์ปจํ ์ด๋ ๊ฐ์ ํน์ ํ๊ฒฝ์, ๋ก๋ฉ ๋ฌธ์ ๋ฅผ ๊ทน๋ณต์์ ์ฌ์ฉํ๋๊ฒ ์ ์ธํ๋ฉด DriverManagerDataSource์ ๋์ผํ๋ค
SingleConnnectionDataSource - ์ปค๋ฅ์ ์์ฒญ์, ํญ์ ๋์ผํ ์ปค๋ฅ์ ๋ฐํ, ํ๋ง์ ๊ธฐ๋ฅ์ ์์ง๋ง, ํ ์ปค๋ฅ์ ๋ง์ ํ๋งํ๋ ๋ฐ์ดํฐ์์ค
-> BasicDatasource์ ํฌ๊ฒ ๋ค๋ฅด์ง ์์ผ๋... ์์ฉ์์๋ ๊ณ ๋ คํด์ผํ๋ค, ํ๋ง๊ธฐ๋ฅ์ด ์๊ธฐ ๋๋ฌธ์ '๋ฉํฐ ์ค๋ ๋ ์ดํ๋ฆฌ์ผ์ด์ '์์๋ ์ฌ๊ฐํ ์ฑ๋ฅ ์ ํ๋ฅผ ์ผ๊ธฐํ๋ค.
-> ๊ฐ๋ฐ๊ณผ, ํ ์คํธ ์ด์ธ ๋น์ถ
๊ตฌํ ์์
์๋ฒ ๋๋ ๋ฐ์ดํฐ ์์ค
- ๊ฐ๋ฐ, ํ ์คํธ์์ ์ฌ์ฉํ ๋, ๊ด์ฐฎ์ ์ ํ , ํ ์คํธ๋ฅผ ํ ๋๋ง๋ค ํ ์คํธ ๋ฐ์ดํฐ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฑ์ธ ์ ์์
- ๋ฐ๋ก ๋ค์ ์คํ์ด์ค์ ๊ดํ, ํธ์์ฑ ์ ๊ณต์ ์์(xml ์ค์ ์๋ ์กด์ฌ).. EmbeddedDatabaseBuilder ์ฌ์ฉ
๋ฐ์ดํฐ ์์ค ์ ํ์ ์ํ ํ๋กํ์ผ๋ง
๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฌ์ฉํ ์, ํ๊ฒฝ๋ณ๋ก dev๋ ๊ฐ๋ฐ๊ณผ ํ ์คํธ์ ์ฉ์ดํ ์๋ฒ ๋๋ ๋ฐ์ดํฐ์์ค, qaํ๊ฒฝ์์๋ BasicDataSource, ๊ทธ๋ฆฌ๊ณ ์์ฉํ๊ฒฝ์์๋ jndiDataSource๋ฅผ ์ฌ์ฉํ๋ค๊ณ ํ์.
์ด๋ฐ ๊ฒฝ์ฐ์๋ ์คํ๋ง์ ํ๋กํ์ผ์ ์ด์ฉํ์ฌ ๊ฐ๊ฐ dataSource๋ฅผ ์ง์ ํ ์ ์๋ค.
๊ตฌํ ์์
JDBC ์ฅ์ : ๋ฐ์ดํฐ ์ก์ธ์ค ์ธ์ด์ธ SQL์ ๋ฐํ์ผ๋ก ๋ง๋ค์ด์ก๋ค. ํผ์์คํด์ค ํ๋ ์์ํฌ๋ฅผ ์ฌ์ฉํ์ ๋๋ณด๋ค ํจ์ฌ ๋ฎ์ ์์ค์์ ๋ฐ์ดํฐ ์กฐ์ ๊ฐ๋ฅ, ๊ฐ๋ณ ์นผ๋ผ์ ์ก์ธ์ค๋ ๊ฐ๋ฅํ๋ค. ํนํ ๋ฆฌํฌํ ๋ถ๋ฅ์ ํธ๋ฆฌํจ.
JDBC ๋จ์ - ์ฝ๋๊ฐ ์ง์ ๋ถํ๋ค(๊ฐ๋จํ ๊ฐ์ฒด ํ๋์ 20์ค ์ด์ ์ฝ๋), SQLException ํ๋๋ก ๋ชฝ๋ ์ฒ๋ฆฌํ๋ ค๋ ์์ฌ(์์ธ ๋ช ํํ์ง์๊ณ , catch๋ ๋๋ฒ์ด๋ ํด์ผํจ), 20%์ ์ฝ๋๋ง์ด ์ค์ ์ฟผ๋ฆฌ ์ํ์ด๊ณ 80%๋ ๋จ์ ๋ฐ๋ณต์ฝ๋
====> ์คํ๋ง์ ์ด๋ฐ JDBC์ ์ฅ์ ์ ๊ฐ์ ธ์ค๊ณ , ๋จ์ ์ ํ ํ๋ฆฟ์ผ๋ก ๋ณด์ํ๋ค.
๋จ์ ๋ฐ๋ณต์ ์ธ ๋ฐ์ดํฐ ์ก์ธ์ค ์ฝ๋๋ฅผ ํ ํ๋ฆฟ ํด๋์ค๋ค๋ก ์ถ์ํํด์ ์จ๊ธด๋ค.
* JdbcTemplate - ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ JDBCํ ํ๋ฆฟ, ์์ธ๋ ํ๋ผ๋ฏธํฐ ๊ธฐ๋ฐ์ ์ฟผ๋ฆฌ๋ฅผ ํตํด ์ฝ๊ฒ ๋ฐ์ดํฐ ์ก์ธ์ค
* NamedParameterJdbcTemplate - SQL๊ฐ๋ค์ ์์ธ๋ ํ๋ผ๋ฏธํฐ ๋์ , ๋ช ๋ช ๋ ํ๋ผ๋ฏธํฐ๋ก ๋ฐ์ธ๋ฉํ์ฌ ์ฟผ๋ฆฌ๋ฅผ ์ํ
* SimpleJdbcTemplate - ์๋ฐ5๊ฐ ์ ๊ณตํ๋ ์คํ ๋ฐ์ฑ, ์ ๋ค๋ฆญ์ค ๋ฑ์ ํ์ฉํด ์ฝ๊ฒ ํ
ํ๋ฆฟ ์ฌ์ฉ
JdbcTemplate์ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ ์ถ๊ฐ
JdbcTemplate์, DataSource๊ฐ ์์ด์ผ ๋์
=> ์ด์ , jdbcTemplate์ ์ ์ฅ์๋ก ์์ด์ด๋ง๋ ํ ์์๊ณ , ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ก์ธ์ค๋ ๊ฐ๋ฅ
==> ๋จ์ํํ JdbcTemplate ๊ธฐ๋ฐ์ INSERT ํจ์
==> ๋จ์ํํ JdbcTemplate์ SELECTํจ์(rowMapper ๋๋ค ์ฌ์ฉ / ์ฐธ๊ณ https://codeday.me/ko/qa/20190404/236877.html )
๋ช ๋ช ๋ ํ๋ผ๋ฏธํฐ ์ฌ์ฉ
๊ฐ๋ฐ์ ํ๋ค๊ฐ, ๋ถ๋์ดํ๊ฒ SQL์ ์์๊ฐ ๋ฐ๋๋ค๊ฑฐ๋ ํ๋ฉด, ๋ชฉ๋ก์ ๋ง๊ฒ ์ฝ๋๋ ๋ฐ๊ฟ์ฃผ์ด์ผ ํ๋ค. ํ๋ผ๋ฏธํฐ๊ฐ ๋ช ๋ช ๋์ด ์๋ค๋ฉด SQL์ ์์๊ฐ ๋ฐ๋์ด๋ ์ฝ๋๋ ๊ทธ๋๋ก ๊ฐ์ ธ๊ฐ ์ ์๋ค
๋ช ๋ช ํ๋ ํ๋ผ๋ฏธํฐ SQL๋ฌธ ์์
* NamedParameterJdbcTemplate ์ฌ์ฉ
=> ๋ช ๋ช ํ๋ ํ๋ผ๋ฏธํฐ INSERT ์์