์์ ๋ถํฐ @Transaction์ด ์ค์ฒฉ๋์ ์ฌ์ฉ๋๋ฉด ์ด๋ป๊ฒ ๋ ๊น..?? ๋ผ๊ณ ๋ช๋ฒ ์๊ฐํด ๋ณด์๊ณ , ๊ทธ๋ ๋์ถฉ ์ดํด๋ณด๊ณ ๋ง์์๋๋ฐ, ์ค๋ ์ด์ฉ๋ค๊ฐ ์ด๊ฒ ๊ด๋ จํด์ ์กฐ๊ธ ํฅ๋ฏธ๋ก์ด ๋ถ๋ถ์ด ์๊ฒจ์ (์ฌ์ค์ ์ข ํ๋์ด ์ธ๊ธํด์ฃผ์ ๊ฑฐ๊ธด ํ์ง๋ง) ์ ๋ฆฌํด๋ณด๋ ค ํ๋ค.
์ฌ์ค ์ด ๊ธ์ ์ดํ ๋ค๋ฃฐ (์ค์ฒฉ๋) ํธ๋์ญ์ ์์์ ์์ธ์ฒ๋ฆฌ์ ๋ํด ๊ธ์ ์์ ํ ๋ ์๊ณ ์์ด์ผ ํ ๋ด์ฉ์ด๊ธฐ์ ๊ฐ๋จํ๊ฒ๋ง ๋ค๋ฃจ๊ณ ๋ค์ ๊ฒ์๋ฌผ๋ก ๋์ด๊ฐ๊ฒ ๋ค.
์ฌ๊ธฐ์๋ @Transactional์ propagation ์์ฑ์ ๋ํด์ ์์๋ณด์.
Propagation(์ ํ) ์์ฑ
์คํ๋ง์ Propagation์ ์์ฑ์ ๋ค์๊ณผ ๊ฐ๋ค.
REQUIRED(TransactionDefinition.PROPAGATION_REQUIRED),
SUPPORTS(TransactionDefinition.PROPAGATION_SUPPORTS),
MANDATORY(TransactionDefinition.PROPAGATION_MANDATORY),
REQUIRES_NEW(TransactionDefinition.PROPAGATION_REQUIRES_NEW),
NOT_SUPPORTED(TransactionDefinition.PROPAGATION_NOT_SUPPORTED),
NEVER(TransactionDefinition.PROPAGATION_NEVER),
NESTED(TransactionDefinition.PROPAGATION_NESTED);
REQUIRED
ํธ๋์ญ์ ์ด ์กด์ฌํ๋ ๊ฒฝ์ฐ ํด๋น ํธ๋์ญ์ ์ ๊ทธ๋๋ก ์ฌ์ฉํ๊ณ , ํธ๋์ญ์ ์ด ์๋ ๊ฒฝ์ฐ ํธ๋์ญ์ ์ ์์ฑํ๋ค.
์ฆ ๋ง์ฝ ํธ๋์ญ์ ์ ์ค์ฒฉํด์ ์ฌ์ฉํ๋ค๋ฉด ๋ด๋ถ์ ํธ๋์ญ์ ์ด ๋ฐ๋ก ์์ฑ๋๋ ๊ฒ์ด ์๋๋ผ, ์ธ๋ถ์ ํธ๋์ญ์ ์ ๊ทธ๋๋ก ๊ปด๊ฐ์ง๊ณ ํธ๋์ญ์ ์ ํ๋๋ง ์ฌ์ฉํ๊ฒ ๋๋ ๊ฒ์ด๋ค.
(๊ธฐ๋ณธ๊ฐ์ด๋ค.)
์์ธ๊ฐ ๋ฐ์ํ๋ฉด ๋กค๋ฐฑ์ด ๋๊ณ ํธ์ถํ ๊ณณ์๋ ๋กค๋ฐฑ์ด ์ ํ๋๋ค.
SUPPORTS
ํธ๋์ญ์ ์ด ์กด์ฌํ๋ ๊ฒฝ์ฐ ํด๋น ํธ๋์ญ์ ์ ์ฌ์ฉํ๊ณ , ํธ๋์ญ์ ์ด ์๋ค๋ฉด ํธ๋์ญ์ ์์ด ์คํํ๋ค.
MANDATORY
ํธ๋์ญ์ ์ด ๋ฐ๋์ ์์ด์ผ ํ๋ค๋ ์๋ฏธ์ด๋ค.
ํธ๋์ญ์ ์ด ์กด์ฌํ๋ ๊ฒฝ์ฐ ํด๋น ํธ๋์ญ์ ์ ์ฌ์ฉํ๊ณ , ํธ๋์ญ์ ์ด ์๋ค๋ฉด ์์ธ๋ฅผ ๋ฐ์์ํจ๋ค.
REQUIRES_NEW
ํธ๋์ญ์ ์ด ์กด์ฌํ๋ ๊ฒฝ์ฐ ํธ๋์ญ์ ์ ์ ์ ๋ณด๋ฅ์ํค๊ณ , ์ ๊ท ํธ๋์ญ์ ์ ์์ฑํ์ฌ ์ฌ์ฉํ๋ค.
๋ถ๋ชจ ํธ๋์ญ์ ์ด ๋กค๋ฐฑ๋๋ค ํ๋๋ผ๋ ์์ ํธ๋์ญ์ ์ ๋กค๋ฐฑ๋์ง ์๋๋ค.
์์ ํธ๋์ญ์ ์ด ๋กค๋ฐฑ๋๋ค ํ๋๋ผ๋ ํ๋๋ผ๋ ๋ถ๋ชจ ํธ๋์ญ์ ์ ๋กค๋ฐฑ๋์ง ์๋๋ค.
(๊ทธ๋ฌ๋ ์์ ํธ๋์ญ์ ์์ ๋ฐ์ํ ์์ธ๊ฐ ๋ถ๋ชจ ํธ๋์ญ์ ์์ catch๋์ง ์๊ณ ๊ฐ์ด ๋์ ธ์ง๋ ๊ฒฝ์ฐ์๋ ๋ ํธ๋์ญ์ ๋ชจ๋ ๋กค๋ฐฑ๋๋ค)
NOT_SUPPORTED
ํธ๋์ญ์ ์ด ์กด์ฌํ๋ ๊ฒฝ์ฐ ํธ๋์ญ์ ์ ์ ์ ๋ณด๋ฅ์ํค๊ณ , ํธ๋์ญ์ ์ด ์๋ ์ํ๋ก ์ฒ๋ฆฌ๋ฅผ ์ํํ๋ค.
NEVER
ํธ๋์ญ์ ์ด ์กด์ฌํ๋ ๊ฒฝ์ฐ ์์ธ๋ฅผ ๋ฐ์์ํค๊ณ , ํธ๋์ญ์ ์ด ์๋ ์ํ๋ก ์ฒ๋ฆฌ๋ฅผ ์ํํ๋ค.
NESTED
ํธ๋์ญ์ ์ด ์กด์ฌํ ๊ฒฝ์ฐ ์ค์ฒฉ๋ ํธ๋์ญ์ ์ ์์ฑํ์ฌ ์ฒ๋ฆฌ๋ฅผ ์ํํ๊ณ , ์กด์ฌํ์ง ์๋๋ค๋ฉด REQUIRED์ ๋์ผํ๊ฒ ๋์ํ๋ค.
์ค์ํ ๊ฒ์ Hibernate๋ฅผ ์ฌ์ฉํ๋ค๋ฉด ํด๋น ์ ํ ์์ฑ์ ์ฌ์ฉํ ์ ์์ผ๋ฉฐ, DataSourceTransactionManager๋ฅผ ์ง์ ์ฌ์ฉํด์ผ๋ง ์ฌ์ฉํ ์ ์์ต๋๋ค.
์ด์ ๊ด๋ จ๋ ์๋ฃ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
https://stackoverflow.com/questions/37927208/nested-transaction-in-spring-app-with-jpa-postgres
https://stackoverflow.com/questions/33180558/does-hibernate-support-nested-transactions
๋ค์ ๊ณต์๋ฌธ์์ Nested ๋ถ๋ถ - https://docs.spring.io/spring-framework/docs/4.2.x/spring-framework-reference/html/transaction.html
๐ Reference