λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
πŸ’‘CS/Database

[Database] νŠΈλžœμ μ…˜ (Transaction)

by hyeon-z 2023. 6. 16.

 

νŠΈλžœμ μ…˜μ΄λž€?

 

λ°μ΄ν„°λ² μ΄μŠ€μ˜ μƒνƒœλ₯Ό λ³€ν™˜μ‹œν‚€λŠ” ν•˜λ‚˜μ˜ 논리적 κΈ°λŠ₯을 μˆ˜ν–‰ν•˜κΈ° μœ„ν•œ μž‘μ—…μ˜ λ‹¨μœ„ λ˜λŠ” ν•œκΊΌλ²ˆμ— λͺ¨λ‘ μˆ˜ν–‰λ˜μ–΄μ•Ό ν•  일련의 μ—°μ‚°λ“€


νŠΈλžœμ μ…˜μ˜ μ„±μ§ˆ (ACID)

 

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

- All or Nothing

- νŠΈλžœμž­μ…˜μ€ "μ „λΆ€ μ„±κ³΅"ν•˜κ±°λ‚˜ "μ „λΆ€ μ‹€νŒ¨"ν•˜λŠ” μ›μžμ μΈ λ‹¨μœ„λ‘œ μ²˜λ¦¬λ˜μ–΄μ•Ό ν•œλ‹€.

- ν•˜λ‚˜μ˜ νŠΈλžœμž­μ…˜ λ‚΄μ—μ„œ μˆ˜ν–‰λ˜λŠ” λͺ¨λ“  연산은 λͺ¨λ‘ μ„±κ³΅ν•΄μ•Όλ§Œ λ°μ΄ν„°λ² μ΄μŠ€ μƒνƒœκ°€ λ³€κ²½λ˜κ³ , μ–΄λА ν•˜λ‚˜λΌλ„ μ‹€νŒ¨ν•˜λŠ” 경우 이전 μƒνƒœλ‘œ λ‘€λ°±(νŠΈλžœμ μ…˜ μ „λΆ€ μ·¨μ†Œ)λœλ‹€.

 

Consistency (일관성)

 

- νŠΈλžœμž­μ…˜ μˆ˜ν–‰ μ „κ³Ό μˆ˜ν–‰ 후에 λ°μ΄ν„°λ² μ΄μŠ€κ°€ λ™μΌν•œ κ·œμΉ™κ³Ό μ œμ•½μ‘°κ±΄μ„ λ”°λ₯΄λ©°, 데이터 간에 μΌμΉ˜μ„±μ΄ μœ μ§€ν•΄μ•Ό ν•œλ‹€.

 

ex) 은행 μ†‘κΈˆ κΈ°λŠ₯μ—μ„œ νŠΈλžœμ μ…˜ μˆ˜ν–‰ μ΄μ „μ˜ μ†‘κΈˆμžμ™€ 수금자의 μž”μ•± 합이 μˆ˜ν–‰ 후에 λ‹¬λΌμ§€κ±°λ‚˜, ν˜Ήμ€ μž”μ•‘μ„ λ‚˜νƒ€λ‚΄λŠ” μžλ£Œν˜•μ΄ μ •μˆ˜ν˜•μ—μ„œ λ¬Έμžμ—΄λ‘œ λ°”λ€ŒλŠ” λ“±μ˜ λͺ¨μˆœμ΄ λ°œμƒν•˜λ©΄ μ•ˆ λœλ‹€.

 

Isolation (독립성, 격리성)

 

- λ‘˜ μ΄μƒμ˜ νŠΈλžœμž­μ…˜μ΄ λ™μ‹œμ— 병행 μ‹€ν–‰λ˜λŠ” 경우 μ–΄λŠ ν•˜λ‚˜μ˜ νŠΈλžœμž­μ…˜ μ‹€ν–‰ 쀑에 λ‹€λ₯Έ νŠΈλžœμž­μ…˜μ˜ 연산이 끼어듀 수 μ—†λ‹€.

- μˆ˜ν–‰ 쀑인 νŠΈλžœμž­μ…˜μ€ μ™„μ „νžˆ μ™„λ£Œλ  λ•ŒκΉŒμ§€ λ‹€λ₯Έ νŠΈλžœμž­μ…˜μ—μ„œ μˆ˜ν–‰ κ²°κ³Όλ₯Ό κ°€μ Έμ˜¬ 수 μ—†λ‹€.

 

Durability (μ˜μ†μ„±, 지속성)

 

- νŠΈλžœμž­μ…˜μ΄ μ„±κ³΅μ μœΌλ‘œ μ™„λ£Œλ˜λ©΄, κ·Έ κ²°κ³ΌλŠ” 영ꡬ적으둜 μœ μ§€λ˜μ–΄μ•Ό ν•œλ‹€. μ‹œμŠ€ν…œ μž₯μ• λ‚˜ 전원 μž₯μ•  λ“±μ˜ 상황이 λ°œμƒν•΄λ„, νŠΈλžœμž­μ…˜μ˜ κ²°κ³ΌλŠ” 영ꡬ적으둜 λ°˜μ˜λ˜μ–΄μ•Ό ν•œλ‹€.


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

 

Commit

 

- ν•˜λ‚˜μ˜ νŠΈλžœμž­μ…˜μ΄ μ„±κ³΅μ μœΌλ‘œ μ’…λ£Œλœ ν›„, λ°μ΄ν„°λ² μ΄μŠ€κ°€ μΌκ΄€λœ μƒνƒœλ₯Ό μœ μ§€ν•  λ•Œ κ°±μ‹  연산이 μ™„λ£Œλ˜μ—ˆλ‹€κ³  νŠΈλžœμž­μ…˜ κ΄€λ¦¬μžμ—κ²Œ μ•Œλ €μ£Όκ³  κ²°κ³Όλ₯Ό μ΅œμ’…μ μœΌλ‘œ λ°μ΄ν„°λ² μ΄μŠ€μ— λ°˜μ˜ν•˜λŠ” μ—°μ‚°

 

Rollback

 

- ν•˜λ‚˜μ˜ νŠΈλžœμž­μ…˜ μ²˜λ¦¬κ°€ λΉ„μ •μƒμ μœΌλ‘œ μ’…λ£Œλ˜μ–΄ λ°μ΄ν„°λ² μ΄μŠ€μ˜ 일관성을 κΉ¨λœ¨λ Έμ„ λ•Œ, 이 νŠΈλžœμž­μ…˜μ˜ 일뢀가 μ •μƒμ μœΌλ‘œ μ²˜λ¦¬λ˜μ—ˆλ”λΌλ„ νŠΈλžœμž­μ…˜μ˜ μ›μžμ„±μ„ κ΅¬ν˜„ν•˜κΈ° μœ„ν•΄ 이 νŠΈλžœμž­μ…˜μ΄ ν–‰ν•œ λͺ¨λ“  연산을 μ·¨μ†Œ(Undo)ν•˜λŠ” μ—°μ‚°

- νŠΈλžœμž­μ…˜μ˜ μ–΄λŠ μ‹œμ μ—μ„œ λ¬Έμ œκ°€ λ°œμƒν•˜λ©΄ Rollback이 μ‹€ν–‰λ˜μ–΄ 이전에 μˆ˜ν–‰λœ λͺ¨λ“  연산을 μ·¨μ†Œν•˜κ³  λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό 이전 μƒνƒœλ‘œ λ˜λŒλ¦°λ‹€. 즉, νŠΈλžœμž­μ…˜μ˜ μž‘μ—…μ„ μ·¨μ†Œν•˜κ³  λ³€κ²½λœ 데이터λ₯Ό μ›λž˜μ˜ μƒνƒœλ‘œ λ³΅μ›ν•œλ‹€.


νŠΈλžœμ μ…˜μ˜ μƒνƒœ

 

 

1. ν™œμ„±ν™”(Active) : νŠΈλžœμž­μ…˜μ΄ μž‘μ—…μ„ μ‹œμž‘ν•˜μ—¬ μ‹€ν–‰ 쀑인 μƒνƒœ

2. μ‹€νŒ¨(Failed) : νŠΈλžœμž­μ…˜μ— 였λ₯˜κ°€ λ°œμƒν•˜μ—¬ 싀행이 μ€‘λ‹¨λœ μƒνƒœ

3. 철회(Aborted) : νŠΈλžœμž­μ…˜μ΄ λΉ„μ •μƒμ μœΌλ‘œ μ’…λ£Œλ˜μ–΄ Rollback 연산을 μˆ˜ν–‰ν•œ μƒνƒœ

4. λΆ€λΆ„ μ™„λ£Œ(Partially Committed) : νŠΈλžœμž­μ…˜μ˜ λ§ˆμ§€λ§‰ μ—°μ‚°κΉŒμ§€ μ‹€ν–‰ν•˜κ³  commit이 되기 μ§μ „μ˜ μƒνƒœ. (λ°μ΄ν„°λ² μ΄μŠ€μ— 아직 λ°˜μ˜ν•˜μ§€ μ•Šμ€ μƒνƒœ)

5. μ™„λ£Œ(Committed) : νŠΈλžœμž­μ…˜μ΄ μ„±κ³΅μ μœΌλ‘œ μ’…λ£Œλ˜μ–΄ commit 연산을 μ‹€ν–‰ν•œ ν›„μ˜ μƒνƒœ (λ°μ΄ν„°λ² μ΄μŠ€μ— 반영)

 

 

Reference

[DB기초] νŠΈλžœμž­μ…˜μ΄λž€ λ¬΄μ—‡μΈκ°€?

[λ°μ΄ν„°λ² μ΄μŠ€] Transaction, νŠΈλžœμž­μ…˜μ΄λž€?

[DB] 9. νŠΈλžœμž­μ…˜(Transaction) - (1) νŠΉμ„±, ACID, μ—°μ‚°, μƒνƒœ

'πŸ’‘CS > Database' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

[Database] 인덱슀 (Index)  (0) 2023.06.16
[Database] μ •κ·œν™”(Normalization)  (0) 2023.06.16
컀λ„₯μ…˜ ν’€(Connection Pool)μ΄λž€?  (0) 2023.04.05

λŒ“κΈ€