# νŠΈλžœμž­μ…˜(Transaction)μ΄λž€?
Study Repository

νŠΈλžœμž­μ…˜(Transaction)μ΄λž€?

by rlaehddnd0422

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

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


νŠΈλžœμž­μ…˜μ˜ νŠΉμ§•(ACID)

  1. Atomicity(μ›μžμ„±) 
    • νŠΈλžœμž­μ…˜μ˜ 연산은 λ°μ΄ν„°λ² μ΄μŠ€μ— λͺ¨λ‘ λ°˜μ˜λ˜κ±°λ‚˜ or μ „ν˜€ λ°˜μ˜λ˜μ§€ μ•Šμ•„μ•Ό ν•©λ‹ˆλ‹€.
    • νŠΈλžœμž­μ…˜ λ‚΄μ˜ λͺ¨λ“  λͺ…λ Ήμ˜ λ°˜λ“œμ‹œ μ™„λ²½νžˆ μˆ˜ν–‰λ˜μ–΄μ•Ό ν•˜λ©΄, λͺ¨λ‘κ°€ μ™„λ²½νžˆ μˆ˜ν–‰λ˜μ§€ μ•Šκ³  μ–΄λŠ ν•˜λ‚˜λΌλ„ 였λ₯˜κ°€ λ‚˜λ©΄ μ „λΆ€ μ·¨μ†Œλ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€.
  2. Consistency(일관성)
    • νŠΈλžœμž­μ…˜μ΄ κ·Έ 싀행을 μ„±κ³΅μ μœΌλ‘œ μ™„λ£Œν•˜λ©΄ μ–Έμ œλ‚˜ 일관성 μžˆλŠ” λ°μ΄ν„°λ² μ΄μŠ€ μƒνƒœλ‘œ λ³€ν™˜ν•©λ‹ˆλ‹€.
    • μ‹œμŠ€ν…œμ΄ 가지고 μžˆλŠ” κ³ μ •μš”μ†ŒλŠ” νŠΈλžœμž­μ…˜ μˆ˜ν–‰ μ „, ν›„μ˜ μƒνƒœκ°€ κ°™μ•„μ•Ό ν•©λ‹ˆλ‹€.
  3. Durability(지속성)
    • μ„±κ³΅μ μœΌλ‘œ μ™„λ£Œλœ νŠΈλžœμž­μ…˜μ˜ κ²°κ³ΌλŠ” μ‹œμŠ€ν…œμ΄ κ³ μž₯λ‚˜λ”λΌλ„ 영ꡬ적으둜 λ°˜μ˜λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€.
  4. Isolation(격리성, 독립성)
    • λ‘˜ μ΄μƒμ˜ νŠΈλžœμž­μ…˜μ΄ λ™μ‹œμ— 병행 μ‹€ν–‰λ˜λŠ” 경우, μ–΄λŠ ν•˜λ‚˜μ˜ νŠΈλžœμž­μ…˜ 싀행쀑 λ‹€λ₯Έ νŠΈλžœμž­μ…˜μ˜ 연산이 끼어듀 수 μ—†μŠ΅λ‹ˆλ‹€.
    • μˆ˜ν–‰μ€‘μΈ νŠΈλžœμž­μ…˜μ΄ μ™„μ „νžˆ μ™„λ£Œλ  λ•ŒκΉŒμ§€, λ‹€λ₯Έ νŠΈλžœμž­μ…˜μ—μ„œ μˆ˜ν–‰ κ²°κ³Όλ₯Ό μ°Έμ‘°(μˆ˜μ •,쑰회 λ“±)ν•  수 μ—†μŠ΅λ‹ˆλ‹€.
    • νŠΈλžœμž­μ…˜μ˜ Isolation을 보μž₯ν•˜κΈ° μœ„ν•΄μ„œλŠ” νŠΈλžœμž­μ…˜μ„ 거의 μˆœμ„œλŒ€λ‘œ μ‹€ν–‰ν•΄μ•Ό ν•˜λŠ”λ° μˆœμ„œλŒ€λ‘œ μ‹€ν–‰ν•˜κ²Œλ˜λ©΄ μ„±λŠ₯이 맀우 λ‚˜λΉ μ§‘λ‹ˆλ‹€. 이런 문제둜 인해 ANSI ν‘œμ€€μ€ λ‹€μŒκ³Ό 같이 νŠΈλžœμž­μ…˜μ˜ κ²©λ¦¬μˆ˜μ€€μ„ 4λ‹¨κ³„λ‘œ λ‚˜λˆ„μ–΄ μ •μ˜ν–ˆμŠ΅λ‹ˆλ‹€.

νŠΈλžœμž­μ…˜ κ²©λ¦¬μˆ˜μ€€ 4단계

1. READ UNCOMMITED(μ»€λ°‹λ˜μ§€ μ•Šμ€ 읽기) : μ–΄λ–€ νŠΈλžœμž­μ…˜μ˜ λ³€κ²½λ‚΄μš©μ΄ Commitμ΄λ‚˜ Rollbackκ³Ό 상관없이 λ‹€λ₯Έ νŠΈλžœμž­μ…˜μ—μ„œ λ³΄μ—¬μ§‘λ‹ˆλ‹€. 이 κ²©λ¦¬μˆ˜μ€€μ€ μ•„λž˜μ™€ 같은 λ¬Έμ œκ°€ λ°œμƒν•  수 μžˆμŠ΅λ‹ˆλ‹€.

A νŠΈλžœμž­μ…˜μ—μ„œ 일뢀 데이터 λ³€κ²½ ν›„ μ»€λ°‹ν•˜μ§€ μ•ŠμŒ
-> B νŠΈλžœμž­μ…˜μ—μ„œ 데이터 쑰회 μ‹œ λ³€κ²½λœ 데이터λ₯Ό μ‘°νšŒν•¨ (이λ₯Ό Dirty Read(더티 λ¦¬λ“œ) 라고 ν•©λ‹ˆλ‹€) 
-> A νŠΈλžœμž­μ…˜μ—μ„œ λ¬Έμ œκ°€ μƒκ²¨μ„œ ROLLBACK.
-> B νŠΈλžœμž­μ…˜μ€ μ—¬μ „νžˆ λ³€κ²½λœ 데이터λ₯Ό 기반으둜 λ‹€μŒ λ‘œμ§μ„ μˆ˜ν–‰ν•˜κ²Œ 됨

 

2.READ COMMITTED(μ»€λ°‹λœ 읽기) : μ–΄λ–€ νŠΈλžœμž­μ…˜μ˜ λ³€κ²½ λ‚΄μš©μ΄ Commit λ˜μ–΄μ•Όλ§Œ λ‹€λ₯Έ νŠΈλžœμž­μ…˜μ—μ„œ μ‘°νšŒν•  수 μžˆμŠ΅λ‹ˆλ‹€. κ°€μž₯ 많이 μ±„νƒλ˜λŠ” κ²©λ¦¬μˆ˜μ€€μž…λ‹ˆλ‹€. μ—¬κΈ°μ„œλŠ” NON-REPETABLE READ λΆ€μ •ν•© λ¬Έμ œκ°€ λ°œμƒν•  수 μžˆμŠ΅λ‹ˆλ‹€. 

B νŠΈλžœμž­μ…˜μ—μ„œ member_idκ°€ 1번인 μ‚¬λžŒμ˜ λ‚˜μ΄λ₯Ό 쑰회 -> 27μ‚΄λ‘œ 쑰회됨.
A νŠΈλžœμž­μ…˜μ—μ„œ member_idκ°€ 1번인 μ‚¬λžŒμ˜ λ‚˜μ΄λ₯Ό 28μ‚΄λ‘œ λ³€κ²½ν•˜κ³  Commit
B νŠΈλžœμž­μ…˜μ—μ„œ member_idκ°€ 1번인 μ‚¬λžŒμ˜ λ‚˜μ΄λ₯Ό λ‹€μ‹œ 쑰회 -> 27μ‚΄λ‘œ 쑰회됨.

 

μ–Έλœ»λ³΄λ©΄ λ¬Έμ œκ°€ μ—†μ–΄ λ³΄μ΄μ§€λ§Œ μ΄λŠ” ν•˜λ‚˜μ˜ νŠΈλžœμž­μ…˜λ‚΄μ—μ„œ λ˜‘κ°™μ€ SELECTλ₯Ό μˆ˜ν–‰ν•  경우 항상 같은 κ²°κ³Όλ₯Ό λ°˜ν™˜ν•΄μ•Ό ν•œλ‹€λŠ” REPEATABLE READ 정합성에 μ–΄κΈ‹λ‚˜κΈ° λ•Œλ¬Έμ— μž‘μ—…μ΄ κΈˆμ „μ μΈ μ²˜λ¦¬μ™€ μ—°κ²°λ˜μ–΄ 있으면 λ¬Έμ œκ°€ λ°œμƒν•  수 μžˆμŠ΅λ‹ˆλ‹€.

 

 

3. REPAEATABLE READ(반볡 κ°€λŠ₯ν•œ 읽기) : νŠΈλžœμž­μ…˜μ΄ μ‹œμž‘λ˜κΈ° 전에 μ»€λ°‹λœ λ‚΄μš©μ— λŒ€ν•΄μ„œλ§Œ μ‘°νšŒν•  수 μžˆλŠ” 격리 μˆ˜μ€€

 

 

4. SERIALIZABLE(직렬화 κ°€λŠ₯) : κ°€μž₯λ‹¨μˆœν•˜κ³  κ°€μž₯ μ—„κ²©ν•œ κ²©λ¦¬μˆ˜μ€€. 이 경우 직렬적으둜 μˆ˜ν–‰λ˜κΈ° λ•Œλ¬Έμ— μ“°κΈ°μž‘μ—…λΏλ§Œ μ•„λ‹ˆλΌ μ½κΈ°μž‘μ—…μ—μ„œλ„ κ³΅μœ μž κΈˆμ„ μ„€μ •ν•˜κ²Œ 되기 λ•Œλ¬Έμ—, λ™μ‹œμ²˜λ¦¬ λŠ₯λ ₯이 맀우 떨어지고 μ„±λŠ₯μ €ν•˜κ°€ λ°œμƒν•©λ‹ˆλ‹€.

 

1λ²ˆμ—μ„œ 4번으둜 갈수둝 μ„±λŠ₯이 떨어지고 독립성이 λ†’μ•„μ§‘λ‹ˆλ‹€.
일반적으둜 READ COMMITTED 격리 기쀀을 μ±„νƒν•΄μ„œ μ‚¬μš©ν•©λ‹ˆλ‹€.


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

  • Commit : ν•˜λ‚˜μ˜ 논리적 λ‹¨μœ„μ— λŒ€ν•œ μž‘μ—…μ΄ μ„±κ³΅μ μœΌλ‘œ 끝났고 λ°μ΄ν„°λ² μ΄μŠ€κ°€ λ‹€μ‹œ μΌκ΄€λœ μƒνƒœμ— μžˆμ„ λ•Œ, 이 νŠΈλžœμž­μ…˜μ΄ ν–‰ν•œ 갱신연산이 μ™„λ£Œλœ 것을 νŠΈλžœμž­μ…˜ κ΄€λ¦¬μžμ—κ²Œ μ•Œλ €μ£ΌλŠ” μ—°μ‚°μž…λ‹ˆλ‹€.
  • Rollback : ν•˜λ‚˜μ˜ νŠΈλžœμž­μ…˜ μ²˜λ¦¬κ°€ λΉ„μ •μƒμ μœΌλ‘œ μ’…λ£Œλ˜μ–΄ λ°μ΄ν„°λ² μ΄μŠ€μ˜ 일관성을 κΉ¨λœ¨λ Έμ„ λ•Œ, 이 νŠΈλžœμž­μ…˜μ˜ 일뢀가 μ •μƒμ μœΌλ‘œ μ²˜λ¦¬λ˜λ”λΌλ„, νŠΈλžœμž­μ…˜μ˜ μ›μžμ„±μ„ 보μž₯ν•˜κΈ° μœ„ν•΄ 이 νŠΈλžœμž­μ…˜μ΄ ν–‰ν•œ λͺ¨λ“  연산을 μ·¨μ†Œν•˜λŠ” μ—°μ‚°μž…λ‹ˆλ‹€. Rollbackμ‹œμ—λŠ” ν•΄λ‹Ή νŠΈλžœμž­μ…˜μ„ μž¬μ‹œμž‘ ν•˜κ±°λ‚˜ νκΈ°ν•©λ‹ˆλ‹€.

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

1. ν™œλ™(Active) : νŠΈλžœμž­μ…˜μ΄ 싀행쀑인 μƒνƒœ

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

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

4. λΆ€λΆ„ μ™„λ£Œ(Partially Committed) : νŠΈλžœμž­μ…˜μ˜ λ§ˆμ§€λ§‰ μ—°μ‚°κΉŒμ§€ μ‹€ν–‰ν–ˆμ§€λ§Œ, Commit 연산이 μ‹€ν–‰λ˜κΈ° μ§μ „μ˜ μƒνƒœ

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

 


<참고자료>

 

 

[DB기초] νŠΈλžœμž­μ…˜μ΄λž€ 무엇인가?

νŠΈλžœμž­μ…˜μ˜ μ •μ˜ νŠΈλžœμž­μ…˜(Transaction)은 λ°μ΄ν„°λ² μ΄μŠ€μ˜ μƒνƒœλ₯Ό λ³€ν™˜μ‹œν‚€λŠ” ν•˜λ‚˜μ˜ 논리적 κΈ°λŠ₯을 μˆ˜ν–‰ν•˜κΈ° μœ„ν•œ μž‘μ—…μ˜ λ‹¨μœ„ λ˜λŠ” ν•œκΊΌλ²ˆμ— λͺ¨λ‘ μˆ˜ν–‰λ˜μ–΄μ•Ό ν•  일련의 연산듀을 μ˜λ―Έν•œλ‹€. 트

coding-factory.tistory.com

 

 

[db] νŠΈλžœμž­μ…˜ 격리 μˆ˜μ€€(isolation level)

νŠΈλžœμž­μ…˜ κ²©λ¦¬μˆ˜μ€€(isolation level)μ΄λž€ λ™μ‹œμ— μ—¬λŸ¬ νŠΈλžœμž­μ…˜μ΄ 처리될 λ•Œ, νŠΈλžœμž­μ…˜λΌλ¦¬ μ–Όλ§ˆλ‚˜ μ„œλ‘œ κ³ λ¦½λ˜μ–΄ μžˆλŠ”μ§€λ₯Ό λ‚˜νƒ€λ‚΄λŠ” 것이닀. 즉, κ°„λ‹¨ν•˜κ²Œ 말해 νŠΉμ • νŠΈλžœμž­μ…˜μ΄ λ‹€λ₯Έ νŠΈλžœμž­μ…˜μ—

joont92.github.io

 

λΈ”λ‘œκ·Έμ˜ 정보

Study Repository

rlaehddnd0422

ν™œλ™ν•˜κΈ°