관리 메뉴

Tech Log πŸ› οΈ

νŠΈλžœμž­μ…˜κ³Ό 격리 레벨 λ³Έλ¬Έ

Computer Science/운영체제

νŠΈλžœμž­μ…˜κ³Ό 격리 레벨

sehaan 2023. 7. 29. 14:16

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

 

μ†Œν”„νŠΈμ›¨μ–΄ μ„Έκ³„μ—μ„œμ˜ νŠΈλžœμž­μ…˜μ„ μ‚΄νŽ΄λ³΄κΈ° μ•žμ„œμ„œ μ‹€μƒν™œμ—μ„œ ν”νžˆ μžˆλŠ” 이야기λ₯Ό 예둜 듀어보렀고 ν•œλ‹€.

λ§Œμ•½ μΉœκ΅¬κ°€ λ‹Ήμ‹ μ—κ²Œ μžμ‹ μ˜ κ³„μ’Œμ— 20λ§Œμ›μ„ 보내주렀고 ν•œλ‹€.

 

 

이 경우 μž‘μ—…μ˜ λ‹¨μœ„λŠ” μ–΄λ–»κ²Œ 될까?

μžμ„Ένžˆ νŒŒν•΄μΉ˜λ©΄ 더 λ§Žμ€ λ‹¨μœ„κ°€ μžˆμ„ 수 μžˆκ² μ§€λ§Œ 크게 두 κ°€μ§€λ‘œ λ³Ό 수 μžˆμ„ 것이닀.

 

1. 친ꡬ A의 κ³„μ’Œμ—μ„œ 20λ§Œμ›μ„ λΊ€λ‹€.

2. 친ꡬ B의 κ³„μ’Œμ— 20λ§Œμ›μ„ μΆ”κ°€ν•œλ‹€.

 

이 μƒν™©μ—μ„œ λ°œμƒν•  수 μžˆλŠ” λ¬Έμ œλ“€μ€ μ—¬λŸ¬κ°€μ§€κ°€ μžˆλŠ”λ° λŒ€ν‘œμ μœΌλ‘œ 4κ°€μ§€λ§Œ μ•Œμ•„λ³΄μž

 

λ§Œμ•½, μ†‘κΈˆ 도쀑 A의 κ³„μ’Œμ—λŠ” 돈이 λΉ μ‘ŒλŠ”λ° B의 κ³„μ’Œμ— 돈이 κ·ΈλŒ€λ‘œλΌλ©΄?

λ§Œμ•½, A의 κ³„μ’Œμ— 돈이 λΆ€μ‘±ν•œ μƒνƒœμΈλ° μ†‘κΈˆμ΄ λ˜μ—ˆλ‹€λ©΄?

λ§Œμ•½, μ†‘κΈˆ 도쀑 친ꡬCκ°€ μ†‘κΈˆμ„ λ³΄λ‚΄μ„œ μ„œλ‘œμ˜ 데이터가 μ—‡κ°ˆλ¦°λ‹€λ©΄?

λ§Œμ•½, μ†‘κΈˆμ„ 잘 λ§ˆμ³€μŒμ—λ„ 데이터가 λ‚ μ•„κ°€ 버린닀면..?

 

κ·Έλ ‡λ‹€λ©΄ μΉœκ΅¬κ°€ 보내쀀닀고 ν–ˆλ˜ 20λ§Œμ›μ€ μ¦λ°œν•΄λ²„λ¦° 것이고 μ΄λŠ” 곧 λŒ€ν˜• μ‚¬κ³ λ‘œ 이어진닀.

이런 ν˜„μƒμ„ λ°©μ§€ν•˜κΈ° μœ„ν•΄ μ‚¬μš©ν•˜λŠ” 것이 νŠΈλžœμž­μ…˜μ΄λ‹€.

 

νŠΈλžœμž­μ…˜μ€ μœ„μ—μ„œ λ§ν•œ μž‘μ—… λ‹¨μœ„λ“€μ„ 묢음으둜 인해 μΌλΆ€λ§Œ μ„±κ³΅ν•΄μ„œ DB에 λ°˜μ˜λ˜λŠ” 일이 없도둝 도와쀀닀.

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

 

그리고 νŠΈλžœμž­μ…˜μ˜ μ„±μ§ˆμ΄ μœ„μ—μ„œ λ§ν•œ μ—¬λŸ¬ λ¬Έμ œμƒν™©λ“€μ„ 방지해쀀닀.

 

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

μœ„μ—μ„œ λ§ν•œ 4가지 λ¬Έμ œλ“€μ€ νŠΈλžœμž­μ…˜μ˜ μ„±μ§ˆμ— μ •μ˜λ˜μ–΄ μžˆλ‹€.

그리고 이 μ„±μ§ˆλ“€μ„ ACID 라고 λΆ€λ₯Έλ‹€.

 

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

C : Consistency (일관성)

I : Isolation (독립성)

D : Durability (지속성)

 

μ•žμ„  사둀듀을 ν•˜λ‚˜μ”© λ³΄λ©΄μ„œ 각각 μ–΄λ–€ μ„±μ§ˆκ³Ό λŒ€λΉ„λ˜λŠ” 지 μ‚΄νŽ΄λ³΄μž !

 

λ§Œμ•½, μ†‘κΈˆ 도쀑 A의 κ³„μ’Œμ—λŠ” 돈이 λΉ μ‘ŒλŠ”λ° B의 κ³„μ’Œμ— 돈이 κ·ΈλŒ€λ‘œλΌλ©΄?

이 μ˜ˆμ‹œλŠ” μ›μžμ„±(Atomicity)을 지킀지 λͺ»ν•œ 것이닀.

 

ν•˜λ‚˜μ˜ μž‘μ—…μ΄ μ„±κ³΅ν•˜κ³  ν•˜λ‚˜μ˜ μž‘μ—…μ΄ μ‹€νŒ¨ν–ˆλŠ”λ° κ²°κ³Όκ°€ DB에 반영된 것이닀.

μ›μžμ„±μ€ μ§€ν‚¨λ‹€λŠ” 것은 λͺ¨λ“  μž‘μ—…μ΄ λͺ¨λ‘ μ„±κ³΅ν•˜κ±°λ‚˜ μ•„λ‹ˆλ©΄ λͺ¨λ‘ μ‹€νŒ¨ν•΄μ•Όν•œλ‹€.

 

λ§Œμ•½, A의 κ³„μ’Œμ— 돈이 λΆ€μ‘±ν•œ μƒνƒœμΈλ° μ†‘κΈˆμ΄ λ˜μ—ˆλ‹€λ©΄?

이 μ˜ˆμ‹œλŠ” 일관성(Consistency)을 지킀지 λͺ»ν•œ 것이닀.

 

DBμ—λŠ” μž”μ•‘μ€ λ§ˆμ΄λ„ˆμŠ€κ°€ 될 수 μ—†λ‹€λŠ” μ œμ•½μ΄ μžˆμŒμ—λ„ 이λ₯Ό μ–΄κΈ΄ 채 μ†‘κΈˆμ„ μ§„ν–‰ν•œ 것이닀.

일관성을 μ§€ν‚¨λ‹€λŠ” 것은 νŠΈλžœμž­μ…˜ 이전,이후에도 λ°μ΄ν„°λ² μ΄μŠ€μ˜ μ œμ•½μ΄λ‚˜ κ·œμΉ™μ„ λ§Œμ‘±ν•œλ‹€λŠ” 것이닀.

 

λ§Œμ•½, μ†‘κΈˆ 도쀑 친ꡬCκ°€ μ†‘κΈˆμ„ λ³΄λ‚΄μ„œ μ„œλ‘œμ˜ 데이터가 μ—‡κ°ˆλ¦°λ‹€λ©΄?

 

이 μ˜ˆμ‹œλŠ” 독립성(Isolation)을 지킀지 λͺ»ν•œ 것이닀.

 

친ꡬCμ™€μ˜ νŠΈλžœμž­μ…˜μ΄ λ™μ‹œμ— μ‹€ν–‰λ¨μœΌλ‘œμ¨ 영ν–₯을 λ―ΈμΉœκ²ƒμ΄λ‹€.

(친ꡬCκ°€ 보낸 λˆμ— 더해지지 μ•Šκ³  κΈ°μ‘΄ κΈˆμ•‘μ— λ”ν•΄μ§μœΌλ‘œμ¨ μž”μ•‘μ΄ κ·ΈλŒ€λ‘œ)

독립성을 지킀기 μœ„ν•΄μ„œλŠ” νŠΈλžœμž­μ…˜λ“€μ΄ λ™μ‹œμ— 싀행될 λ•Œμ—λ„ 혼자 μ‹€ν–‰λ˜λŠ” κ²ƒμ²˜λŸΌ λ™μž‘ν•΄μ•Όν•œλ‹€.

 

λ§Œμ•½, μ†‘κΈˆμ„ 잘 λ§ˆμ³€μŒμ—λ„ 데이터가 λ‚ μ•„κ°€ 버린닀면..?

이 μ˜ˆμ‹œλŠ” 지속성(Durability)을 지킀지 λͺ»ν•œκ²ƒμ΄λ‹€.

 

λ‹Ήμ—°ν•œ λ§μ΄μ§€λ§Œ μ €μž₯된 λ°μ΄ν„°λŠ” 영ꡬ적으둜 DB에 λ‚¨μ•„μžˆμ–΄μ•Όν•œλ‹€.

μ˜κ΅¬μ„±μ„ 지킀기 μœ„ν•΄μ„œλŠ” DB에 λ¬Έμ œκ°€ λ°œμƒν•˜λ”λΌλ„ μ»€λ°‹λœ νŠΈλžœμž­μ…˜μ΄ DB에 λ‚¨μ•„μžˆμ–΄μ•Όν•œλ‹€.

μ—¬κΈ°κΉŒμ§€κ°€ νŠΈλžœμž­μ…˜μ˜ ACID μ„±μ§ˆμ΄λ‹€.

 

이렇듯이 νŠΈλžœμž­μ…˜μ€ ACID μ„±μ§ˆμ„ μœ μ§€ν•΄μ€ŒμœΌλ‘œμ¨ λ°μ΄ν„°μ˜ 정합성을 μ§€μΌœμ€€λ‹€.

 

🧐 정합성이 뭐지?

데이터 정합성은 데이터가 μ„œλ‘œ λͺ¨μˆœ 없이 μΌκ΄€λ˜κ²Œ μΌμΉ˜ν•΄μ•Ό 함을 μ˜λ―Έν•œλ‹€ !

믿을 수 μžˆλŠ” 데이터λ₯Ό μœ„ν•΄μ„  정합성이 보μž₯λ˜μ–΄μ•Όν•œλ‹€.

 

μ§€κΈˆκΉŒμ§€ νŠΈλžœμž­μ…˜μ˜ μ—­ν• κ³Ό ACID μ„±μ§ˆμ— λŒ€ν•΄ μ•Œμ•„λ³΄μ•˜λ‹€ !

이제 νŠΈλžœμž­μ…˜μ΄ 뭔지 감이 μ˜€λŠ”κ°€?

νŠΈλžœμž­μ…˜μ€ μ•Œκ² λŠ”λ° ... 격리 μˆ˜μ€€μ€ 뭐지?

νŠΈλžœμž­μ…˜μ€ λ°μ΄ν„°μ˜ 정합성을 μ§€μΌœμ€„ 수 μžˆλŠ” 쒋은 μž₯μΉ˜μ΄λ‹€.

ν•˜μ§€λ§Œ νŠΈλžœμž­μ…˜λΌλ¦¬ μ ‘μ΄‰ν•˜λ‹€ 보면 μ—¬λŸ¬ λ¬Έμ œκ°€ λ°œμƒν•  수 μžˆλ‹€.

 

λŒ€ν‘œμ μœΌλ‘œ 크게 3가지 λ¬Έμ œκ°€ μžˆλŠ”λ°

 

1. dirty read

2. non repeatable read

3. phantom read

 

ν•˜λ‚˜ν•˜λ‚˜ μ•Œμ•„λ³΄μž !

고렀해봐야 ν•  λ¬Έμ œμ λ“€

μœ„μ—μ„œ μ–ΈκΈ‰ν•œ 3κ°€μ§€μ˜ 이상 ν˜„μƒλ“€μ„ ν•˜λ‚˜μ”© μ•Œμ•„λ³΄λ©΄μ„œ 격리레벨이 μ™œ ν•„μš”ν•œ 지 μƒκ°ν•΄λ³΄μž !

μ•„λž˜μ—μ„œ μ„€λͺ…ν•˜λŠ” 상황듀은 λͺ¨λ‘ νŠΈλžœμž­μ…˜ A,Bκ°€ ν•˜λ‚˜μ˜ 데이터 λ² μ΄μŠ€μ— μ ‘κ·Όν•˜κ³  κ°€μ •ν•œλ‹€.

dirty read

μ‰½κ²Œ λ§ν•΄μ„œ , μ»€λ°‹λ˜μ§€ μ•Šμ€ λ³€ν™”λ₯Ό μ½λŠ” 것이닀.

νŠΈλžœμž­μ…˜ A와 Bκ°€ 각각 λ‹€λ₯Έ 데이터에 μ ‘κ·Όν•΄μ„œ λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό λ³€ν™”μ‹œν‚€λŠ” 상황을 μƒκ°ν•΄λ³΄μž

νŠΈλžœμž­μ…˜ AλŠ” xλ₯Ό λ³€ν™”μ‹œν‚€κ³  , νŠΈλžœμž­μ…˜ BλŠ” yλ₯Ό λ³€ν™”μ‹œν‚¨λ‹€.

μ–΄λ–€ λ¬Έμ œκ°€ λ°œμƒν• κΉŒ?

λ­”κ°€ μ΄μƒν•˜μ§€ μ•Šμ€κ°€?

x에 λ”ν•œ y의 κ°’ 10은 더 이상 μœ νš¨ν•˜μ§€ μ•Šμ€ 값이닀.

즉, μœ„μ—μ„œ λ§ν–ˆλ‹€μ‹œν”Ό μ»€λ°‹λ˜μ§€ μ•Šμ€ λ³€ν™”λ₯Ό μ½μ–΄μ„œ λ¬Έμ œκ°€ 생긴것이닀.

non repeatable read

같은 데이터λ₯Ό μ‘°νšŒν–ˆμ„ λ•Œ 값이 λ‹€λ₯΄κ²Œ λ‚˜μ˜€λŠ” 것이닀.

νŠΈλžœμž­μ…˜ Aκ°€ x의 값을 처음 μ½μ—ˆμ„ λ•ŒλŠ” 50μ΄μ—ˆλ‹€.

κ·Έ 사이에 νŠΈλžœμž­μ…˜ Bκ°€ x의 값을 10으둜 λ³€κ²½ν–ˆκ³  , λ‹€μ‹œ νŠΈλžœμž­μ…˜ Aκ°€ xλ₯Ό μ½μ—ˆμ„ λ•ŒλŠ” x의 값은 10이 λ‚˜μ˜¨λ‹€.

값은 xλΌλŠ” λ°μ΄ν„°μ˜ 값을 μ‘°νšŒν–ˆμ§€λ§Œ μ‘°νšŒν• λ•Œλ§ˆλ‹€ 값이 λ‹€λ₯΄κ²Œ λ‚˜μ˜€λŠ” 것이닀.

μ΄λŠ” 곧 isolation κ΄€μ μ—μ„œ λ°”λžŒμ§ν•˜μ§€ λͺ»ν•˜λ‹€.

 

🧐isolation μœ„μ—μ„œ λ°°μ› λŠ”λ° .. !

μ—¬λŸ¬ 개의 νŠΈλžœμž­μ…˜λ“€μ΄ λ™μ‹œμ— μˆ˜ν–‰λ  λ•Œ, 각 νŠΈλžœμ μ…˜μ€ 고립(격리)λ˜μ–΄ μžˆμ–΄ μ—°μ†μœΌλ‘œ μ‹€ν–‰λœ 것과 λ™μΌν•œ κ²°κ³Όλ₯Ό λ‚˜νƒ€λ‚Έλ‹€.

phantom read

μ—†λ˜ 데이터가 μƒκΈ°λŠ” 것이닀.

이 상황도 λ§ˆμ°¬κ°€μ§€λ‘œ λ˜‘κ°™μ€ 쑰건으둜 데이터λ₯Ό κ²€μƒ‰ν–ˆλŠ” 데 κ²°κ³Όκ°€ λ‹€λ₯΄κ²Œ λ‚˜μ˜¨λ‹€.

이 μ—­μ‹œ isolation 원칙에 μœ„λ°°λœλ‹€κ³  ν•  수 μžˆλ‹€.

μ§€κΈˆκΉŒμ§€ μ†Œκ°œν•œ 3가지가 λŒ€ν‘œμ μœΌλ‘œ λ‚˜νƒ€λ‚˜λŠ” λ¬Έμ œμ λ“€μ΄λ‹€.

 

🧐 μ•„ 그럼 해결책은 κ°„λ‹¨ν•˜λ„€μš” ! λ‹€ 막아버리면 λ˜λŠ” κ±°μ£ ?

 

λ¬Όλ‘  κ·Ήλ„μ˜ μ•ˆμ •μ μΈ ν™˜κ²½μ„ μœ„ν•΄μ„œλΌλ©΄ κ·Έλ ‡κ²Œ ν•  μˆ˜λ„ μžˆμ§€λ§Œ μ΄λŠ” 쒋은 방법이 μ•„λ‹ˆλ‹€.

μ½”λ‘œλ‚˜ 거리두기 단계λ₯Ό λ– μ˜¬λ €λ³΄μž

 

사싀 μ½”λ‘œλ‚˜ ν™•μ§„μžκ°€ μ•ˆλ‚˜μ˜€κ²Œ ν•˜λŠ” 방법은 μ–΄λ–»κ²Œ 보면 맀우 간단할 수 μžˆλ‹€.

아무것도 ν•˜μ§€ λͺ»ν•˜κ²Œν•˜λ©΄ μ½”λ‘œλ‚˜ ν™•μ§„μžλŠ” μ•ˆλ‚˜μ™”μ„ 것이닀.

 

 

근데 ν˜„μ‹€μ€ λ‹€λ₯΄λ‹€.

거리두기 단계에 λ”°λΌμ„œ ν—ˆμš©λ˜λŠ” 것이 있고 κΈˆμ§€λ˜λŠ” 것듀을 μ •ν•΄λ†“μ•˜λ‹€.

 

μ™œμΌκΉŒ?

λ„ˆλ¬΄λ‚˜ λ‹Ήμ—°ν•œ μ–˜κΈ°μ΄μ§€λ§Œ, λͺ¨λ“  것을 κΈˆμ§€μ‹œμΌœ 버리면 μ‚¬νšŒλŠ” λŒμ•„κ°€μ§€ μ•ŠκΈ° λ•Œλ¬Έμ΄λ‹€.

κ·Έλž˜μ„œ 단계에 따라 μ€€μˆ˜μ‚¬ν•­λ“€μ„ μ‘°μ •ν•¨μœΌλ‘œμ¨ κ΄€λ¦¬ν–ˆλ˜ 것이닀.

 

νŠΈλžœμž­μ…˜μ—λ„ λΉ„μŠ·ν•œ κ°œλ…μ΄ μ μš©λœλ‹€.

격리레벨이 올라갈 수둝 μ•ˆμ •μ„±μ€ λ†’μ•„μ§€μ§€λ§Œ 데이터 μ²˜λ¦¬λŸ‰μ΄ μ €ν•˜λœλ‹€.

 

그리고 이것에 λŒ€ν•΄ 정해놓은 ν‘œμ€€ SQL 기쀀을 μ•Œμ•„λ³΄λ €κ³  ν•œλ‹€.

SQL ν‘œμ€€ 격리 레벨

SQL ν‘œμ€€μ—μ„œλŠ” μœ„μ—μ„œ λ§ν•œ λ¬Έμ œλ“€μ„ μ–΄λ””κΉŒμ§€ ν—ˆμš©ν•  지 κ΅¬λΆ„ν•˜λŠ” κ²©λ¦¬λ ˆλ²¨μ„ μ§€μ •ν•˜μ˜€λ‹€.

 

Read uncommitted

Read uncommitted λ ˆλ²¨μ€ μ»€λ°‹λ˜μ§€ μ•Šμ€ 변화도 λ‹€λ₯Έ νŠΈλžœμž­μ…˜μ΄ 읽을 수 μžˆλ‹€.

μ•„λž˜ μ˜ˆμ‹œλ₯Ό 보자, νŠΈλžœμž­μ…˜1이 μƒˆλ‘œμš΄ 데이터λ₯Ό λ„£κ³  컀밋을 ν•˜μ§€ μ•Šμ€ μƒνƒœμ΄μ§€λ§Œ νŠΈλžœμž­μ…˜2λŠ” 이것을 읽을 수 μžˆλ‹€.

사싀상 격리가 μ•„μ˜ˆ μ—†λŠ” κ±°λ‚˜ λ§ˆμ°¬κ°€μ§€μ΄λ―€λ‘œ μ΅œμ†Œν•œ Read committed 이상 레벨의 μ‚¬μš©μ„ ꢌμž₯ν•œλ‹€.

 

Read uncommitted λ ˆλ²¨μ—μ„œ λ°œμƒν•  수 μžˆλŠ” 문제점

- 이 λ ˆλ²¨μ—μ„œλŠ” λ§Žμ€ λ¬Έμ œλ“€μ΄ λ°œμƒν•  수 μžˆμ§€λ§Œ λŒ€ν‘œμ μœΌλ‘œ Dirty Read 에 λŒ€ν•΄ λ‹€λ€„λ³΄κ³ μž ν•œλ‹€.

 

μœ„μ—μ„œ dirty readλŠ” μ»€λ°‹λ˜μ§€ μ•Šμ€ λ³€ν™”λ₯Ό 읽음으둜써 λ‚˜νƒ€λ‚˜λŠ” 문제라고 ν•˜μ˜€λŠ”λ° Read uncommitted μ—μ„œ κ·Έ λ¬Έμ œκ°€ κ·ΈλŒ€λ‘œ λ°œμƒν•œλ‹€.

 

 

νŠΈλžœμž­μ…˜ BλŠ” λ°μ΄ν„°λ² μ΄μŠ€λ‘œ λΆ€ν„° Yλ₯Ό 읽기둜 ν•˜μ˜€λ‹€.

ν•˜μ§€λ§Œ Bκ°€ 데이터λ₯Ό μ½λŠ” 도쀑 νŠΈλžœμž­μ…˜Aκ°€ Y의 데이터λ₯Ό λ³€κ²½ν•˜μ˜€κ³  BλŠ” 격리레벨 νŠΉμ„±μƒ μ»€λ°‹λ˜μ§€ μ•Šμ€ 데이터λ₯Ό 읽게 λ˜μ—ˆλ‹€.

 

 

ν•˜μ§€λ§Œ Aκ°€ λ³€κ²½ν•œ 데이터가 μ»€λ°‹λ˜μ§€ μ•Šκ³  λ‘€λ°±λœλ‹€λ©΄ μ–΄λ–»κ²Œ 될까?

νŠΈλžœμž­μ…˜Bκ°€ 읽은 Y의 λ°μ΄ν„°λŠ” 더 이상 μœ νš¨ν•œ 값이 μ•„λ‹ˆκ²Œ λœλ‹€.

이 ν˜„μƒμ„ dirty read 라고 λΆ€λ₯Έλ‹€.

즉, νŠΈλžœμž­μ…˜μ—μ„œ μ²˜λ¦¬ν•œ μž‘μ—…μ΄ μ™„λ£Œλ˜μ§€ μ•Šμ•˜μŒμ—λ„ λΆˆκ΅¬ν•˜κ³  λ‹€λ₯Έ νŠΈλžœμž­μ…˜μ—μ„œ λ³Ό 수 있게 λ˜λŠ” ν˜„μƒμ΄λ‹€.

 

Read committed

Read committed λ‹¨κ³„μ—μ„œλŠ” μ»€λ°‹λœ λ°μ΄ν„°λ§Œ 읽기 λ•Œλ¬Έμ— dirty read 와 같은 ν˜„μƒμ€ λ°œμƒν•˜μ§€ μ•ŠλŠ”λ‹€.

μ–΄λ–»κ²Œ 이것을 κ΅¬ν˜„ν•  수 μžˆμ—ˆμ„κΉŒ?

 

λ°”λ‘œ undo μ˜μ—­μ„ λ”°λ‘œ λ§Œλ“€μ–΄μ€ŒμœΌλ‘œμ¨ λ°±μ—…λœ λ°μ΄ν„°λ§Œμ„ κ°€μ Έμ˜€κΈ° λ•Œλ¬Έμ΄λ‹€.

밑에 그림을 보면 νŠΈλžœμž­μ…˜1μ—μ„œ 데이터λ₯Ό λ³€κ²½ν•˜κΈ° 전에 ν…Œμ΄λΈ”μ„ λ°±μ—…ν•œλ‹€.

 

그리고 ν…Œμ΄λΈ”μ— λ³€κ²½λœ 데이터가 λ°˜μ˜λœλ‹€.

νŠΈλžœμž­μ…˜2μ—μ„œλŠ” undo μ˜μ—­μ—μ„œ 데이터λ₯Ό κ°€μ Έμ˜€κΈ° λ•Œλ¬Έμ— 이전에 μ»€λ°‹λœ λ°μ΄ν„°λ§Œ λ³Ό 수 μžˆλŠ” 것이닀 !

 

 

Read committed λ°œμƒν•  수 μžˆλŠ” 문제점

- 이 λ ˆλ²¨μ—μ„œλŠ” non repeatable read λ¬Έμ œκ°€ λ°œμƒν•œλ‹€.

 

무엇이 문제일까? λ‹€μ‹œ μ˜ˆμ‹œλ₯Ό 보자

 

νŠΈλžœμž­μ…˜Bκ°€ Yλ₯Ό λ‘λ²ˆ μ‘°νšŒν•œλ‹€κ³  κ°€μ •ν•˜μž

첫번째둜 μ‘°νšŒν–ˆμ„ λ•ŒλŠ” Yκ°€ 50이 λ‚˜μ™”μ§€λ§Œ λ‘λ²ˆμ§Έλ‘œ μ‘°νšŒν–ˆμ„ 땐 70이 λ‚˜μ™”λ‹€.

얼핏 μƒκ°ν•˜λ©΄ 크게 문제될게 μ—†μ–΄λ³΄μ΄λŠ” 데 , μ΄λŠ” ACID 속성 쀑 독립성에 μ–΄κΈ‹λ‚œλ‹€.

 

🧐 독립성 벌써 λͺ‡λ²ˆμ§Έμ•Ό ..

λ™μ‹œμ— μ—¬λŸ¬ 개의 νŠΈλžœμž­μ…˜λ“€μ΄ μˆ˜ν–‰λ  λ•Œ, 각 νŠΈλžœμ μ…˜μ€ 고립(격리)λ˜μ–΄ μžˆμ–΄ μ—°μ†μœΌλ‘œ μ‹€ν–‰λœ 것과 λ™μΌν•œ κ²°κ³Όλ₯Ό λ‚˜νƒ€λ‚Έλ‹€.

 

Repeatable read

μ–΄λ–»κ²Œ ν•˜λ©΄ νŠΈλžœμž­μ…˜ λ‚΄μ—μ„œ νŠΉμ • 행을 μ‘°νšŒν•  λ•Œ λ§ˆλ‹€ 항상 같은 데이터λ₯Ό λ‚˜μ˜€λ„λ‘ ν•  수 μžˆμ„κΉŒ?

Repeatable read μ—μ„œλŠ” 이λ₯Ό νŠΈλžœμž­μ…˜ ID λ₯Ό 톡해 ν•΄κ²°ν•œλ‹€.

 

μ΄λ ‡κ²Œ λΆ€μ—¬λœ νŠΈλžœμž­μ…˜ ID보닀 μž‘μ€ νŠΈλžœμž­μ…˜ λ²ˆν˜Έμ—μ„œ λ³€κ²½ν•œ κ²ƒλ§Œ 읽게 λœλ‹€.

 

그리고 undo λ‘œκ·Έκ°€ λ§Žμ•„μ§€λ©΄ λ°μ΄ν„°λ² μ΄μŠ€μ˜ μ„±λŠ₯이 λ–¨μ–΄μ§ˆ 수 μžˆκΈ°λ•Œλ¬Έμ— DBμ—”μ§„μ—μ„œλŠ” λΆˆν•„μš”ν•œ undo 둜그λ₯Ό 주기적으둜 μ‚­μ œν•œλ‹€.

 

Repeable readμ—μ„œ λ°œμƒν•  수 μžˆλŠ” 문제점

- 이 λ ˆλ²¨μ—μ„œλŠ” phantom read λΌλŠ” λ¬Έμ œκ°€ λ°œμƒν•  수 μžˆλ‹€.

 

μ˜ˆμ‹œλ₯Ό μ‚΄νŽ΄λ³΄μž

 

맨처음 데이터행을 μ‘°νšŒν–ˆμ„ λ•Œ 1κ°œκ°€ λ‚˜μ™”μ§€λ§Œ λ‚˜μ€‘μ— ν•œλ²ˆ 더 μ‘°νšŒν–ˆμ„ λ•Œ ν•˜λ‚˜κ°€ μΆ”κ°€λœ 2κ°€ λ‚˜μ™”λ‹€.

 

μ΄λŠ” undo ν…Œμ΄λΈ”μ— μ“°κΈ° μž κΈˆμ„ ν•  수 μ—†κΈ° λ•Œλ¬Έμ— λ°œμƒν•˜λŠ”λ° κ²°κ΅­ ν˜„μž¬ λ°μ΄ν„°μ˜ 값을 κ°€μ Έμ˜€κ²Œ λœλ‹€.

(innoDBμ—μ„œλŠ” νŒ¬ν…€ λ¦¬λ“œκ°€ λ°œμƒν•˜μ§€ μ•ŠλŠ”λ‹€κ³  ν•œλ‹€!)

 

Serializable

νŠΉμ • νŠΈλžœμž­μ…˜μ΄ μ‚¬μš©μ€‘μ΄λ©΄ λ‹€λ₯Έ νŠΈλžœμž­μ…˜μ€ 일체 μ ‘κ·Όν•  수 μ—†λ‹€.

λ°μ΄ν„°μ˜ μ•ˆμ •μ„±(μ •ν•©μ„±)은 λ†’μœΌλ‚˜ μ²˜λ¦¬λŸ‰μ€ 떨어진닀.

 

λ°œμƒν•  수 μžˆλŠ” 문제점

- μ—†μŒ

 

λ‹€μ‹œ ν‘œλ‘œ μ •λ¦¬ν•΄λ³΄μž

이처럼 격리 단계에 따라 ν—ˆμš©ν•˜λŠ” 였λ₯˜λ“€μ΄ μ •ν•΄μ Έμžˆλ‹€.

각각의 μš©λ„μ— 맞게 μ μ ˆν•˜κ²Œ 격리 λ ˆλ²¨μ„ μ§€μ •ν•˜λŠ” 것이 μ€‘μš”ν•˜λ‹€.

 

κ²°λ‘ 

λ°μ΄ν„°μ˜ 정합성을 보μž₯ν•΄μ£ΌκΈ° μœ„ν•΄μ„œ νŠΈλžœμž­μ…˜μ„ μ‚¬μš©ν•΄μ•Όν•œλ‹€.

 

ν•˜μ§€λ§Œ νŠΈλžœμž­μ…˜λΌλ¦¬ λ™μ‹œμ— μ‹€ν–‰λ˜λ‹€ 보면 μ—¬λŸ¬ λ¬Έμ œλ“€μ΄ λ°œμƒν•˜λŠ” 데

SQL ν‘œμ€€μ—μ„œ 이λ₯Ό μ–΄λ””κΉŒμ§€ ν—ˆμš©ν•  것인지에 λŒ€ν•œ 격리 단계λ₯Ό μ§€μ •ν•΄λ†“μ•˜λ‹€.

 

각자 상황에 따라 μ μ ˆν•œ 격리 단계λ₯Ό μ„ νƒν•΄μ•Όν•œλ‹€.

 

참고 자료

[MySQL] - νŠΈλžœμž­μ…˜μ˜ 격리 μˆ˜μ€€(Isolation level)

 

[MySQL] - νŠΈλžœμž­μ…˜μ˜ 격리 μˆ˜μ€€(Isolation level)

πŸ“Ž κΈ€λ˜ 6κΈ° ν¬μŠ€νŒ… 1. λ―ΈμΉ˜λ„λ‘ λ”μ› λ˜ 7μ›”μ˜ 회고 2. μ‚¬μš©μžκ°€ κ²Œμ‹œλ¬Όμ„ μž‘μ„±ν•  λ•Œμ˜ νŠΈλžœμž­μ…˜ 처리 3. Spring AOP - (1) ν”„λ‘μ‹œ νŒ¨ν„΄, λ°μ½”λ ˆμ΄ν„° νŒ¨ν„΄ 4. [MySQL] - νŠΈλžœμž­μ…˜μ˜ 격리 μˆ˜μ€€(Isolation level) 5

zzang9ha.tistory.com

νŠΈλžœμž­μ…˜ 격리 μˆ˜μ€€

 

νŠΈλžœμž­μ…˜ 격리 μˆ˜μ€€

Transaction Isolation Level μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ 개발 쀑 λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό λ„μž…ν•˜λ©΄ 격리 μˆ˜μ€€μ— λŒ€ν•œ 이해가 μžμ—°μŠ€λŸ½κ²Œ μš”κ΅¬λ©λ‹ˆλ‹€. 격리 μˆ˜μ€€μ€ λ°μ΄ν„°λ² μ΄μŠ€μ˜ ACID μ„±μ§ˆ 쀑 Isolation…

tecoble.techcourse.co.kr

[λ°μ΄ν„°λ² μ΄μŠ€] νŠΈλžœμž­μ…˜μ˜ ACID μ„±μ§ˆ - ν•˜λ‚˜λͺ¬

 

[λ°μ΄ν„°λ² μ΄μŠ€] νŠΈλžœμž­μ…˜μ˜ ACID μ„±μ§ˆ - ν•˜λ‚˜λͺ¬

νŠΈλžœμž­μ…˜μ΄λž€ μ—¬λŸ¬ 개의 μž‘μ—…μ„ ν•˜λ‚˜λ‘œ 묢은 μ‹€ν–‰ μœ λ‹›μ„ λ§ν•œλ‹€. λ°μ΄ν„°λ² μ΄μŠ€ νŠΈλžœμž­μ…˜μ€ ACIDλΌλŠ” νŠΉμ„±μ„ 가지고 μžˆλ‹€. ACIDλŠ” λ°μ΄ν„°λ² μ΄μŠ€ λ‚΄μ—μ„œ μΌμ–΄λ‚˜λŠ” ν•˜λ‚˜μ˜ νŠΈλžœμž­μ…˜(transaction)의 μ•ˆ

hanamon.kr

νŠΈλžœμž­μ…˜μ˜ 격리 μˆ˜μ€€(isolation Level)μ΄λž€?

 

νŠΈλžœμž­μ…˜μ˜ 격리 μˆ˜μ€€(isolation Level)μ΄λž€?

 

nesoy.github.io

https://www.youtube.com/watch?v=bLLarZTrebU&t=397s

https://www.youtube.com/watch?v=sLJ8ypeHGlM&t=144s