ν‹°μŠ€ν† λ¦¬ λ·°

νŠΈλžœμž­μ…˜μ˜ 격리 μˆ˜μ€€(isolation level)에 λŒ€ν•΄μ„œ μ •ν™•ν•˜κ²Œ μ΄ν•΄ν•˜λŠ” 것은 μ• ν”Œλ¦¬μΌ€μ΄μ…˜ λ‘œμ§μ„ μ •ν™•ν•˜κ²Œ μ œμ–΄ν•˜λŠ” 것에 μžˆμ–΄μ„œ μ€‘μš”ν•©λ‹ˆλ‹€. ν•˜μ§€λ§Œ 격리 μˆ˜μ€€μ΄ ꡬ체적으둜 μ–΄λ–»κ²Œ λ™μž‘ν•˜λŠ”μ§€ μ •ν™•ν•˜κ²Œ λͺ¨λ₯΄κ³  μžˆμ—ˆλ˜ 사싀을 λ°œκ²¬ν•΄μ„œ μž¬ν•™μŠ΅μ„ μœ„ν•΄ λ‚΄μš©μ„ μ •λ¦¬ν•©λ‹ˆλ‹€.

이 글은 MySQL κΈ°μ€€μœΌλ‘œ μž‘μ„±ν•©λ‹ˆλ‹€.

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

격리 μˆ˜μ€€μ€ 크게 λ‹€μŒκ³Ό 같이 4κ°€μ§€λ‘œ λ‹€μŒκ³Ό 같이 λ‚˜λ‰˜κ²Œ λ©λ‹ˆλ‹€.

  1. READ UNCOMMITTED
  2. READ COMMITTED
  3. REPEATABLE READ
  4. SERIALIZABLE 

1λ²ˆμ—μ„œ 4번으둜 갈수둝 νŠΈλžœμž­μ…˜ κ°„μ˜ 데이터 격리 μˆ˜μ€€μ΄ 높아지며, λ™μ‹œ 처리 μ„±λŠ₯이 λ–¨μ–΄μ§€λŠ” 것이 μΌλ°˜μ μž…λ‹ˆλ‹€.
그리고 보톡 SERIALIZABLE 정도가 μ•„λ‹ˆλ©΄ 크게 μ„±λŠ₯의 κ°œμ„ μ΄λ‚˜ μ €ν•˜λŠ” λ°œμƒν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

일반적인 온라인 μ„œλΉ„μŠ€ μš©λ„μ˜ λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œλŠ” READ COMMITTED와 REPEATABLE READ 쀑 ν•˜λ‚˜λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.

μ‹€μ œλ‘œ μ˜€λΌν΄μ—μ„œλŠ” READ COMMITTED μˆ˜μ€€μ„ 많이 μ‚¬μš©ν•˜λ©°, MySQLμ—μ„œλŠ” REPETABLE READλ₯Ό 주둜 μ‚¬μš©ν•©λ‹ˆλ‹€.
SQL-92 λ˜λŠ” SQL-99 ν‘œμ€€μ— λ”°λ₯΄λ©΄ REPETABLE READλ₯Ό μ‚¬μš©ν•˜λ©΄ 데이터 λΆ€μ •ν•© λ¬Έμ œκ°€ μžˆμ„ 수 μžˆμ§€λ§Œ, MySQL InnoDB의 κ²½μš°λŠ” 언두 둜그 λ“± λ…νŠΉν•œ νŠΉμ„±μœΌλ‘œ 인해 λΆ€μ •ν•© λ¬Έμ œκ°€ λ°œμƒν•˜μ§€ μ•Šκ³  μ•ˆμ „ν•˜κ²Œ μ‚¬μš© κ°€λŠ₯ν•©λ‹ˆλ‹€.

 

νŠΈλžœμž­μ…˜ 격리 μˆ˜μ€€κ³Ό 데이터 λΆ€μ •ν•© 문제

νŠΈλžœμž­μ…˜ 격리 μˆ˜μ€€μ„ μ΄μ•ΌκΈ°ν•˜λ©΄ 데이터 λΆ€μ •ν•© λ¬Έμ œλ„ 같이 μ΄ν•΄ν•˜κ³  μžˆμ–΄μ•Ό ν•©λ‹ˆλ‹€.
이λ₯Ό 잘 μ΄ν•΄ν•˜λ©΄ μš°λ¦¬λŠ” μ‚¬μš©μžμ—κ²Œ μ˜λ„ν•œλŒ€λ‘œ λ°μ΄ν„°λ₯Ό 보여주도둝 μ• ν”Œλ¦¬μΌ€μ΄μ…˜ λ‘œμ§μ„ μ•ˆμ „ν•˜κ²Œ μ œμ–΄ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

λŒ€ν‘œμ μΈ λΆ€μ •ν•© λ¬Έμ œλŠ” λ‹€μŒκ³Ό 같이 3가지가 μ‘΄μž¬ν•©λ‹ˆλ‹€.

  1. DIRTY READ
  2. NON-REPEATABLE READ
  3. PHANTOM READ

 

νŠΈλžœμž­μ…˜ 격리 μˆ˜μ€€μ— λŒ€ν•΄ μžμ„Ένžˆ μ•Œμ•„λ³΄κΈ° 전에 데이터 μ •ν•©μ„± 문제λ₯Ό λ¨Όμ € μžμ„Έν•˜κ²Œ μ•Œμ•„λ΄…μ‹œλ‹€.

 

DIRTY READ

DIRTY READλŠ” μ–΄λ–€ νŠΈλžœμž­μ…˜μ΄ μ²˜λ¦¬ν•œ μž‘μ—…μ΄ μ™„λ£Œλ˜μ§€ μ•Šμ•˜λŠ”λ°λ„ λ‹€λ₯Έ νŠΈλžœμž­μ…˜μ—μ„œ λ³Ό 수 μžˆλŠ” ν˜„μƒμ„ λ§ν•©λ‹ˆλ‹€.
말 κ·ΈλŒ€λ‘œ 정상적이지 μ•Šκ³  μ˜€μ—Όλœ 데이터λ₯Ό 읽을 수 μžˆλ‹€λŠ” μ˜λ―Έμž…λ‹ˆλ‹€.

  • νŠΈλžœμž­μ…˜μ΄ μ‹€νŒ¨ν•  μˆ˜λ„ μžˆμœΌλ―€λ‘œ μ†‘κΈˆκ³Ό 같은 데이터 정합성이 μ€‘μš”ν•œ λ„λ©”μΈμ—μ„œλŠ” DIRTY READλŠ” μ‹¬κ°ν•œ λ¬Έμ œμž…λ‹ˆλ‹€.
  • READ UNCOMMITTED 격리 μˆ˜μ€€μ—μ„œλŠ” DIRTY READκ°€ ν—ˆμš©λ˜λ©° RDBMS ν‘œμ€€μ—μ„œλŠ” READ UNCOMMITTEDλ₯Ό νŠΈλžœμž­μ…˜μ˜ 격리 μˆ˜μ€€μœΌλ‘œ μΈμ •ν•˜μ§€ μ•Šμ„ μ •λ„λ‘œ 정합성에 λ¬Έμ œκ°€ λ§Žλ‹€κ³  νŒλ‹¨ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

 

NON-REPEATABLE READ

NON-REPEATABLE READλŠ” 말 κ·ΈλŒ€λ‘œ ν•œ νŠΈλžœμž­μ…˜μ—μ„œ 같은 SELECT 쿼리둜 데이터λ₯Ό 반볡적으둜 μ½μ—ˆμ„ λ•Œ 데이터가 λ‹¬λΌμ§€λŠ” λΆ€μ •ν•© 문제λ₯Ό λ§ν•©λ‹ˆλ‹€.
즉, ν•œ νŠΈλžœμž­μ…˜ λ‚΄μ—μ„œλŠ” λ˜‘κ°™μ€ SELECT 쿼리λ₯Ό μ‹€ν–‰ν–ˆμ„ λ•Œ 항상 같은 κ²°κ³Όλ₯Ό κ°€μ Έμ™€μ•Όν•œλ‹€λŠ” REPETABLE READ 정합성에 μ–΄κΈ‹λ‚˜λŠ” ν˜„μƒμž…λ‹ˆλ‹€.

 

 

PHANTOM READ

PHANTOM READλŠ” λ‹€λ₯Έ νŠΈλžœμž­μ…˜μ΄ μˆ˜ν–‰ν•œ λ³€κ²½ μž‘μ—…μ— μ˜ν•΄ λ ˆμ½”λ“œκ°€ λ³΄μ˜€λ‹€ μ•ˆ λ³΄μ˜€λ‹€ν•˜λŠ” ν˜„μƒμ„ μ§€μΉ­ν•©λ‹ˆλ‹€.
즉, ν•œ νŠΈλžœμž­μ…˜μ—μ„œ 같은 쿼리둜 데이터λ₯Ό λ‹€μ‹œ μ‘°νšŒν–ˆμ„ λ•Œ κΈ°μ‘΄κ³Ό λ‹€λ₯Έ κ²°κ³Όκ°€ λ‚˜μ˜¬ 수 μžˆλŠ” 데이터 λΆ€μ •ν•©μž…λ‹ˆλ‹€.
NON-REPEATABLE READ
와 같은 κ±° μ•„λ‹Œκ°€? ν•˜λŠ” 생각이 λ“€μ§€λ§Œ ꡬ체적으둜 쑰금 λ‹€λ¦…λ‹ˆλ‹€.
PHANTOM READ 뢀정합은 "SELECT ... FOR UPDATE" 쿼리 μ‹€ν–‰ μ‹œμ— λŒ€ν‘œμ μœΌλ‘œ λ°œμƒν•©λ‹ˆλ‹€.

MySQLμ—μ„œλŠ” REPEATABLE READ 격리 μˆ˜μ€€μ„ 보μž₯ν•˜κΈ° μœ„ν•΄ 언두 λ‘œκ·Έμ—μ„œ ν˜„μž¬ νŠΈλžœμž­μ…˜ λ²ˆν˜Έλ³΄λ‹€ 이전에 μ‹€ν–‰λœ 언두 둜그λ₯Ό 기반으둜 데이터λ₯Ό μ‘°νšŒν•˜λŠ” ꡬ쑰λ₯Ό 가지고 μžˆμŠ΅λ‹ˆλ‹€.
그리고 MySQL의 "SELECT ... FOR UPDATE" μΏΌλ¦¬λŠ” SELECT ν•˜λŠ” λ ˆμ½”λ“œμ— μ“°κΈ° μž κΈˆμ„ κ±Έμ–΄μ•Ό ν•˜λŠ”λ°,
언두 λ‘œκ·ΈλŠ” ꡬ쑰적으둜 append only만 κ°€λŠ₯ν•˜κ²Œ κ΅¬μ„±λ˜μ–΄ μžˆμ–΄μ„œ 언두 λ‘œκ·Έμ—λŠ” μž κΈˆμ„ κ±Έ 수 μ—†λ‹€. κ·Έλž˜μ„œ 쿼리 μ‹œμ— 언두 λ‘œκ·Έκ°€ μ•„λ‹Œ μ‹€μ œ λ ˆμ½”λ“œμ—μ„œ 값을 κ°€μ Έμ˜€κ²Œ λ©λ‹ˆλ‹€.

λ”°λΌμ„œ "SELECT ... FOR UPDATE" 쿼리가 "SELECT * FROM users WHERE age > 20"κ³Ό 같이 λ²”μ£Όν˜•μœΌλ‘œ 데이터λ₯Ό κ°€μ Έμ˜€λŠ” 경우라면 데이터가 λ³΄μ˜€λ‹€ μ•ˆ λ³΄μ˜€λ‹€ν•˜λŠ” PHANTOM READ ν˜„μƒμ΄ λ°œμƒν•  수 μžˆλŠ” κ΅¬μ‘°μž…λ‹ˆλ‹€.

 

μ •ν•©μ„± 문제λ₯Ό λ¨Όμ € μ‚΄νŽ΄λ΄€μœΌλ‹ˆ 이제 각 격리 μˆ˜μ€€μ— λŒ€ν•΄μ„œ μ•Œμ•„λ΄…μ‹œλ‹€.

 

READ UNCOMMITTED

READ UNCOMMITTEDλŠ” μ΄λ¦„μ—μ„œ μ•Œ 수 μžˆλ“―μ΄ μ»€λ°‹λ˜μ§€ μ•Šμ€ λ‚΄μš©μ„ 읽을 수 μžˆμŠ΅λ‹ˆλ‹€.
즉, νŠΈλžœμž­μ…˜μ—μ„œμ˜ λ³€κ²½ λ‚΄μš©μ„ COMMITμ΄λ‚˜ ROLLBACK 여뢀에 상관없이 λ‹€λ₯Έ νŠΈλžœμž­μ…˜μ—μ„œ λ³Ό 수 μžˆλŠ” 격리 μˆ˜μ€€μž…λ‹ˆλ‹€.

μœ„μ—μ„œ λΆ€μ •ν•© λ¬Έμ œμ™€ ν•¨κ»˜ μ•Œμ•„λ΄€λ“―μ΄ READ UNCOMMITTED κ²©λ¦¬ μˆ˜μ€€μ—μ„œλŠ” DIRTY READκ°€ ν—ˆμš©λ˜λ©° RDBMS ν‘œμ€€μ—μ„œλŠ” READ UNCOMMITTEDλ₯Ό νŠΈλžœμž­μ…˜μ˜ κ²©λ¦¬ μˆ˜μ€€μœΌλ‘œ μΈμ •ν•˜μ§€ μ•Šμ„ μ •λ„λ‘œ μ •ν•©μ„±μ— λ¬Έμ œκ°€ λ§Žλ‹€κ³  νŒλ‹¨ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

 

READ COMMITTED

READ COMMITTEDλŠ” μ΄λ¦„ κ·ΈλŒ€λ‘œ λ‹€λ₯Έ νŠΈλžœμž­μ…˜μ—μ„œ 컀밋이 μ™„λ£Œλœ λ°μ΄ν„°λ§Œ 읽을 수 μžˆλŠ” 격리 μˆ˜μ€€μž…λ‹ˆλ‹€.
였라클 DBMSμ—μ„œ 기본으둜 μ‚¬μš©λ˜λŠ” 격리 μˆ˜μ€€μ΄λ©°, 온라인 μ„œλΉ„μŠ€μ—μ„œ κ°€μž₯ 많이 μ„ νƒν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.
READ UNCOMMITTED와 달리 DIRTY READ 뢀정합이 λ°œμƒν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

MySQLμ—μ„œλŠ” ν˜„μž¬ νŠΈλžœμž­μ…˜μ΄ 데이터λ₯Ό λ³€κ²½ν•˜λ©΄ λ³€κ²½ μ „ 데이터λ₯Ό 언두 λ‘œκ·Έμ— λ°±μ—… λ°μ΄ν„°λ‘œ μŒ“μŠ΅λ‹ˆλ‹€. 그리고 λ§Œμ•½ λ‹€λ₯Έ νŠΈλžœμž­μ…˜μ—μ„œ ν•΄λ‹Ή 데이터λ₯Ό μ‘°νšŒν•˜κ³  μ‹Άλ‹€λ©΄ ν•΄λ‹Ή 언두 λ‘œκ·Έμ—μ„œ 데이터λ₯Ό μ‘°νšŒν•˜μ—¬ READ COMMITTEDλ₯Ό 보μž₯ν•©λ‹ˆλ‹€.

ν•˜μ§€λ§Œ READ COMMITTEDμ—μ„œλŠ” NON-REPEATABLE READ λΆ€μ •ν•© λ¬Έμ œκ°€ λ°œμƒν•  수 μžˆμŠ΅λ‹ˆλ‹€.
A νŠΈλžœμž­μ…˜μ—μ„œ νŠΉμ • 데이터λ₯Ό μ‘°νšŒν–ˆμ„ λ•Œ 데이터가 μ—†μ—ˆμ§€λ§Œ B νŠΈλžœμž­μ…˜μ—μ„œ μƒˆλ‘œμš΄ 데이터λ₯Ό μΆ”κ°€ ν›„ μ»€λ°‹ν–ˆλ‹€λ©΄, A νŠΈλžœμž­μ…˜μ—μ„œ λ‹€μ‹œ 데이터λ₯Ό 쑰회 μ‹œ 데이터가 μ‘΄μž¬ν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€. μ΄λŠ” νŠΈλžœμž­μ…˜ 격리 μˆ˜μ€€μ΄ μ™„μ „ν•œ 잠금의 κΈ°λŠ₯을 ν•˜λŠ” 건 μ•„λ‹ˆκΈ° λ•Œλ¬Έμ— κ°€λŠ₯ν•œ ν˜„μƒμœΌλ‘œ λ³΄μž…λ‹ˆλ‹€. 

NON-REPEATABLE READ 뢀정합은 REPEATABLE READ 격리 μˆ˜μ€€μ„ μ‚¬μš©ν•˜λ©΄ ν•΄κ²°ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 

 

REPEATABLE READ

REPEATABLE READλŠ” NON-REPEATABLE READ 뢀정합이 λ°œμƒν•˜μ§€ μ•ŠλŠ” νŠΈλžœμž­μ…˜ 격리 μˆ˜μ€€μž…λ‹ˆλ‹€.
MySQL의 InnoDBμ—μ„œ 기본으둜 μ‚¬μš©λ˜λŠ” 격리 μˆ˜μ€€μ΄κ³  λ°”μ΄λ„ˆλ¦¬ 둜그λ₯Ό 가진 MySQL μ„œλ²„μ—μ„œλŠ” μ΅œμ†Œ REPEATABLE READ 격리 μˆ˜μ€€ 이상을 μ‚¬μš©ν•΄μ•Ό ν•©λ‹ˆλ‹€.

InnoDBμ—μ„œλŠ” νŠΈλžœμž­μ…˜μ΄ rollback될 κ°€λŠ₯성에 λŒ€λΉ„ν•˜κΈ° μœ„ν•΄ λ³€κ²½λ˜κΈ° μ „ 데이터λ₯Ό 언두 λ‘œκ·Έμ— 백업해두고 μ‹€μ œ λ ˆμ½”λ“œ 값을 λ³€κ²½ν•©λ‹ˆλ‹€. μ΄λŸ¬ν•œ 방식을 MVCC(Multi version Concurrency Control)이라고 ν•˜λ©° 언두 λ‘œκ·Έμ— λ°±μ—…ν•΄λ‘” 데이터λ₯Ό ν™œμš©ν•΄ 같은 νŠΈλžœμž­μ…˜ λ‚΄μ—μ„œλŠ” λ™μΌν•œ κ²°κ³Όλ₯Ό λ³Ό 수 μžˆλ„λ‘ 보μž₯ν•©λ‹ˆλ‹€.

InnoDB의 νŠΈλžœμž­μ…˜μ€ 순차적으둜 μ¦κ°€ν•˜λŠ” κ³ μœ ν•œ νŠΈλžœμž­μ…˜ 번호λ₯Ό 가지며 언두 λ‘œκ·Έμ—λ„ νŠΈλžœμž­μ…˜ λ²ˆν˜Έκ°€ ν¬ν•¨λ˜κ³  이 νŠΈλžœμž­μ…˜ 번호λ₯Ό κΈ°μ€€μœΌλ‘œ λ°μ΄ν„°μ˜ μ‹œμ μ„ 보μž₯ν•©λ‹ˆλ‹€.

ν•˜μ§€λ§Œ REPEATABLE READ 격리 μˆ˜μ€€μ—μ„œλ„ μœ„μ—μ„œ μ•Œμ•„λ΄€λ˜ PHANTOM READ 뢀정합이 λ°œμƒν•  수 μžˆμœΌλ‹ˆ μ£Όμ˜ν•΄μ•Ό ν•©λ‹ˆλ‹€.
PHANTOM READ
뢀정합을 λ°©μ§€ν•˜κΈ° μœ„ν•΄μ„œλŠ” 락(lock) κΈ°λŠ₯을 μ‚¬μš©ν•΄μ•Ό ν•˜λ©° InnoDBμ—μ„œλŠ” κ°­ 락과 λ„₯슀트 ν‚€ 락 덕뢄에 REPEATABLE READ 격리 μˆ˜μ€€μ—μ„œλ„ PHANTOM READ 뢀정합을 방지할 수 μžˆμŠ΅λ‹ˆλ‹€.

νŠΈλžœμž­μ…˜ μœ λ¬΄μ— λ”°λ₯Έ SELECT의 차이

"νŠΈλžœμž­μ…˜ λ‚΄μ—μ„œ" μ‹€ν–‰λ˜λŠ” SELECT와 "νŠΈλžœμž­μ…˜ 없이" μ‹€ν–‰λ˜λŠ” SELECTλŠ” READ COMMITTED 격리 μˆ˜μ€€μ—μ„œλŠ” 차이가 λ³„λ‘œ μ—†μŠ΅λ‹ˆλ‹€. ν•˜μ§€λ§Œ REPEATABLE READμ—μ„œλŠ” 기본적인 SELECT 쿼리 λ¬Έμž₯도 νŠΈλžœμž­μ…˜ λ²”μœ„ λ‚΄μ—μ„œλ§Œ μž‘λ™ν•©λ‹ˆλ‹€.

즉, νŠΈλžœμž­μ…˜μ„ ν•œ 번 μ‹œμž‘ν–ˆμœΌλ©΄ κ·Έ νŠΈλžœμž­μ…˜μ—μ„œλŠ” SELECT μ‹œ λ™μΌν•œ 결과만 보게 λ˜λ―€λ‘œ 돈이 μ˜€κ°€λŠ” μš”κ΅¬μ‚¬ν•­ λ“± μ „μ²΄μ μœΌλ‘œ 봀을 λ•Œ λ°μ΄ν„°μ˜ 정합성이 μ€‘μš”ν•œ κ²½μš°λŠ” μœ„ν—˜ν•  수 μžˆμœΌλ‹ˆ 이 차이λ₯Ό 잘 μ΄ν•΄ν•˜κ³  μžˆμ–΄μ•Ό ν•©λ‹ˆλ‹€.

이런 문제둜 λ°μ΄ν„°μ˜ 정합성이 깨지고 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œ 버그가 λ°œμƒν•˜λ©΄ μ°Ύμ•„λ‚΄κΈ° 쉽지 μ•ŠμœΌλ‹ˆ μ£Όμ˜ν•΄μ•Ό ν•©λ‹ˆλ‹€.

 

SERIALIZABLE

읽기 μž‘μ—…λ„ 곡유 μž κΈˆμ„ νšλ“ν•΄μ•Όλ§Œ ν•˜λŠ” κ°€μž₯ λ‹¨μˆœν•˜λ©΄μ„œ κ°€μž₯ μ—…κ²©ν•œ 격리 μˆ˜μ€€μž…λ‹ˆλ‹€.
SERIALIZABLE
 κ²©λ¦¬ μˆ˜μ€€μ€ μž κΈˆμ„ μ΄μš©ν•΄ λ°μ΄ν„°μ˜ 일관성을 보μž₯ν•©λ‹ˆλ‹€. ν•˜μ§€λ§Œ 이에 따라 λ™μ‹œ 처리 μ„±λŠ₯은 λ‹€λ₯Έ νŠΈλžœμž­μ…˜ 격리 μˆ˜μ€€λ³΄λ‹€ λ–¨μ–΄μ§€κ²Œ λ©λ‹ˆλ‹€.

SERIALIZABLEμ—μ„œλŠ” PHANTOM READ 뢀정합이 λ°œμƒν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. 
κ·ΈλŸ¬λ‚˜ μœ„ REPEATABLE READμ—μ„œ μ•Œμ•„λ΄€λ“―μ΄ InnoDBμ—μ„œλŠ” κ°­ 락과 λ„₯슀트 ν‚€ 락 덕뢄에 REPEATABLE READ 격리 μˆ˜μ€€μ—μ„œλ„ PHANTOM READ 뢀정합을 방지할 수 μžˆμœΌλ―€λ‘œ SERIALIZABLE을 ꡳ이 μ‚¬μš©ν•  ν•„μš”μ„±μ€ μ—†μŠ΅λ‹ˆλ‹€.

 

격리 μˆ˜μ€€κ³Ό 데이터 λΆ€μ •ν•© 정리

격리 μˆ˜μ€€κ³Ό 일어날 수 μžˆλŠ” 데이터 뢀정합을 ν‘œλ‘œ μ •λ¦¬ν•˜λ©΄ λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

λ°˜μ‘ν˜•