Community

๐Ÿ•Š๏ธ ์ž๋ฐ”์˜ ๊ธฐ๋ณธ ํŠธ๋žœ์žญ์…˜ ๋งค๋‹ˆ์ €์™€ ๊ทธ ๊ตฌํ˜„์ฒด๋“ค

๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ์„ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐ ์žˆ์–ด์„œ ํŠธ๋žœ์žญ์…˜ ๋งค๋‹ˆ์ €๋Š” ์ž๋ฐ” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๋งค์šฐ ์ค‘์š”ํ•œ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” ์ž๋ฐ”์˜ ๊ธฐ๋ณธ ํŠธ๋žœ์žญ์…˜ ๋งค๋‹ˆ์ € ์ธํ„ฐํŽ˜์ด์Šค์™€ ๊ทธ ๊ตฌํ˜„์ฒด๋“ค์„ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.ย  ย  ํŠธ๋žœ์žญ์…˜ ๋งค๋‹ˆ์ €๋ž€? ํŠธ๋žœ์žญ์…˜ ๋งค๋‹ˆ์ €๋Š” ์—ฌ๋Ÿฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ž‘์—…์ด ํ•˜๋‚˜๋กœ ๋ฌถ์ผ ์ˆ˜ ์žˆ๋„๋ก ๊ด€๋ฆฌํ•ด์ฃผ๋Š” ๊ตฌ์„ฑ ์š”์†Œ์ž…๋‹ˆ๋‹ค. ์ด๋Š” ๋ชจ๋“  ์ž‘์—…์ด ์„ฑ๊ณต์ ์œผ๋กœ ์™„๋ฃŒ๋˜๊ฑฐ๋‚˜, ํ•˜๋‚˜๋ผ๋„ ์‹คํŒจํ•  ๊ฒฝ์šฐ ์ „์ฒด ์ž‘์—…์„ ์›์ƒํƒœ๋กœ ๋˜๋Œ๋ฆฌ๋Š” '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์˜ ๋‹ค์–‘ํ•œ ๊ตฌํ˜„์ฒด๋“ค์€ ์ž๋ฐ” ์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ ๊ฐ๊ธฐ ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ ์ ‘๊ทผ ๊ธฐ์ˆ ์— ๋”ฐ๋ฅธ ํŠธ๋žœ์žญ์…˜ ๊ด€๋ฆฌ๋ฅผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๊ฐœ๋ฐœ์ž๋“ค์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์š”๊ตฌ ์‚ฌํ•ญ์— ๋งž๋Š” ์ตœ์ ์˜ ํŠธ๋žœ์žญ์…˜ ๊ด€๋ฆฌ ์ „๋žต์„ ์„ ํƒํ•˜๊ณ  ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ ๊ตฌํ˜„์ฒด์˜ ํŠน์„ฑ์„ ์ดํ•ดํ•˜๊ณ  ์ ์ ˆํžˆ ํ™œ์šฉํ•˜๋ฉด, ๋ฐ์ดํ„ฐ์˜ ์ผ๊ด€์„ฑ๊ณผ ๋ฌด๊ฒฐ์„ฑ์„ ํšจ๊ณผ์ ์œผ๋กœ ์œ ์ง€ํ•˜๋ฉด์„œ ์•ˆ์ •์ ์ธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์•Œ๋ฆผ

์•Œ๋ฆผ์ด ์—†์Šต๋‹ˆ๋‹ค