2022-07-03 TIL
Spring Transaction Propagation Options
๊น์ํ๋ ์คํ๋ง DB 2ํธ - ๋ฐ์ดํฐ ์ ๊ทผ ๊ธฐ์ ํ์ฉ ๊ฐ์๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ ๋ฆฌํ ๋ด์ฉ์ ๋๋ค.
REQUIRED
๊ฐ์ฅ ๋ง์ด ์ฌ์ฉ๋๋ default ์ค์ . ๊ธฐ์กด ํธ๋์ญ์
์ด ์์ผ๋ฉด ์์ฑํ๊ณ ์์ผ๋ฉด ์ฐธ์ฌํ๋ค.
ํธ๋์ญ์
์ด ํ์๋ผ๋ ์๋ฏธ๋ก ์ดํดํ๋ฉด ๋๋ค(ํ์์ด๊ธฐ ๋๋ฌธ์ ์์ผ๋ฉด ๋ง๋ค๊ณ , ์์ผ๋ฉด ์ฐธ์ฌํ๋ค)
์ค๋ฌด์์ ๋๋ถ๋ถ REQUIRED
์ฌ์ฉ
- ๊ธฐ์กด ํธ๋์ญ์ ์์: ์๋ก์ด ํธ๋์ญ์ ์์ฑ
- ๊ธฐ์กด ํธ๋์ญ์ ์์: ๊ธฐ์กด ํธ๋์ญ์ ์ ์ฐธ์ฌ
REQUIRES_NEW ํญ์ ์๋ก์ด ํธ๋์ญ์ ์ ์์ฑ
- ๊ธฐ์กด ํธ๋์ญ์ ์์: ์๋ก์ด ํธ๋์ญ์ ์์ฑ
- ๊ธฐ์กด ํธ๋์ญ์ ์์: ์๋ก์ด ํธ๋์ญ์ ์์ฑ
SUPPORT ํธ๋์ญ์ ๋ ์ง์ํ๋ค๋ ๋ป์ด๋ค. ๊ธฐ์กด ํธ๋์ญ์ ์ด ์์ผ๋ฉด ์๋๋๋ก ์งํํ๊ณ , ์์ผ๋ฉด ์ฐธ์ฌํ๋ค.
- ๊ธฐ์กด ํธ๋์ญ์ ์์: ํธ๋์ญ์ ์์ด ๋ก์ง ์ํ
- ๊ธฐ์กด ํธ๋์ญ์ ์์: ๊ธฐ์กด ํธ๋์ญ์ ์ฐธ์ฌ
NOT_SUPPORTED ํธ๋์ญ์ ์ ์ง์ํ์ง ์๋๋ค.
- ๊ธฐ์กด ํธ๋์ญ์ ์์: ํธ๋์ญ์ ์์ด ๋ก์ง ์ํ
- ๊ธฐ์กด ํธ๋์ญ์ ์์: ํธ๋์ญ์ ์์ด ๋ก์ง ์ํ(๊ธฐ์กด ํธ๋์ญ์ ์ ๋ณด๋ฅํ๋ค)
MANDATORY ์๋ฌด์ฌํญ์ด๋ค. ๊ธฐ์กด ํธ๋์ญ์ ์ด ๋ฐ๋์ ์์ด์ผ ํ๋ค. ๊ธฐ์กด ํธ๋์ญ์ ์ด ์์ผ๋ฉด ์์ธ๊ฐ ๋ฐ์ํ๋ค.
- ๊ธฐ์กด ํธ๋์ญ์
์์:
IllegalTransactionStateException
๋ฐ์ - ๊ธฐ์กด ํธ๋์ญ์ ์์: ๊ธฐ์กด ํธ๋์ญ์ ์ ์ฐธ์ฌ
NEVER ํธ๋์ญ์ ์ ์ฌ์ฉํ์ง ์๋๋ค. ๊ธฐ์กด ํธ๋์ญ์ ์ด ์์ผ๋ฉด ์์ธ๊ฐ ๋ฐ์. ๊ธฐ์กด ํธ๋์ญ์ ๋ ํ์ฉํ์ง ์๋ ๊ฐํ ๋ถ์ ์ ์๋ฏธ๋ก ์ดํดํ๋ฉด ๋๋ค.
- ๊ธฐ์กด ํธ๋์ญ์ ์์: ํธ๋์ญ์ ์์ด ์งํ
- ๊ธฐ์กด ํธ๋์ญ์
์์:
IllegalTransactionStateException
๋ฐ์
NESTED
- ๊ธฐ์กด ํธ๋์ญ์ ์์: ์๋ก์ด ํธ๋์ญ์ ์์ฑ
- ๊ธฐ์กด ํธ๋์ญ์
์์: ์ค์ฒฉ ํธ๋์ญ์
์ ๋ง๋ ๋ค.
- ์ค์ฒฉ ํธ๋์ญ์ ์ ์ธ๋ถ ํธ๋์ญ์ ์ ์ํฅ์ ๋ฐ์ง๋ง, ์ค์ฒฉ ํธ๋์ญ์ ์ ์ธ๋ถ์ ์ํฅ์ ์ฃผ์ง ์๋๋ค.
- ์ค์ฒฉ ํธ๋์ญ์ ์ด ๋กค๋ฐฑ ๋์ด๋ ์ธ๋ถ ํธ๋์ญ์ ์ ์ปค๋ฐํ ์ ์๋ค.
- ์ธ๋ถ ํธ๋์ญ์
์ด ๋กค๋ฐฑ๋๋ฉด ์ค์ฒฉ ํธ๋์ญ์
๋ ํจ๊ป ๋กค๋ฐฑ๋๋ค. (
REQUIRES_NEW
๋ ์ฐจ์ด์ )
- NESTED๋ JPA์์ ์ง์ํ์ง ์์.
Method Signature
๋ฉ์๋ ์๊ทธ๋์ฒ๋ ์๋ฐ ํด๋์ค ๋ด์์ ๋ฉ์๋๋ฅผ ๊ตฌ๋ถํ๋ ์ญํ ์ ํ๋ค. ํ๋์ ํด๋์ค ๋ด์์ ๋ ๋ฉ์๋๊ฐ ๋ค์ ์กฐ๊ฑด์ ๋ง์กฑํ๋ฉด ๊ฐ์ Signature๋ฅผ ๊ฐ์ง๋ค๊ณ ํ ์ ์๋ค.
- ๋ฉ์๋ ์ด๋ฆ
- ํ๋ผ๋ฏธํฐ ์
- ํ๋ผ๋ฏธํฐ ํ์ ์ ์์
Example
public class Temp {
public String myMethod(String s1, Integer i1) { }
public String myMethod(String s2, Integer i2) { }
}
์ ์ฝ๋๋ฅผ ๋ณด์. ๋น๋ก ํ๋ผ๋ฏธํฐ ์ด๋ฆ์ด s1, s2๊ฐ ๋ค๋ฅด์ง๋ง ๋๊ฐ์ String ํ์ ์ด๊ณ , ๋ ๋ฒ์งธ ํ๋ผ๋ฏธํฐ ์ญ์ ์ด๋ฆ์ ๋ค๋ฅผ์ง์ธ์ ํ์ ์ ๋์ผํ๋ค. ์ค์ํ ์ ์ method signature๊ฐ ๊ฐ์ ๋ฉ์๋๊ฐ ๊ฐ์ ํด๋์ค์ 2๊ฐ ์ด์ ์กด์ฌํ ์ ์๊ธฐ ๋๋ฌธ์ ์ ํด๋์ค๋ ์ปดํ์ผ์ด ๋ถ๊ฐ๋ฅํ๋ค๋ ์ ์ด๋ค. return type์ method signature์ ํฌํจ๋์ง ์๋๋ค. ๋ง์ฝ return type์ด method signature์ ํฌํจ๋๋ค๋ฉด ์ ๋งคํด์ง๋ ๊ฒฝ์ฐ๊ฐ ๋ฐ์ํ๋ค. ์ด๋ฆ๊ณผ ํ๋ผ๋ฏธํฐ ์, ํ์ ์ ๊ฐใ ๋๋ฐ ํ๋๋ Integer, ๋ค๋ฅธ ํ๋๋ Double์ ๋ฐํํ๋ค๋ฉด JVM์ ์ด๋ค ๋ฉ์๋๋ฅผ ํธ์ถํ ์ง ๊ฒฐ์ ํ์ง ๋ชปํ๋ค. ์ด๋ฐ ์ํฉ์ด ๋ฐ์ํ ์ ์๊ธฐ ๋๋ฌธ์ return type์ method signature์ ํฌํจ๋์ง ์๋๋ค.
๋๊ธ๋จ๊ธฐ๊ธฐ