[Spring] @Transactional

무1λ―ΌΒ·2023λ…„ 11μ›” 6일
1

Spring

λͺ©λ‘ 보기
4/9
post-thumbnail

πŸŽΆκ°œμš”

μŠ€ν”„λ§μ—μ„œ νŠΈλžœμž­μ…˜ 처리λ₯Ό μœ„ν•΄ 선언적 νŠΈλžœμž­μ…˜μ„ μ‚¬μš©ν•œλ‹€.
@Transactional은 μŠ€ν”„λ§ ν”„λ ˆμž„μ›Œν¬μ—μ„œ μ œκ³΅ν•˜λŠ” μ–΄λ…Έν…Œμ΄μ…˜μœΌλ‘œ, ν•΄λ‹Ή μ–΄λ…Έν…Œμ΄μ…˜μ„ λ©”μ†Œλ“œλ‚˜ ν΄λž˜μŠ€μ— λΆ™μž„μœΌλ‘œμ¨ ν•΄λ‹Ή λ©”μ„œλ“œλ‚˜ 클래슀 λ‚΄μ˜ μž‘μ—…μ„ νŠΈλžœμž­μ…˜μ˜ λ²”μœ„ λ‚΄μ—μ„œ μ‹€ν–‰ν•˜λ„λ‘ 지정할 수 μžˆλ‹€.
νŠΈλžœμž­μ…˜μ€ μ—¬λŸ¬ λ°μ΄ν„°λ² μ΄μŠ€ μž‘μ—…μ„ ν•˜λ‚˜μ˜ λ‹¨μœ„λ‘œ λ¬Άμ–΄μ„œ μ²˜λ¦¬ν•˜λŠ” λ°©λ²•μœΌλ‘œ, λͺ¨λ“  μž‘μ—…μ΄ μ„±κ³΅μ μœΌλ‘œ μ™„λ£Œλ˜κ±°λ‚˜ λͺ¨λ‘ μ·¨μ†Œλ˜λŠ” 것을 보μž₯ν•œλ‹€.

πŸ“–μ„€μ •

//클래슀 λ‹¨μœ„ μ„€μ •
@Service
@Transactional
public class TestService {
	public void test() {
	}	
	public void test2() {		
	}
}
//λ©”μ†Œλ“œ λ‹¨μœ„ μ„€μ •
@Service
public class TestService {
	@Transactional
	public void test() {
	}
	public void test2() {
	}
}

πŸŽλ™μž‘ 원리

  • 클래슀, λ©”μ†Œλ“œμ— @Transactional이 μ„ μ–Έλ˜λ©΄ ν•΄λ‹Ή ν΄λž˜μŠ€μ— νŠΈλžœμž­μ…˜μ΄ 적용된 ν”„λ‘μ‹œ 객체 생성
  • ν”„λ‘μ‹œ κ°μ²΄λŠ” @Transactional이 ν¬ν•¨λœ λ©”μ„œλ“œκ°€ 호좜될 경우, νŠΈλžœμž­μ…˜μ„ μ‹œμž‘ν•˜κ³  Commit or Rollback을 μˆ˜ν–‰
  • CheckedException or μ˜ˆμ™Έκ°€ 없을 λ•ŒλŠ” Commit μˆ˜ν–‰
  • UncheckedException이 λ°œμƒν•˜λ©΄ Rollback μˆ˜ν–‰

πŸ‘€μ£Όμ˜μ 

1) μš°μ„ μˆœμœ„

@Transactional은 μš°μ„ μˆœμœ„λ₯Ό 가지고 μžˆλ‹€.
클래슀 λ©”μ†Œλ“œ -> 클래슀 -> μΈν„°νŽ˜μ΄μŠ€ λ©”μ†Œλ“œ -> μΈν„°νŽ˜μ΄μŠ€
클래슀 λ©”μ†Œλ“œκ°€ κ°€μž₯ λ†’λ‹€.
λ”°λΌμ„œ, 곡톡적인 νŠΈλžœμž­μ…˜ κ·œμΉ™μ€ 클래슀, νŠΉλ³„ν•œ κ·œμΉ™μ€ λ©”μ„œλ“œμ— μ„ μ–Έν•œλ‹€.

λ˜ν•œ, μΈν„°νŽ˜μ΄μŠ€ 보닀 ν΄λž˜μŠ€μ— μ μš©ν•˜λŠ” 것을 κΆŒκ³ ν•œλ‹€.

  • μΈν„°νŽ˜μ΄μŠ€λ‚˜ μΈν„°νŽ˜μ΄μŠ€μ˜ λ©”μ„œλ“œμ— μ μš©ν•˜λ©΄ μΈν„°νŽ˜μ΄μŠ€ 기반 ν”„λ‘μ‹œμ—μ„œλ§Œ μœ νš¨ν•œ νŠΈλžœμž­μ…˜ 섀정이 λœλ‹€.
  • μžλ°” μ–΄λ…Έν…Œμ΄μ…˜μ€ μΈν„°νŽ˜μ΄μŠ€λ‘œλΆ€ν„° μƒμ†λ˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ— 클래슀 기반 ν”„λ‘μ‹œμ—μ„œ νŠΈλžœμž­μ…˜ 섀정을 인식할 수 μ—†λ‹€.

2) νŠΈλžœμž­μ…˜ λͺ¨λ“œ

@Transactional은 Proxy Mode와 AspectJ Modeκ°€ μžˆλŠ”λ° defaultλŠ” Proxy Mode이닀.

  • Proxy Mode
    • λ°˜λ“œμ‹œ public λ©”μ„œλ“œμ— μ μš©λ˜μ–΄μ•Ό ν•œλ‹€.
    • @Transactional이 μ μš©λ˜μ§€ μ•Šμ€ Public Methodμ—μ„œ @Transactional이 적용된 Public Methodλ₯Ό ν˜ΈμΆœν•  경우, νŠΈλžœμž­μ…˜μ΄ λ™μž‘ν•˜μ§€ μ•ŠλŠ”λ‹€.
profile
μ•Όν˜Έ

0개의 λŒ“κΈ€