[Spring] πŸ’Ύ νŠΈλžœμž­μ…˜ (Transaction)

shrΒ·2022λ…„ 2μ›” 28일
0

Concept

λͺ©λ‘ 보기
6/13
post-thumbnail

νŠΈλžœμž­μ…˜ (Transaction)


λ°μ΄ν„°λ² μ΄μŠ€μ˜ μƒνƒœλ₯Ό λ³€ν™˜μ‹œν‚€λŠ” μž‘μ—…μ˜ λ‹¨μœ„ ν˜Ήμ€ ν•˜λ‚˜μ˜ 논리적인 κΈ°λŠ₯을 μˆ˜ν–‰ν•˜κΈ° μœ„ν•΄ ν•œλ²ˆμ— λͺ¨λ‘ μˆ˜ν–‰λ˜μ–΄μ•Ό ν•  연산듀을 μ˜λ―Έν•œλ‹€.

κ³„μ’Œ μ΄μ²΄λΌλŠ” μž‘μ—…μ„ ν•  λ•Œ, aκ³„μ’Œ.좜금()κ³Ό bκ³„μ’Œ.μž…κΈˆ()μ΄λΌλŠ” 두 가지 일이 합쳐져 κ³„μ’Œ μ΄μ²΄λΌλŠ” ν•˜λ‚˜μ˜ 논리적 κΈ°λŠ₯을 μ΄λ£¨λŠ” 것을 μ˜ˆμ‹œλ‘œ λ“€ 수 μžˆλ‹€.


νŠΈλžœμž­μ…˜ μ„±μ§ˆ


μ›μžμ„±(Atomicity)

νŠΈλžœμž­μ…˜μ€ λ°μ΄ν„°λ² μ΄μŠ€μ— λͺ¨λ‘ λ°˜μ˜λ˜κ±°λ‚˜, μ „ν˜€ λ°˜μ˜λ˜μ§€ μ•Šμ•„μ•Ό ν•œλ‹€. 예λ₯Ό λ“€μ–΄, κ³„μ’Œ 이체 κ³Όμ •μ—μ„œ aκ³„μ’Œμ—μ„œ λ§Œμ›μ„ μΈμΆœν–ˆλŠ”λ° bκ³„μ’Œμ— λ§Œμ›μ„ μž…κΈˆν•˜μ§€ μ•ŠλŠ” κ²½μš°κ°€ λ°œμƒν•΄μ„œλŠ” μ•ˆ λœλ‹€.

일관성 (Consistency)

일관적인 λ°μ΄ν„°λ² μ΄μŠ€ μƒνƒœλ₯Ό μœ μ§€ν•΄μ•Ό ν•œλ‹€. λ°μ΄ν„°λ² μ΄μŠ€ κ³ μ • μš”μ†ŒλŠ” νŠΈλžœμž­μ…˜ μˆ˜ν–‰ μ „κ³Ό νŠΈλžœμž­μ…˜ μˆ˜ν–‰ ν›„μ˜ μƒνƒœκ°€ κ°™μ•„μ•Ό 함을 μ˜λ―Έν•œλ‹€.

독립성 (Isolation)

λ™μ‹œμ— μ‹€ν–‰λ˜λŠ” νŠΈλžœμž­μ…˜λ“€μ΄ μ„œλ‘œ 영ν–₯을 λΌμΉ˜μ§€ μ•Šμ•„μ•Ό ν•œλ‹€.

μ˜κ΅¬μ„± (Durability)

μ„±κ³΅μ μœΌλ‘œ μ™„λ£Œλœ νŠΈλžœμž­μ…˜μ˜ κ²°κ³ΌλŠ” 항상 μ €μž₯λ˜μ–΄μ•Ό ν•œλ‹€.


νŠΈλžœμž­μ…˜ μ—°μ‚°


Commit

νŠΈλžœμž­μ…˜ μž‘μ—…μ„ μ„±κ³΅μ μœΌλ‘œ 마치고 λ°μ΄ν„°λ² μ΄μŠ€κ°€ λ‹€μ‹œ μΌκ΄€λœ μƒνƒœκ°€ λ˜μ—ˆμ„ λ•Œ, 갱신이 μ™„λ£Œλ˜μ—ˆμŒμ„ μ•Œλ¦¬λŠ” 연산이닀.

Rollback

νŠΈλžœμž­μ…˜ μž‘μ—… 도쀑 였λ₯˜κ°€ λ°œμƒν–ˆμ„ λ•Œ, 일뢀가 μ •μƒμ μœΌλ‘œ μ²˜λ¦¬λ˜μ—ˆλ”λΌλ„ νŠΈλžœμž­μ…˜μ΄ ν–‰ν•œ λͺ¨λ“  연산을 μ·¨μ†Œ(Undo)ν•˜λŠ” 연산이닀.


νŠΈλžœμž­μ…˜ 처리 방법


μŠ€ν”„λ§μ—μ„œλŠ” μ–΄λ…Έν…Œμ΄μ…˜ λ°©μ‹μœΌλ‘œ @Transactional을 λ©”μ†Œλ“œ, 클래슀, μΈν„°νŽ˜μ΄μŠ€ μœ„μ— μ„ μ–Έν•˜μ—¬ μ‚¬μš©ν•˜λŠ” 방법이 일반적이며 이λ₯Ό 선언적 νŠΈλžœμž­μ…˜μ΄λΌκ³  ν•œλ‹€. 적용된 λ²”μœ„ λ‚΄μ—μ„œλŠ” νŠΈλžœμž­μ…˜ κΈ°λŠ₯이 ν¬ν•¨λœ ν”„λ‘μ‹œ 객체가 μƒμ„±λ˜μ–΄ μžλ™μœΌλ‘œ commit ν˜Ήμ€ rollback을 μ§„ν–‰ν•œλ‹€.

πŸ’‘ ν”„λ‘μ‹œ 객체

객체λ₯Ό 감싸고 μžˆλŠ” 객체λ₯Ό λ§ν•œλ‹€. 기쑴의 객체와 νƒ€μž…μ€ λ™μΌν•˜λ‹€. 접근을 μ œμ–΄ν•˜κ³  μ‹Άκ±°λ‚˜, λΆ€κ°€ κΈ°λŠ₯을 μΆ”κ°€ν•˜κ³  싢을 λ•Œ μ‚¬μš©ν•œλ‹€.


참고 자료


[Java]@Transactional Annotation μ•Œκ³  μ“°μž
[Spring] Transactional 정리 및 예제
[Java] νŠΈλžœμž­μ…˜ μ²˜λ¦¬ν•˜κΈ°

profile
λͺ»ν•˜λ‹€ 보면 μž˜ν•˜κ²Œ λ˜λŠ” κ±°μ•Ό ο½₯α΄—ο½₯Μ₯Μ₯Μ₯

0개의 λŒ“κΈ€