2022-06-30 TIL
JdbcTemplate
๊น์ํ๋ ์คํ๋ง DB 2ํธ - ๋ฐ์ดํฐ ์ ๊ทผ ๊ธฐ์ ํ์ฉ ๊ฐ์๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ ๋ฆฌํ ๋ด์ฉ์ ๋๋ค.
์ฅ์
- ์ค์ ์ ํธ๋ฆฌํจ
- JdbcTemplate์
spring-jdbc
๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํฌํจ๋์ด ์๋๋ฐ, ์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์คํ๋ง์ผ๋ก JDBC๋ฅผ ์ฌ์ฉํ ๋ ๊ธฐ๋ณธ์ผ๋ก ์ฌ์ฉ๋๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค. ๊ทธ๋ฆฌ๊ณ ๋ณ๋์ ๋ณต์กํ ์ค์ ์์ด ๋ฐ๋ก ์ฌ์ฉํ ์ ์๋ค.
- JdbcTemplate์
- ๋ฐ๋ณต ๋ฌธ์ ํด๊ฒฐ
- JdbcTemplate์ Template Callback ํจํด์ ์ฌ์ฉํด์ JDBC๋ฅผ ์ง์ ์ฌ์ฉํ ๋ ๋ฐ์ํ๋ ๋๋ถ๋ถ์ ๋ฐ๋ณต ์์ ์ ๋์ ์ฒ๋ฆฌํด์ค๋ค.
- ๊ฐ๋ฐ์๋ SQL์ ์์ฑํ๊ณ , ์ ๋ฌํ ํ๋ผ๋ฏธํฐ๋ฅผ ์ ์ํ๊ณ , ์๋ต ๊ฐ์ ๋งคํํ๊ธฐ๋ง ํ๋ฉด ๋๋ค.
- ์ฐ๋ฆฌ๊ฐ ์๊ฐํ ์ ์๋ ๋๋ถ๋ถ์ ๋ฐ๋ณต ์์
์ ์ฒ๋ฆฌํด์ค๋ค.
- Connection ํ๋
statement
๋ฅผ ์ค๋นํ๊ณ ์คํ- ๊ฒฐ๊ณผ๋ฅผ ๋ฐ๋ณตํ๋๋ก ๋ฃจํ๋ฅผ ์คํ
- Connection ์ข
๋ฃ,
statement
,resultset
์ข ๋ฃ - Transaction์ ๋ค๋ฃจ๊ธฐ ์ํ Connection ๋๊ธฐํ
- ์์ธ ๋ฐ์ ์, ์คํ๋ง ์์ธ ๋ณํ๊ธฐ ์คํ
๋จ์
- ๋์ SQL์ ์ฒ๋ฆฌํ๊ธฐ๊ฐ ์ด๋ ต๋ค.
@Transactional์ ์๋ฆฌ
๊น์ํ๋ ์คํ๋ง DB 2ํธ - ๋ฐ์ดํฐ ์ ๊ทผ ๊ธฐ์ ํ์ฉ ๊ฐ์๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ ๋ฆฌํ ๋ด์ฉ์ ๋๋ค.
์คํ๋ง์ด ์ ๊ณตํ๋ @Transactional
์ ๋
ธํ
์ด์
์ ๋ก์ง์ด ์ฑ๊ณต์ ์ผ๋ก ์ํ๋๋ฉด ์ปค๋ฐํ๋๋ก ๋์ํ๋ค. ๊ทธ๋ฐ๋ฐ @Transactional
์ ๋
ธํ
์ด์
์ ํ
์คํธ์์ ์ฌ์ฉํ๋ฉด ์คํ๋ง์ ํ
์คํธ ํธ๋์ญ์
์์์ ์คํํ๊ณ , ํ
์คํธ๊ฐ ๋๋๋ฉด ํธ๋์ญ์
์ ์๋์ผ๋ก ๋กค๋ฐฑ์์ผ ๋ฒ๋ฆฐ๋น
@Repository์ ๊ธฐ๋ฅ (์ฐธ๊ณ : @Service๋ ComponentScan์ ๋์์ด๋ผ๋ ๊ฑธ ์๋ ค์ค ๋ฟ ์ฃผ๋ชฉํ ๋งํ ๊ธฐ๋ฅ์ ์๋ค)
๊น์ํ๋ ์คํ๋ง DB 2ํธ - ๋ฐ์ดํฐ ์ ๊ทผ ๊ธฐ์ ํ์ฉ ๊ฐ์๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ ๋ฆฌํ ๋ด์ฉ์ ๋๋ค.
@Respository
๊ฐ ๋ถ์ ํด๋์ค๋ComponentScan
์ ๋์์ด ๋๋ค.@Respository
๊ฐ ๋ถ์ ํด๋์ค๋ ์์ธ ๋ณํ AOP์ ์ ์ฉ ๋์์ด ๋๋ค.- ์คํ๋ง๊ณผ JPA๋ฅผ ํจ๊ป ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ์คํ๋ง์ JPA ์์ธ ๋ณํ๊ธฐ(
PersistenceExceptionTranslator
)๋ฅผ ๋ฑ๋กํ๋ค. - ์์ธ ๋ณํ AOP ํ๋ก์๋ JPA ๊ด๋ จ ์์ธ๊ฐ ๋ฐ์ํ๋ฉด JPA ์์ธ ๋ณํ๊ธฐ๋ฅผ ํตํด ๋ฐ์ํ ์์ธ๋ฅผ ์คํ๋ง ๋ฐ์ดํฐ ์ ๊ทผ ์์ธ๋ก ๋ณํํ๋ค.
- ์คํ๋ง๊ณผ JPA๋ฅผ ํจ๊ป ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ์คํ๋ง์ JPA ์์ธ ๋ณํ๊ธฐ(
๋๊ธ๋จ๊ธฐ๊ธฐ