๐๏ธ ์๋ฐ์ ๊ธฐ๋ณธ ํธ๋์ญ์ ๋งค๋์ ์ ๊ทธ ๊ตฌํ์ฒด๋ค
๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ์ ๊ด๋ฆฌํ๋ ๋ฐ ์์ด์ ํธ๋์ญ์ ๋งค๋์ ๋ ์๋ฐ ์ ํ๋ฆฌ์ผ์ด์ ์์ ๋งค์ฐ ์ค์ํ ์ญํ ์ ํฉ๋๋ค. ์ด๋ฒ ํฌ์คํ ์์๋ ์๋ฐ์ ๊ธฐ๋ณธ ํธ๋์ญ์ ๋งค๋์ ์ธํฐํ์ด์ค์ ๊ทธ ๊ตฌํ์ฒด๋ค์ ์์๋ณด๊ฒ ์ต๋๋ค.ย ย ํธ๋์ญ์ ๋งค๋์ ๋? ํธ๋์ญ์ ๋งค๋์ ๋ ์ฌ๋ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ ์ด ํ๋๋ก ๋ฌถ์ผ ์ ์๋๋ก ๊ด๋ฆฌํด์ฃผ๋ ๊ตฌ์ฑ ์์์ ๋๋ค. ์ด๋ ๋ชจ๋ ์์ ์ด ์ฑ๊ณต์ ์ผ๋ก ์๋ฃ๋๊ฑฐ๋, ํ๋๋ผ๋ ์คํจํ ๊ฒฝ์ฐ ์ ์ฒด ์์ ์ ์์ํ๋ก ๋๋๋ฆฌ๋ 'All or Nothing'์ ์์น์ ๋ณด์ฅํฉ๋๋ค. ์๋ฐ์์๋ ์ฃผ๋ก JTA(Java Transaction API)๋ฅผ ์ด์ฉํ์ฌ ํธ๋์ญ์ ์ ๊ด๋ฆฌํฉ๋๋ค. ย ์คํ๋ง๊ณผ ํธ๋์ญ์ ๋งค๋์ ์คํ๋ง ํ๋ ์์ํฌ์์๋ ๋ ํธ๋ฆฌํ๊ฒ ํธ๋์ญ์ ์ ๊ด๋ฆฌํ ์ ์๋ ์ถ์ํ๋ ํธ๋์ญ์ ๋งค๋์ ๋ฅผ ์ ๊ณตํฉ๋๋ค. PlatformTransactionManager ์ธํฐํ์ด์ค๋ ์คํ๋ง์ ๋ค์ํ ํธ๋์ญ์ ๋งค๋์ ๊ฐ ๊ตฌํํ๋ ๊ธฐ๋ณธ ์ธํฐํ์ด์ค์ด๋ฉฐ, ๊ตฌํ ํด๋์ค์๋ DataSourceTransactionManager, JpaTransactionManager ๋ฑ์ด ์์ต๋๋ค. ย ์ด๋ฌํ ๊ตฌํ์ฒด๋ค์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฐ์ดํฐ ์ ๊ทผ ๋ฐฉ์์ ๋ฐ๋ผ ์ ํฉํ ํธ๋์ญ์ ๊ด๋ฆฌ ๋ฐฉ๋ฒ์ ์ ๊ณตํฉ๋๋ค. ๊ฐ์ฅ ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉ๋๋ ๋ช ๊ฐ์ง PlatformTransactionManager ๊ตฌํ์ฒด์ ๊ทธ ํน์ง์ ๋ํด ์ค๋ช ํ๊ฒ ์ต๋๋ค. ย DataSourceTransactionManager JDBC๋ฅผ ์ง์ ์ฌ์ฉํ ๋ ์ฃผ๋ก ์ด์ฉํฉ๋๋ค. ์ด ๊ตฌํ์ฒด๋ ๋ฐ์ดํฐ ์์ค๋ฅผ ํตํด ์ง์ ์ปค๋ฅ์ ์ ๊ด๋ฆฌํ๊ณ , JDBC์ ๊ธฐ๋ณธ ํธ๋์ญ์ API๋ฅผ ์ด์ฉํ์ฌ ํธ๋์ญ์ ์ ์ฒ๋ฆฌํฉ๋๋ค. ๊ฐ๋จํ๊ณ ์ง๊ด์ ์ด์ด์ JDBC ๊ธฐ๋ฐ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ ์ ๋งค์ฐ ์ ํฉํฉ๋๋ค. * ๋จ์ผ JDBC ๋ฐ์ดํฐ ์์ค์ ๋ํ ํธ๋์ญ์ ๊ด๋ฆฌ์ ์ต์ ํ๋์ด ์์ต๋๋ค. * ๋ค๋ฅธ ๋ฆฌ์์ค์์ ํธ๋์ญ์ ์ ๊ด๋ฆฌํ ์ ์๊ธฐ ๋๋ฌธ์ JTA์ ๊ฐ์ ๋ถ์ฐ ํธ๋์ญ์ ํ๊ฒฝ์์๋ ์ฌ์ฉํ๊ธฐ ์ด๋ ต์ต๋๋ค. HibernateTransactionManager Hibernate ์ธ์ ๊ณผ ํธ๋์ญ์ ์ ๊ด๋ฆฌํ๊ธฐ ์ํด ์ค๊ณ๋์์ต๋๋ค. ์ด ๋งค๋์ ๋ Hibernate ์ธ์ ์ ํ์ฌ ์ค๋ ๋์ ๋ฐ์ธ๋ฉํ๊ณ , ํธ๋์ญ์ ์ด ์์๋ ๋ ์ธ์ ์ ์ด๊ณ ์ข ๋ฃํ ๋ ์ธ์ ์ ์ ๋ฆฌํฉ๋๋ค. * Hibernate ์ธ์ ๊ณผ ์๋ช ์ฃผ๊ธฐ๋ฅผ ๋๊ธฐํํ์ฌ ์์ ์ ์ธ ์ธ์ ๊ด๋ฆฌ๋ฅผ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค. * Hibernate๋ฅผ ์ฌ์ฉํ๋ ์ ํ๋ฆฌ์ผ์ด์ ์์ ๋ฐ์ดํฐ์ ์ ๊ทผํ๋ ์ฝ๋์ ์ผ๊ด์ฑ์ ์ ์งํ๋๋ก ๋์์ค๋๋ค. * ๋ค๋ฅธ ๋ฐ์ดํฐ ์ ๊ทผ ๊ธฐ์ ๊ณผ ํจ๊ป ์ฌ์ฉํ ๊ฒฝ์ฐ, JTA๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ๋ ์ ํฉํ ์ ์์ต๋๋ค. JpaTransactionManager JPA๋ฅผ ์ฌ์ฉํ๋ ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ํฐํฐ ๋งค๋์ ์ ์๋ช ์ฃผ๊ธฐ์ ํธ๋์ญ์ ์ ๊ด๋ฆฌํฉ๋๋ค. ์ด ๋งค๋์ ๋ JPA ์ํฐํฐ ๋งค๋์ ๋ฅผ ์คํ๋ง ํ๋ ์์ํฌ์ ํธ๋์ญ์ ๊ด๋ฆฌ ํ๋ ์์ํฌ์ ํตํฉํ์ฌ ์ฌ์ฉํฉ๋๋ค. * JPA ๊ธฐ๋ฐ์ ์ ํ๋ฆฌ์ผ์ด์ ์์ ํธ๋์ญ์ ๊ณผ ์ํฐํฐ ๋งค๋์ ์ ํตํฉ ๊ด๋ฆฌ๋ฅผ ์ ๊ณตํฉ๋๋ค. * ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ธฐ์ ์ ์ถ์ํ๋ฅผ ์ง์ํ๋ฏ๋ก, ๋ค์ํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ธฐ์ ์ ์ฝ๊ฒ ์ ์ฉ๋ ์ ์์ต๋๋ค. ๊ฒฐ๋ก PlatformTransactionManager์ ๋ค์ํ ๊ตฌํ์ฒด๋ค์ ์๋ฐ ์คํ๋ง ํ๋ ์์ํฌ์์ ๊ฐ๊ธฐ ๋ค๋ฅธ ๋ฐ์ดํฐ ์ ๊ทผ ๊ธฐ์ ์ ๋ฐ๋ฅธ ํธ๋์ญ์ ๊ด๋ฆฌ๋ฅผ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค. ์ด๋ฅผ ํตํด ๊ฐ๋ฐ์๋ค์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์๊ตฌ ์ฌํญ์ ๋ง๋ ์ต์ ์ ํธ๋์ญ์ ๊ด๋ฆฌ ์ ๋ต์ ์ ํํ๊ณ ๊ตฌํํ ์ ์์ต๋๋ค. ๊ฐ ๊ตฌํ์ฒด์ ํน์ฑ์ ์ดํดํ๊ณ ์ ์ ํ ํ์ฉํ๋ฉด, ๋ฐ์ดํฐ์ ์ผ๊ด์ฑ๊ณผ ๋ฌด๊ฒฐ์ฑ์ ํจ๊ณผ์ ์ผ๋ก ์ ์งํ๋ฉด์ ์์ ์ ์ธ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ ์ ์์ต๋๋ค.