Transaction
ํํ java์์ ํธ๋์ญ์
์ฌ์ฉ์ try catch
๋ฌธ ์ฌ์ด์ commit๊ณผ Rollback์ ์ด์ฉํ์ฌ ์ฒ๋ฆฌํ๋ค.
reSpring์์๋ ์ด๋ฌํ ๋ฐ๋ณต์ ์ธ ์์ ์ ๋ ๊ฐ์ง ๋ฐฉ๋ฒ์ผ๋ก ํ๋ฒ์ ํด๊ฒฐํ ์ ์๋ค.
์ ์ธ์ ์ํ ํธ๋์ญ์
ํ๋ก๊ทธ๋จ์ ์ํ ํธ๋์ญ์
์ ์ธ์ ์ํ ํธ๋์ญ์
์ ์ธ์ ์ํ ํธ๋์ญ์ ์๋ ๋๊ฐ์ง(1. AOP 2. annotation) ๋ฐฉ๋ฒ์ด ์๋ค.
@Transactional Annotation
์ฐ์ annotation ์ฌ์ฉ์ ์ํ bean ์ค์ ์ ํด์ค๋ค.
๋ค์๊ณผ ๊ฐ์ด ์ค์ ํ ์ํ๋ ๋ฉ์๋ ์์ @Transactional
์ ๋ถ์ฌ ๊ฐํธํ๊ฒ ํธ๋์ญ์
์ ๊ตฌํํ ์ ์๋ค.
๋ฉ์๋ ์ ์ฒด๋ฅผ ํ๋์ ํธ๋์ญ์
์ผ๋ก ๋ฌถ์ ์ ์๋ค๋ ๊ฒ์@Transactional
์ ๋ด๋ถ ๋์์ด Proxy๋ก ์ด๋ฃจ์ด์ง๋ค๋ ๊ฒ์ ์๋ฏธํ๋ค.
@Transactional
์ด ์ ์ฉ๋ ๊ฒฝ์ฐ ํธ๋์ญ์
๊ธฐ๋ฅ์ด ์ ์ฉ๋ ํ๋ก์ ๊ฐ์ฒด๊ฐ ์์ฑ๋๋ค.
์ด ํ๋ก์ ๊ฐ์ฒด๋ @Transactional
์ด ํฌํจ๋ ๋ฉ์๋๊ฐ ํธ์ถ๋๋ฉด, PlatformTransactionManager๋ฅผ ์ฌ์ฉํ์ฌ ํธ๋์ญ์
์ ์์ํ๊ณ , ๊ฒฐ๊ณผ์ ์ ์ ์ฌ๋ถ์ ๋ฐ๋ผ Commit ๋๋ Rollback ํ๋ค.
@Transactional
์ด๋
ธํ
์ด์
์ ์ฌ๋ฌ๊ฐ์ง ์์ฑ์ ์ง์ ํ ์ ์๋ค.
isolation
๊ฒฉ๋ฆฌ์์ค(ํธ๋์ญ์ ์์ ์ผ๊ด์ฑ์ด ์๋ ๋ฐ์ดํฐ๋ฅผ ํ์ฉํ๋๋ก ํ๋ ์์ค)์ ๋งํ๋๋ฐ ์ต์ ์ ๋ค์๊ณผ ๊ฐ๋ค.
level | ์ต์ | ์ค๋ช |
level 0 | READ_UNCOMMITTED | ํธ๋์ญ์ ์ ์ฒ๋ฆฌ์ค์ธ or ์์ง commit(ํ์ )๋์ง ์์ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฅธ ํธ๋์ญ์ ์ด ์ฝ๋ ๊ฒ์ ํ์ฉํ๋ค. ex) ํ ์ฌ์ฉ์๊ฐ A๋ผ๋ ๋ฐ์ดํฐ๋ฅผ B๋ผ๋ ๋ฐ์ดํฐ๋ก ๋ณ๊ฒฝํ๋ ๋์ ๋ค๋ฅธ ์ฌ์ฉ์๋ ์์ง ์๋ฃ๋์ง์์(Uncommitted or Dirty) ๋ฐ์ดํฐ B'๋ฅผ ์ฝ์ ์ ์๋ค. |
level 1 | READ_COMMITTED | Dirty Read๋ฅผ ๋ฐฉ์งํ๋ค. ์ฆ, ํธ๋์ญ์ ์ด commit๋์ด ํ์ ๋ ๋ฐ์ดํฐ๋ง์ ์ฝ๋ ๊ฒ์ ํ์ฉํ๋ค. ex) ํ ์ฌ์ฉ์๊ฐ A๋ผ๋ ๋ฐ์ดํฐ๋ฅผ B๋ผ๋ ๋ฐ์ดํฐ๋ก ๋ณ๊ฒฝํ๋ ๋์ ๋ค๋ฅธ ์ฌ์ฉ์๋ ํด๋น ๋ฐ์ดํฐ์ ์ ๊ทผํ ์ ์๋ค. |
level 2 | REPEATABLE_READ | ํธ๋์ญ์ ์ด ์๋ฃ๋ ๋๊น์ง SELECT๋ฌธ์ด ์ฌ์ฉํ๋ ๋ชจ๋ ๋ฐ์ดํฐ์ shared lock์ด ๊ฑธ๋ฆฐ๋ค. ๋ค๋ฅธ ์ฌ์ฉ์๋ ๊ทธ ์์ญ์ ํด๋น๋๋ ๋ฐ์ดํฐ์ ๋ํ ์์ ์ด ๋ถ๊ฐ๋ฅํ๋ค. ์ ํ ํธ๋์ญ์ ์ด ์ฝ์ ๋ฐ์ดํฐ๋ ํธ๋์ญ์ ์ด ์ข ๋ฃ๋ ๋๊น์ง ํํ ํธ๋์ญ์ ์ด ๊ฐฑ์ ํ๊ฑฐ๋ ์ญ์ ํ๋ ๊ฒ์ ๋ถํํจ์ผ๋ก์จ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ๋ ๋ฒ ์ฟผ๋ฆฌํ์ ๋ ์ผ๊ด์ฑ ์๋ ๊ฒฐ๊ณผ๋ฅผ ๋ฆฌํดํจ |
level 3 | SERIALIZABLE | ์๋ฒฝํ ์ฝ๊ธฐ ์ผ๊ด์ฑ ๋ชจ๋๋ฅผ ์ ๊ณตํ๋ค. ๋ฐ์ดํฐ์ ์ผ๊ด์ฑ ๋ฐ ๋์์ฑ์ ์ํด MVCC๋ฅผ ์ฌ์ฉํ์ง ์๋๋ค. ํธ๋์ญ์ ์ด ์๋ฃ๋ ๋๊น์ง SELECT ๋ฌธ์ฅ์ด ์ฌ์ฉํ๋ ๋ชจ๋ ๋ฐ์ดํฐ์ shared lock์ด ๊ฑธ๋ฆฌ๋ฏ๋ก ๋ค๋ฅธ ์ฌ์ฉ์๋ ๊ทธ ์์ญ์ ํด๋น๋๋ ๋ฐ์ดํฐ์ ๋ํ ์์ ๋ฐ ์ ๋ ฅ์ด ๋ถ๊ฐ๋ฅํ๋ค. |
Dirty read
์์ ๊ฐ์ด ๋ค๋ฅธ ํธ๋์ญ์ ์์ ์ฒ๋ฆฌํ๋ ์์ ์ด ์๋ฃ๋์ง ์์๋๋ฐ๋ ๋ค๋ฅธ ํธ๋์ญ์ ์์ ๋ณผ ์ ์๋ ํ์์ dirty read ๋ผ๊ณ ํ๋ฉฐ, READ UNCOMMITTED ๊ฒฉ๋ฆฌ์์ค์์๋ง ์ผ์ด๋๋ ํ์
MVVC(Multi Version Concurrency Control)
MVCC๋ ๋ค์ค ์ฌ์ฉ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฑ๋ฅ์ ์ํ ๊ธฐ์ ๋ก ๋ฐ์ดํฐ ์กฐํ ์ LOCK์ ์ฌ์ฉํ์ง ์๊ณ ๋ฐ์ดํฐ์ ๋ฒ์ ์ ๊ด๋ฆฌํด ๋ฐ์ดํฐ์ ์ผ๊ด์ฑ ๋ฐ ๋์์ฑ์ ๋์ด๋ ๊ธฐ์
propagation
ํธ๋์ญ์ ๋์ ๋์ค์ ๋ค๋ฅธ ํธ๋์ญ์ ์ ์คํํด์ผํ๋ ์ํฉ์ด ์์ฃผ ๋ฐ์ํ๊ฒ ๋๋๋ฐ, ํธ์ถ๋๋ ํธ๋์ญ์ ์ ์ ์ฅ์์๋ ํธ์ถํ ํธ๋์ญ์ ์ ๊ทธ๋๋ก ์ฌ์ฉํ ์๋ ์๊ณ , ์๋ก์ด ํธ๋์ญ์ ์ ์์ฑํ ์๋ ์๋ค.
ํธ์ถํ ํธ๋์ญ์ ์ ๊ทธ๋๋ก ์ฌ์ฉํ ๊ฒฝ์ฐ ์ค๊ฐ์ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ฉด ๋ชจ๋ ํธ๋์ญ์ ์ด ๋กค๋ฐฑ์ด ๋๋ค.
์๋ก์ด ํธ๋์ญ์ ์ ์์ฑํ ๊ฒฝ์ฐ ์ค๊ฐ์ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ฉด ์ค๋ฅ๊ฐ ๋ฐ์ํ ํธ๋์ญ์ ์ด ๋กค๋ฐฑ ๋ ๊ฒ์ด๋ค.
์ด๋ฌํ ํธ๋์ญ์ ๊ด๋ จ ์ค์ ์ @Transactional์ propagation ์์ฑ์ ํตํด ์ง์ ํ ์ ์๋ค.
propagation ์์ฑ | ์ค๋ช |
REQUIRED | ๋ถ๋ชจ ํธ๋์ญ์ ๋ด์์ ์คํํ๋ฉฐ ๋ถ๋ชจ ํธ๋์ญ์ ์ด ์์ ๊ฒฝ์ฐ ์๋ก์ด ํธ๋์ญ์ ์ ์์ฑ |
REQUIRES_NEW | ๋ถ๋ชจ ํธ๋์ญ์ ์ ๋ฌด์ํ๊ณ ๋ฌด์กฐ๊ฑด ์๋ก์ด ํธ๋์ญ์ ์ด ์์ฑ |
MANDATORY | ๋ถ๋ชจ ํธ๋์ญ์ ๋ด์์ ์คํ๋๋ฉฐ ๋ถ๋ชจ ํธ๋์ญ์ ์ด ์์ ๊ฒฝ์ฐ ์์ธ๊ฐ ๋ฐ์ |
SUPPORTS | ๋ถ๋ชจ ํธ๋์ญ์ ๋ด์์ ์คํํ๋ฉฐ ๋ถ๋ชจ ํธ๋์ญ์ ์ด ์์ ๊ฒฝ์ฐ nontransactionally๋ก ์คํ |
NOT_SUPPORTED | nontransactionally๋ก ์คํํ๋ฉฐ ๋ถ๋ชจ ํธ๋์ญ์ ๋ด์์ ์คํ๋ ๊ฒฝ์ฐ ์ผ์ ์ ์ง |
NEVER | nontransactionally๋ก ์คํ๋๋ฉฐ ๋ถ๋ชจ ํธ๋์ญ์ ์ด ์กด์ฌํ๋ค๋ฉด ์์ธ๊ฐ ๋ฐ์ |
NESTED | ํด๋น ๋ฉ์๋๊ฐ ๋ถ๋ชจ ํธ๋์ญ์ ์์ ์งํ๋ ๊ฒฝ์ฐ ๋ณ๊ฐ๋ก ์ปค๋ฐ๋๊ฑฐ๋ ๋กค๋ฐฑ๋ ์ ์๋ค. ๋๋ฌ์ผ ํธ๋์ญ์ ์ด ์์ ๊ฒฝ์ฐ REQUIRED์ ๋์ผํ๊ฒ ์๋ |
rollback-for
ํน์ ์์ธ๊ฐ ๋ฐ์ํ์ ๊ฒฝ์ฐ์ ๋กค๋ฐฑ๋๋๋ก ์ค์ ํ๋ค. ์ค์ ํ์ง ์์ ๊ฒฝ์ฐ ์ค๋ก์ง RuntimeException์ ์์๋ฐ์ ์์ธ์๋ง ๋กค๋ฐฑ์ฒ๋ฆฌ๋ฅผ ํด์ค๋ค.
no-rollback-for
ํน์ ์์ธ๊ฐ ๋ฐ์ํ๋๋ผ๋ ๋กค๋ฐฑ๋์ง ์๋๋ก ์ค์ ํ๋ค.
์ฐธ์กฐ
Last updated