๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ“ŒCS/DB

[DB] ํŠธ๋žœ์žญ์…˜ ๊ฒฉ๋ฆฌ ์ˆ˜์ค€(Transaction Isolation Level)

by dar0m! 2021. 4. 23.

๊ฐœ๋…

ํŠธ๋žœ์žญ์…˜ ๊ฒฉ๋ฆฌ์ˆ˜์ค€(isolation level)์ด๋ž€ ๋™์‹œ์— ์—ฌ๋Ÿฌ ํŠธ๋žœ์žญ์…˜์ด ์ฒ˜๋ฆฌ๋  ๋•Œ, ํŠธ๋žœ์žญ์…˜๋ผ๋ฆฌ ์–ผ๋งˆ๋‚˜ ์„œ๋กœ ๊ณ ๋ฆฝ๋˜์–ด ์žˆ๋Š”์ง€๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฒƒ์ด๋‹ค.
์ฆ‰, ํŠน์ • ํŠธ๋žœ์žญ์…˜์ด ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์— ๋ณ€๊ฒฝํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๋„๋ก ํ—ˆ์šฉํ• ์ง€ ๋ง์ง€๋ฅผ ๊ฒฐ์ •ํ•œ๋‹ค.

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ACID ํŠน์ง•๊ณผ ๊ฐ™์ด ํŠธ๋žœ์žญ์…˜์ด ๋…๋ฆฝ์ ์ธ ์ˆ˜ํ–‰์„ ํ•˜๋„๋ก Locking์„ ํ†ตํ•ด, ํŠธ๋žœ์žญ์…˜์ด DB๋ฅผ ๋‹ค๋ฃจ๋Š” ๋™์•ˆ ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์ด ๊ด€์—ฌํ•˜์ง€ ๋ชปํ•˜๋„๋ก ๋ง‰๋Š” ๊ฒƒ์ด ํ•„์š”ํ•˜๋‹ค.

ํ•˜์ง€๋งŒ ๋ฌด์กฐ๊ฑด Locking์œผ๋กœ ๋™์‹œ์— ์ˆ˜ํ–‰๋˜๋Š” ์ˆ˜๋งŽ์€ ํŠธ๋žœ์žญ์…˜๋“ค์„ ์ˆœ์„œ๋Œ€๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๊ตฌํ˜„ํ•˜๊ฒŒ ๋˜๋ฉด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์„ฑ๋Šฅ์€ ๋–จ์–ด์ง€๊ฒŒ ๋œ๋‹ค. ํ•˜์ง€๋งŒ, ์„ฑ๋Šฅ์„ ๋†’์ด๊ธฐ ์œ„ํ•ด Locking์˜ ๋ฒ”์œ„๋ฅผ ์ค„์ธ๋‹ค๋ฉด, ์ž˜๋ชป๋œ ๊ฐ’์ด ์ฒ˜๋ฆฌ๋  ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.

๋”ฐ๋ผ์„œ ์ตœ๋Œ€ํ•œ ํšจ์œจ์ ์ธ Locking ๋ฐฉ๋ฒ•์ด ํ•„์š”ํ•˜๋‹ค.

  • Lock : ํŠธ๋žœ์žญ์…˜ ์ฒ˜๋ฆฌ์˜ ์ˆœ์ฐจ์„ฑ์„ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ•์ด๋‹ค.(๋™์‹œ์„ฑ ์ œ์–ด)
    DBMS ๋งˆ๋‹ค Lock์„ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ์‹์ด ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์— DBMS๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ์ด์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ ํ•ด๋‹น DB์˜ Lock์— ๋Œ€ํ•œ ์ดํ•ด๊ฐ€ ์š”๊ตฌ๋œ๋‹ค.
    • ๊ณต์œ (shared) lock : ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์„ ๋•Œ ์‚ฌ์šฉ๋˜์–ด์ง€๋Š” lock.
      • ๊ณต์œ  ๋ฝ์€ ๊ณต์œ  ๋ฝ๋ผ๋ฆฌ ๋™์‹œ์— ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
      • ํ•˜์ง€๋งŒ, ๊ณต์œ  ๋ฝ์ด ์„ค์ •๋œ ๋ฐ์ดํ„ฐ์— ๋ฐฐํƒ€ ๋ฝ์„ ์‚ฌ์šฉํ•  ์ˆ˜๋Š” ์—†๋‹ค.
    • ๋ฐฐํƒ€(Exclusive) lock : ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€๊ฒฝํ•˜๊ณ ์ž ํ•  ๋•Œ ์‚ฌ์šฉ๋˜๋ฉฐ, ํŠธ๋žœ์žญ์…˜์ด ์™„๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ์œ ์ง€๋œ๋‹ค.
      • Lock์ด ํ•ด์ œ๋  ๋•Œ๊นŒ์ง€ ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜(์ฝ๊ธฐ ํฌํ•จ)์€ ํ•ด๋‹น ๋ฆฌ์†Œ์Šค์— ์ ‘๊ทผํ•  ์ˆ˜ ์—†๋‹ค.
      • ํ•ด๋‹น Lock์€ ํŠธ๋žœ์žญ์…˜์ด ์ˆ˜ํ–‰๋˜๊ณ  ์žˆ๋Š” ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•ด์„œ๋Š” ์ ‘๊ทผํ•˜์—ฌ ํ•จ๊ป˜ Lock์„ ์„ค์ •ํ•  ์ˆ˜ ์—†๋‹ค.

 

Isolation level ์ข…๋ฅ˜

  1. Read Uncommitted (๋ ˆ๋ฒจ 0)
    • SELECT ๋ฌธ์žฅ์ด ์ˆ˜ํ–‰๋˜๋Š” ๋™์•ˆ ํ•ด๋‹น ๋ฐ์ดํ„ฐ์— Shared Lock์ด ๊ฑธ๋ฆฌ์ง€ ์•Š๋Š” ๊ณ„์ธต
    • ํŠธ๋žœ์žญ์…˜์— ์ฒ˜๋ฆฌ์ค‘์ด๊ฑฐ๋‚˜, ์•„์ง Commit๋˜์ง€ ์•Š์€ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์ด ์ฝ๋Š” ๊ฒƒ์„ ํ—ˆ์šฉํ•จ
    • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์ด ๋ถˆ๊ฐ€๋Šฅํ•จ
    • Dirty Read ๋ฐœ์ƒ
      • A ํŠธ๋žœ์žญ์…˜์—์„œ 10๋ฒˆ ์‚ฌ์›์˜ ๋‚˜์ด๋ฅผ 27์—์„œ 28๋กœ ๋ฐ”๊ฟˆ. ์•„์ง ์ปค๋ฐ‹ํ•˜์ง€ ์•Š์Œ
      • B ํŠธ๋žœ์žญ์…˜์—์„œ 10๋ฒˆ ์‚ฌ์›์˜ ๋‚˜์ด๋ฅผ ์กฐํšŒ : ๊ฒฐ๊ณผ 28 → ๋”ํ‹ฐ ๋ฆฌ๋“œ(Dirty Read)
        • ์ด ์ดํ›„, A ํŠธ๋žœ์žญ์…˜์—์„œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ด Rollbackํ•จ
        • B ํŠธ๋žœ์žญ์…˜์€ 10๋ฒˆ ์‚ฌ์›์ด ์—ฌ์ „์ด 28์‚ด์ด๋ผ ์ƒ๊ฐํ•˜๊ณ  ๋กœ์ง์„ ์ˆ˜ํ–‰ํ•จ
        • ์ด๋Ÿฐ์‹์œผ๋กœ ๋ฐ์ดํ„ฐ ์ •ํ•ฉ์„ฑ์— ๋ฌธ์ œ๊ฐ€ ๋งŽ์•„์ง.
  2. Read Committed (๋ ˆ๋ฒจ 1)
    • SELECT ๋ฌธ์žฅ์ด ์ˆ˜ํ–‰๋˜๋Š” ๋™์•ˆ ํ•ด๋‹น ๋ฐ์ดํ„ฐ์— Shared Lock์ด ๊ฑธ๋ฆฌ๋Š” ๊ณ„์ธต
    • ํŠธ๋žœ์žญ์…˜์ด ์ˆ˜ํ–‰๋˜๋Š” ๋™์•ˆ ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์ด ์ ‘๊ทผํ•  ์ˆ˜ ์—†์–ด ๋Œ€๊ธฐํ•˜๊ฒŒ ๋จ
    • Commit ์ด ์ด๋ฃจ์–ด์ง„ ํŠธ๋žœ์žญ์…˜๋งŒ ์กฐํšŒ ๊ฐ€๋Šฅ
    • Oracle DB, SQL Server์—์„œ ๊ธฐ๋ณธ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” Ioslation Level์ž„
    • Non-Repeatable Read ๋ฐœ์ƒ
      • B ํŠธ๋žœ์žญ์…˜์—์„œ 10๋ฒˆ ์‚ฌ์›์˜ ๋‚˜์ด๋ฅผ ์กฐํšŒ : ๊ฒฐ๊ณผ 27
      • A ํŠธ๋žœ์žญ์…˜์—์„œ 10๋ฒˆ ์‚ฌ์›์˜ ๋‚˜์ด๋ฅผ 27์—์„œ 28๋กœ ๋ฐ”๊พธ๊ณ  ์ปค๋ฐ‹
      • B ํŠธ๋žœ์žญ์…˜์—์„œ 10๋ฒˆ ์‚ฌ์›์˜ ๋‚˜์ด๋ฅผ ์กฐํšŒ : ๊ฒฐ๊ณผ 28
  3. Repeatable Read (๋ ˆ๋ฒจ 2)
    • ํŠธ๋žœ์žญ์…˜์ด ์™„๋ฃŒ๋  ๋•Œ๊นŒ์ง€ SELECT ๋ฌธ์žฅ์ด ์‚ฌ์šฉ๋˜๋Š” ๋ชจ๋“  ๋ฐ์ดํ„ฐ์— Shared Lock์ด ๊ฑธ๋ฆฌ๋Š” ๊ณ„์ธต
    • ํŠธ๋žœ์žญ์…˜์ด ๋ฒ”์œ„ ๋‚ด์—์„œ ์กฐํšŒํ•œ ๋ฐ์ดํ„ฐ ๋‚ด์šฉ์ด ํ•ญ์ƒ ๋™์ผํ•จ์„ ๋ณด์žฅํ•จ
    • ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž๋Š” ํŠธ๋žœ์žญ์…˜ ์˜์—ญ์— ํ•ด๋‹น๋˜๋Š” ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ์ˆ˜์ • ๋ถˆ๊ฐ€๋Šฅ
    • MySQL DBMS์—์„œ ๊ธฐ๋ณธ์œผ๋กœ ์‚ฌ์šฉํ•จ
    • Non-Repeatable Read ๋ถ€์ •ํ•ฉ์ด ๋ฐœ์ƒํ•˜์ง€ ์•Š์Œ
      • 10๋ฒˆ ํŠธ๋žœ์žญ์…˜์ด 500๋ฒˆ ์‚ฌ์›์„ ์กฐํšŒ
      • 12๋ฒˆ ํŠธ๋žœ์žญ์…˜์ด 500๋ฒˆ ์‚ฌ์›์˜ ์ด๋ฆ„์„ ๋ณ€๊ฒฝํ•˜๊ณ  ์ปค๋ฐ‹
      • 10๋ฒˆ ํŠธ๋žœ์žญ์…˜์ด 500๋ฒˆ ์‚ฌ์›์„ ๋‹ค์‹œ ์กฐํšŒ : undo ์˜์—ญ์— ๋ฐฑ์—…๋œ ๋ฐ์ดํ„ฐ ๋ฐ˜ํ™˜
    • ์ฆ‰, ์ž์‹ ์˜ ํŠธ๋žœ์žญ์…˜ ๋ฒˆํ˜ธ๋ณด๋‹ค ๋‚ฎ์€ ํŠธ๋žœ์žญ์…˜ ๋ฒˆํ˜ธ์—์„œ ๋ณ€๊ฒฝ๋œ(์ปค๋ฐ‹๋œ) ๊ฒƒ๋งŒ ๋ณด๊ฒŒ ๋œ๋‹ค.
      • ๋ชจ๋“  InnoDB์˜ ํŠธ๋žœ์žญ์…˜์€ ์ˆœ์ฐจ์ ์œผ๋กœ ์ฆ๊ฐ€ํ•˜๋Š” ๊ณ ์œ ํ•œ ํŠธ๋žœ์žญ์…˜ ๋ฒˆํ˜ธ๋ฅผ ๊ฐ–๊ณ  ์žˆ์œผ๋ฉฐ,
      • undo ์˜์—ญ์— ๋ฐฑ์—…๋œ ๋ชจ๋“  ๋ ˆ์ฝ”๋“œ๋Š” ๋ณ€๊ฒฝ์„ ๋ฐœ์ƒ์‹œํ‚จ ํŠธ๋žœ์žญ์…˜์˜ ๋ฒˆํ˜ธ๋ฅผ ํฌํ•จํ•˜๊ณ  ์žˆ๋‹ค.
    • Phantom Read ๋ฐœ์ƒ
  4. Serializable (๋ ˆ๋ฒจ 3)
    • ํŠธ๋žœ์žญ์…˜์ด ์™„๋ฃŒ๋  ๋•Œ๊นŒ์ง€ SELECT ๋ฌธ์žฅ์ด ์‚ฌ์šฉ๋˜๋Š” ๋ชจ๋“  ๋ฐ์ดํ„ฐ์— Shared Lock์ด ๊ฑธ๋ฆฌ๋Š” ๊ณ„์ธต
    • ๊ฐ€์žฅ ์—„๊ฒฉํ•œ ๊ฒฉ๋ฆฌ ์ˆ˜์ค€์œผ๋กœ ์™„๋ฒฝํ•œ ์ฝ๊ธฐ ์ผ๊ด€์„ฑ ๋ชจ๋“œ๋ฅผ ์ œ๊ณตํ•จ
    • ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž๋Š” ํŠธ๋žœ์žญ์…˜ ์˜์—ญ์— ํ•ด๋‹น๋˜๋Š” ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ์ˆ˜์ • ๋ฐ ์ž…๋ ฅ ๋ถˆ๊ฐ€๋Šฅ

๋ ˆ๋ฒจ์ด ๋†’์•„์งˆ ์ˆ˜๋ก ํŠธ๋žœ์žญ์…˜๊ฐ„ ๊ณ ๋ฆฝ ์ •๋„๊ฐ€ ๋†’์•„์ง€๋ฉฐ, ์„ฑ๋Šฅ์ด ๋–จ์–ด์ง€๋Š” ๊ฒƒ์ด ์ผ๋ฐ˜์ ์ด๋ฉฐ, ์ผ๋ฐ˜์ ์ธ ์˜จ๋ผ์ธ ์„œ๋น„์Šค์—์„œ๋Š” READ COMMITTED๋‚˜ REPEATABLE READ ์ค‘ ํ•˜๋‚˜๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. (Oracle = READ COMMITTED, MySQL = REPEATABLE READ)

์„ ํƒ ์‹œ ๊ณ ๋ ค์‚ฌํ•ญ

Isolation Level์— ๋Œ€ํ•œ ์กฐ์ •์€, ๋™์‹œ์„ฑ๊ณผ ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ์— ์—ฐ๊ด€๋˜์–ด ์žˆ๋‹ค.

๋™์‹œ์„ฑ์„ ์ฆ๊ฐ€์‹œํ‚ค๋ฉด ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ์— ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๊ณ , ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ์„ ์œ ์ง€ํ•˜๋ฉด ๋™์‹œ์„ฑ์ด ๋–จ์–ด์ง€๊ฒŒ ๋œ๋‹ค.

๋ ˆ๋ฒจ์„ ๋†’๊ฒŒ ์กฐ์ •ํ•  ์ˆ˜๋ก ๋ฐœ์ƒํ•˜๋Š” ๋น„์šฉ์ด ์ฆ๊ฐ€ํ•œ๋‹ค.

  • ๋ฌด๊ฒฐ์„ฑ(Integrity) : ๋ฐ์ดํ„ฐ์˜ ์ •ํ™•์„ฑ, ์ผ๊ด€์„ฑ, ์œ ํšจ์„ฑ์ด ์œ ์ง€๋˜๋Š” ๊ฒƒ
    • ๊ฐœ์ฒด ๋ฌด๊ฒฐ์„ฑ : ๋ชจ๋“  ํ…Œ์ด๋ธ”์ด ๊ธฐ๋ณธํ‚ค๋กœ ์„ ํƒ๋œ ํ•„๋“œ๋ฅผ ๊ฐ€์ ธ์•ผ ํ•œ๋‹ค.(๊ธฐ๋ณธํ‚ค๋ฅผ ๊ฐ€์ ธ์•ผ ํ•œ๋‹ค.) ๊ณ ์œ ํ•œ ๊ฐ’, NULL ํ—ˆ์šฉ ํ•˜์ง€ ์•Š์Œ.
    • ์ฐธ์กฐ ๋ฌด๊ฒฐ์„ฑ : ์ฐธ์กฐ ๊ด€๊ณ„์— ์žˆ๋Š” ๋‘ ํ…Œ์ด๋ธ”์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ํ•ญ์ƒ ์ผ๊ด€๋œ ๊ฐ’์„ ๊ฐ–๋„๋ก ์œ ์ง€. ์ฐธ์กฐ ๋Œ€์ƒ์ด ์กด์žฌํ•˜์ง€ ์•Š๋Š” ์™ธ๋ž˜ ํ‚ค๋ฅผ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.
      • RESTRICTED : ๋ ˆ์ฝ”๋“œ๋ฅผ ์ฐธ์กฐํ•˜๊ณ  ์žˆ๋Š” ๊ฐœ์ฒด๊ฐ€ ์žˆ๋‹ค๋ฉด, ๋ณ€๊ฒฝ ๋˜๋Š” ์‚ญ์ œ ์—ฐ์‚ฐ์„ ์ทจ์†Œ
      • CASCADE : ๋ ˆ์ฝ”๋“œ๋ฅผ ์ฐธ์กฐํ•˜๊ณ  ์žˆ๋Š” ๊ฐœ์ฒด๋„ ๋ณ€๊ฒฝ ๋˜๋Š” ์‚ญ์ œ
      • SET NULL : ๋ ˆ์ฝ”๋“œ๋ฅผ ์ฐธ์กฐํ•˜๊ณ  ์žˆ๋Š” ๊ฐœ์ฒด์˜ ๊ฐ’์„ NULL๋กœ ์„ค์ •
    • ๋„๋ฉ”์ธ ๋ฌด๊ฒฐ์„ฑ : ํ…Œ์ด๋ธ”์— ์กด์žฌํ•˜๋Š” ํ•„๋“œ์˜ ๋ฌด๊ฒฐ์„ฑ ๋ณด์žฅ. ํ•„๋“œ์˜ ํƒ€์ž…, null๊ฐ’์˜ ํ—ˆ์šฉ ๋“ฑ ์‚ฌํ•ญ์„ ์ •์˜ํ•˜๊ณ  ์˜ฌ๋ฐ”๋ฅธ ๋ฐ์ดํ„ฐ๊ฐ€ ์ž…๋ ฅ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๊ฒƒ
    • ๋ฌด๊ฒฐ์„ฑ ๊ทœ์น™ : ๋ฐ์ดํ„ฐ์˜ ๋ฌด๊ฒฐ์„ฑ์„ ์ง€ํ‚ค๊ธฐ ์œ„ํ•œ ๋ชจ๋“  ์ œ์•ฝ ์‚ฌํ•ญ์„ ๋งํ•œ๋‹ค. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ „์ฒด์— ๊ณตํ†ต์ ์œผ๋กœ ์ ์šฉ๋˜๋Š” ๊ทœ์น™

 

๋‚ฎ์€ ๋‹จ๊ณ„ Isolation Level์„ ํ™œ์šฉํ•  ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ํ˜„์ƒ๋“ค

  • Dirty Read
    • ์–ด๋–ค ํŠธ๋žœ์žญ์…˜์—์„œ ์•„์ง ์‹คํ–‰์ด ๋๋‚˜์ง€ ์•Š์€ ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์— ์˜ํ•œ ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ๋ณด๊ฒŒ๋˜๋Š” ๊ฒฝ์šฐ
    • ์ปค๋ฐ‹๋˜์ง€ ์•Š์€ ์ˆ˜์ •์ค‘์ธ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์—์„œ ์ฝ์„ ์ˆ˜ ์žˆ๋„๋ก ํ—ˆ์šฉํ•  ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ํ˜„์ƒ
  • Non-Repeatable Read
    • ํ•œ ํŠธ๋žœ์žญ์…˜์—์„œ ๊ฐ™์€ ์ฟผ๋ฆฌ๋ฅผ ๋‘ ๋ฒˆ ์ˆ˜ํ–‰ํ•  ๋•Œ ๊ทธ ์‚ฌ์ด์— ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜ ๊ฐ’์„ ์ˆ˜์ • ๋˜๋Š” ์‚ญ์ œํ•˜๋ฉด์„œ ๋‘ ์ฟผ๋ฆฌ์˜ ๊ฒฐ๊ณผ๊ฐ€ ์ƒ์ดํ•˜๊ฒŒ ๋‚˜ํƒ€๋‚˜๋Š” ์ผ๊ด€์„ฑ์ด ๊นจ์ง„ ํ˜„์ƒ
    • ํ•œ ํŠธ๋žœ์žญ์…˜์—์„œ ๋˜‘๊ฐ™์€ SELECT๋ฅผ ์ˆ˜ํ–‰ํ–ˆ์„ ๋•Œ ํ•ญ์ƒ ๊ฐ™์€ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•ด์•ผ ํ•œ๋‹ค๋Š” Repeatable Read ์ •ํ•ฉ์„ฑ์— ์–ด๊ธ‹๋‚จ
  • Phantom Read
    • ํ•œ ํŠธ๋žœ์žญ์…˜ ์•ˆ์—์„œ ์ผ์ • ๋ฒ”์œ„์˜ ๋ ˆ์ฝ”๋“œ๋ฅผ ๋‘ ๋ฒˆ ์ด์ƒ ์ฝ์—ˆ์„ ๋•Œ, ์ฒซ๋ฒˆ์งธ ์ฟผ๋ฆฌ์—์„œ ์—†๋˜ ๋ ˆ์ฝ”๋“œ๊ฐ€ ๋‘๋ฒˆ์งธ ์ฟผ๋ฆฌ์—์„œ ๋‚˜ํƒ€๋‚˜๋Š” ํ˜„์ƒ
    • ํŠธ๋žœ์žญ์…˜ ๋„์ค‘ ์ƒˆ๋กœ์šด ๋ ˆ์ฝ”๋“œ ์‚ฝ์ž…์„ ํ—ˆ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋‚˜ํƒ€๋‚จ
Isolation Level Dirty Read Non-Reapeatable Read Phantom Read
Read Uncommitted O O O
Read committed - O O
Repeatable Read - - O
Serializable - - -

 

์ฐธ๊ณ 

๋Œ“๊ธ€