Amenable
Amenable's Blog
Amenable
  • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (189)
    • ๐Ÿ“‚ JAVA (87)
      • ์ดํŽ™ํ‹ฐ๋ธŒ ์ž๋ฐ” (65)
      • ์ฃผ์š” ๊ฐœ๋… (22)
    • ๐Ÿ“‚ ๊ฐœ๋ฐœ ์„œ์  (22)
      • ์‹ค์šฉ์ฃผ์˜ ํ”„๋กœ๊ทธ๋ž˜๋จธ (1)
      • ๊ฐ์ฒด์ง€ํ–ฅ์˜ ์‚ฌ์‹ค๊ณผ ์˜คํ•ด (2)
      • ํด๋ฆฐ ์ฝ”๋“œ (8)
      • ํ•จ๊ป˜ ์ž๋ผ๊ธฐ (1)
      • ๊ทธ๋ฆผ์œผ๋กœ ๋ฐฐ์šฐ๋Š” HTTP&Network Basic (10)
    • ๐Ÿ“‚ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค (8)
      • ๊ฐœ๋… (8)
      • ๋ฌธ์ œํ’€์ด (0)
    • ๐Ÿ“‚ ๋„คํŠธ์›Œํฌ (14)
      • ๊ฐœ๋… (6)
      • ์„ฑ๊ณต๊ณผ ์‹คํŒจ๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” 1%์˜ ๋„คํŠธ์›Œํฌ ์›๋ฆฌ (8)
    • ๐Ÿ“‚ ์Šคํ”„๋ง (13)
      • ๊ธฐ๋ณธ ๊ฐœ๋… (13)
    • ๐Ÿ“‚ WEB (5)
    • ๐Ÿ“‚ ์ž๋ฃŒ๊ตฌ์กฐ (12)
      • ๊ฐœ๋… (2)
      • ์ •๋ ฌ (8)
      • ํŠธ๋ฆฌ (2)
    • ๐Ÿ“‚ ์•Œ๊ณ ๋ฆฌ์ฆ˜ (10)
      • ์ตœ์†Œ์‹ ์žฅํŠธ๋ฆฌ (2)
      • ์ตœ๋‹จ ๊ฒฝ๋กœ (2)
      • ๋ฌธ์ž์—ด (2)
      • ETC (4)
    • ๐Ÿ“‚ ์•Œ๊ณ ๋ฆฌ์ฆ˜_๋ฌธ์ œํ’€์ด (4)
      • BOJ_๋ฐฑ์ค€ (4)
    • ๐Ÿ“‚ ํ”„๋กœ๊ทธ๋ž˜๋ฐ (3)
    • ๐Ÿ“‚ DevOps (2)
      • ๋ฐฐํฌ (2)
    • ๐Ÿ“‚ ํ›„๊ธฐ (8)
      • ์šฐ์•„ํ•œ ํ…Œํฌ์ฝ”์Šค(ํ”„๋ฆฌ์ฝ”์Šค) (4)
      • 2023๋…„ (3)
      • 2024๋…„ (1)
    • ๐Ÿ“‚ ํšŒ๊ณ  (1)
      • 2023๋…„ (1)

๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

  • ๐Ÿš€ GitHub

ํ‹ฐ์Šคํ† ๋ฆฌ

hELLO ยท Designed By ์ •์ƒ์šฐ.
Amenable

Amenable's Blog

ํŠธ๋žœ์žญ์…˜์˜ ๊ฒฉ๋ฆฌ ์ˆ˜์ค€ (Transaction Isolation Level)
๐Ÿ“‚ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค/๊ฐœ๋…

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

2023. 6. 18. 15:05

๐Ÿ“™ 1. ๊ฒฉ๋ฆฌ ์ˆ˜์ค€์ด๋ž€

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

  ๊ฒฉ๋ฆฌ ์ˆ˜์ค€์€ ํฌ๊ฒŒ 'READ UNCOMMITTED', 'READ COMMITTED', 'REPEATABLE READ', 'SERIALIZABLE'์˜ 4๊ฐ€์ง€๋กœ ๋‚˜๋‰œ๋‹ค. ๋’ค๋กœ ๊ฐˆ์ˆ˜๋ก ๊ฐ ํŠธ๋žœ์žญ์…˜ ๊ฐ„์˜ ๋ฐ์ดํ„ฐ ๊ฒฉ๋ฆฌ(๊ณ ๋ฆฝ) ์ •๋„๊ฐ€ ๋†’์•„์ง€๋ฉฐ, ๋™์‹œ ์ฒ˜๋ฆฌ ์„ฑ๋Šฅ๋„ ๋–จ์–ด์ง€๋Š” ๊ฒƒ์ด ์ผ๋ฐ˜์ ์ด๋‹ค.
  'DIRTY READ'๋ผ๊ณ ๋„ ํ•˜๋Š” 'READ UNCOMMITTED"๋Š” ์ผ๋ฐ˜์ ์ธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ๋Š” ๊ฑฐ์˜ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ , 'SERIALIZABLE' ๋˜ํ•œ ๋™์‹œ์„ฑ์ด ์ค‘์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ๋Š” ๊ฑฐ์˜ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š”๋‹ค.

  ์˜ค๋ผํด ๊ฐ™์€ DBMS์—์„œ๋Š” ์ฃผ๋กœ 'READ COMMITTED' ์ˆ˜์ค€์„ ๋งŽ์ด ์‚ฌ์šฉํ•˜๋ฉฐ, MySQL์—์„œ๋Š” 'REPEATABLE READ'๋ฅผ ์ฃผ๋กœ ์‚ฌ์šฉํ•œ๋‹ค.

 

 

๐Ÿ“™ 2. ๋ถ€์ •ํ•ฉ์˜ ๋ฌธ์ œ

  ๋ฐ์ดํ„ฐ๋ฒ ์ด์„œ์˜ ๊ฒฉ๋ฆฌ ์ˆ˜์ค€์„ ์ด์•ผ๊ธฐํ•˜๋ฉด ํ•ญ์ƒ ํ•จ๊ป˜ ์–ธ๊ธ‰๋˜๋Š” ์„ธ ๊ฐ€์ง€ ๋ถ€์ •ํ•ฉ์˜ ๋ฌธ์ œ์ ์ด ์žˆ๋‹ค. ์„ธ ๊ฐ€์ง€ ๋ถ€์ •ํ•ฉ์˜ ๋ฌธ์ œ๋Š” ๊ฒฉ๋ฆฌ ์ˆ˜์ค€์— ๋”ฐ๋ผ ๋ฐœ์ƒํ•  ์ˆ˜๋„ ์žˆ๊ณ  ๋ฐœ์ƒํ•˜์ง€ ์•Š์„ ์ˆ˜๋„ ์žˆ๋‹ค.

  DIRTY READ NON-REPEATABLE READ PHANTOM READ
READ UNCOMMITTED O O O
READ COMMITTED X O O
REPEATABLE READ X X O
(InnoDB๋Š” ์—†์Œ)
SERIALIZABLE X X X
  • DIRTY READ
    ํ•œ ํŠธ๋žœ์žญ์…˜์ด ์‹คํ–‰ ์ค‘์ผ ๋•Œ ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์— ์˜ํ•ด ์ˆ˜์ •๋˜์—ˆ์ง€๋งŒ ์•„์ง '์ปค๋ฐ‹๋˜์ง€ ์•Š์€' ํ–‰์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์„ ์ˆ˜ ์žˆ์„ ๋•Œ ๋ฐœ์ƒํ•œ๋‹ค.
  • NON-REPEATABLE READ
    ํ•œ ํŠธ๋žœ์žญ์…˜ ๋‚ด์˜ ๊ฐ™์€ ํ–‰์— ๋‘ ๋ฒˆ ์ด์ƒ ์กฐํšŒ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋Š”๋ฐ, ๊ทธ ๊ฐ’์ด ๋‹ค๋ฅธ ๊ฒฝ์šฐ๋ฅผ ๋งํ•œ๋‹ค.
  • PHANTOM READ
    ํŠธ๋žœ์žญ์…˜์—์„œ ์ˆ˜ํ–‰ํ•œ ๋ณ€๊ฒฝ ์ž‘์—…์— ์˜ํ•ด ๋ ˆ์ฝ”๋“œ๊ฐ€ ๋ณด์˜€๋‹ค๊ฐ€ ์•ˆ ๋ณด์˜€๋‹ค๊ฐ€ ํ•˜๋Š” ํ˜„์ƒ์„ ๋งํ•œ๋‹ค.

  4๊ฐœ์˜ ๊ฒฉ๋ฆฌ ์ˆ˜์ค€๊ณผ ๊ฒฉ๋ฆฌ ์ˆ˜์ค€์˜ ๋ ˆ๋ฒจ์— ๋”ฐ๋ผ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€์ •ํ•ฉ์˜ ๋ฌธ์ œ์ ์„ ์ž์„ธํžˆ ์•Œ์•„๋ณด๋„๋ก ํ•˜์ž.

 

 

๐Ÿ“™ 3. READ UNCOMMITTED

  READ UNCOMMITTED๋Š” ๊ฐ€์žฅ ๋‚ฎ์€ ๊ฒฉ๋ฆฌ ์ˆ˜์ค€์œผ๋กœ, ๊ฐ ํŠธ๋žœ์žญ์…˜์—์„œ์˜ ๋ณ€๊ฒฝ ๋‚ด์šฉ์ด COMMIT์ด๋‚˜ ROLLBACK์˜ ์—ฌ๋ถ€์— ์ƒ๊ด€์—†์ด ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์— ๋ณด์ด๊ฒŒ ๋œ๋‹ค.

  ๊ทธ๋ฆผ์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋“ฏ์ด ์•„์ง ์ปค๋ฐ‹๋˜์ง€ ์•Š์€ 'emp_no=500000, first_name=Lara'์ธ ์‚ฌ์›์„ ์‚ฌ์šฉ์ž B๊ฐ€ ์กฐํšŒํ•  ์ˆ˜ ์žˆ๋‹ค. ๋ฌธ์ œ๋Š” ์‚ฌ์šฉ์ž A๊ฐ€ ์ฒ˜๋ฆฌ ๋„์ค‘ ์•Œ ์ˆ˜ ์—†๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ด INSERT ๋œ ๋‚ด์šฉ์„ ๋กค๋ฐฑํ•œ๋‹ค๊ณ  ํ•˜๋”๋ผ๋„ ์—ฌ์ „ํžˆ ์‚ฌ์šฉ์ž B๋Š” 'Lara'๊ฐ€ ์ •์ƒ์ ์ธ ์‚ฌ ์›๋ฆฌ๋ผ๊ณ  ์ƒ๊ฐํ•˜๊ณ  ๊ณ„์† ์ฒ˜๋ฆฌํ•  ๊ฒƒ์ด๋ผ๋Š” ์ ์ด๋‹ค.

  ์ด์ฒ˜๋Ÿผ ์–ด๋–ค ํŠธ๋žœ์žญ์…˜์—์„œ ์ฒ˜๋ฆฌํ•œ ์ž‘์—…์ด ์™„๋ฃŒ๋˜์ง€ ์•Š์•˜๋Š”๋ฐ๋„ ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์—์„œ ๋ณผ ์ˆ˜ ์žˆ๋Š” ํ˜„์ƒ์„ DIRTY READ(๋”ํ‹ฐ ๋ฆฌ๋“œ)๋ผ๊ณ  ํ•œ๋‹ค.

  ์ •ํ•ฉ์„ฑ(์–ด๋–ค ๋ฐ์ดํ„ฐ๋“ค์ด ๊ฐ’์ด ์„œ๋กœ ์ผ์น˜ํ•˜๋Š” ์ƒํƒœ)์— ๋ฌธ์ œ๊ฐ€ ๋งŽ์€ ๊ฒฉ๋ฆฌ ์ˆ˜์ค€์ด๋ฏ€๋กœ, MySQL์„ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ์ตœ์†Œํ•œ READ COMMITTED ์ด์ƒ์˜ ๊ฒฉ๋ฆฌ ์ˆ˜์ค€์„ ์‚ฌ์šฉํ•  ๊ฒƒ์„ ๊ถŒ์žฅํ•œ๋‹ค.

  DRITY READ NON-REPEATABLE READ PHANTOM READ
READ UNCOMMITTED O O O

 

๐Ÿ“™ 4. READ COMMITTED

  READ COMMITTED๋Š” ์˜ค๋ผํด DBMS์—์„œ ๊ธฐ๋ณธ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๊ฒฉ๋ฆฌ ์ˆ˜์ค€์ด๋ฉฐ, ์˜จ๋ผ์ธ ์„œ๋น„์Šค์—์„œ ๊ฐ€์žฅ ๋งŽ์ด ์„ ํƒ๋˜๋Š” ๊ฒฉ๋ฆฌ ์ˆ˜์ค€์ด๋‹ค. ํ•ด๋‹น ๊ฒฉ๋ฆฌ ์ˆ˜์ค€์—์„œ๋Š” ์ปค๋ฐ‹์ด ์™„๋ฃŒ๋œ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•ด์„œ๋งŒ ์กฐํšŒ๋ฅผ ํ—ˆ์šฉํ•œ๋‹ค.

  'emp_no=500000, first_name=Lara'์˜ ๋ฐ์ดํ„ฐ๊ฐ€ 'emp_no=500000, first_name=Toto'๋กœ ๋ณ€๊ฒฝ์ด ๋˜์—ˆ๋‹ค. ํ•˜์ง€๋งŒ, ์•„์ง ์ปค๋ฐ‹์ด ๋˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์šฉ์ž B๋Š” employees ํ…Œ์ด๋ธ”์ด ์•„๋‹ˆ๋ผ ์–ธ๋‘ ์˜์—ญ์— ๋ฐฑ์—…๋œ ๋ ˆ์ฝ”๋“œ์—์„œ ๊ฐ’์„ ๊ฐ€์ ธ์˜ค๊ฒŒ ๋œ๋‹ค.

 

  READ COMMITTED ๊ฒฉ๋ฆฌ ์ˆ˜์ค€์—์„œ NON-REPEATABLE READ๋ผ๋Š” ๋ถ€์ •ํ•ฉ์˜ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

  ์‚ฌ์šฉ์ž B๊ฐ€ ์ฒ˜์Œ์— 'Toto'๋ฅผ ๊ฒ€์ƒ‰ํ•˜์˜€์„ ๋•Œ๋Š” ์ผ์น˜ํ•˜๋Š” ๊ฒฐ๊ณผ๊ฐ€ ์—†์—ˆ๋‹ค. ํ•˜์ง€๋งŒ, ์‚ฌ์šฉ์ž A๊ฐ€ 'Lara'๋ผ๋Š” ์‚ฌ์›์„ 'Toto'๋กœ ๋ณ€๊ฒฝํ•˜๊ณ  ์ปค๋ฐ‹๊นŒ์ง€ ํ•œ ํ›„, ๋‹ค์‹œ ์‚ฌ์šฉ์ž B๊ฐ€ 'Toto'๋ฅผ ๊ฒ€์ƒ‰ํ•˜๋ฉด ์ด๋ฒˆ์—๋Š” ๊ฒฐ๊ณผ 1๊ฑด์ด ์กฐํšŒ๋œ๋‹ค.

  ์ด๋Š” ๋ณ„๋‹ค๋ฅธ ๋ฌธ์ œ๊ฐ€ ์—†์–ด ๋ณด์ด์ง€๋งŒ, ์‚ฌ์‹ค ์‚ฌ์šฉ์ž B๊ฐ€ ํ•˜๋‚˜์˜ ํŠธ๋žœ์žญ์…˜ ๋‚ด์—์„œ ๋˜‘๊ฐ™์€ SELECT ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ–ˆ์„ ๋•Œ๋Š” ํ•ญ์ƒ ๊ฐ™์€ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ€์ ธ์™€์•ผ ํ•œ๋‹ค๋Š” 'REPEATABLE READ' ์ •ํ•ฉ์„ฑ์— ์–ด๊ธ‹๋‚˜๋Š” ๊ฒƒ์ด๋‹ค.

  DRITY RED NON-REPEATABLE READ PHANTOM READ
READ COMMITTED X O O

 

  '๊ฒฉ๋ฆฌ ์ˆ˜์ค€๊ณผ ๋ถ€์ •ํ•ฉ์˜ ๋ฌธ์ œ'๊ฐ€ ์ •๋ฆฌ๋˜์–ด ์žˆ๋Š” ํ‘œ์—์„œ ์•Œ ์ˆ˜ ์žˆ๋“ฏ์ด REPEATABLE READ์—์„œ๋Š” NON-REPEATABLE READ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”๋‹ค.

  REPEATABLE READ ๊ฒฉ๋ฆฌ ์ˆ˜์ค€์—์„œ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ SELECT ์ฟผ๋ฆฌ ๋ฌธ์žฅ์ด ํŠธ๋žœ์žญ์…˜ ๋ฒ”์œ„ ๋‚ด์—์„œ๋งŒ ์ž‘๋™ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

๊ทธ๋ž˜์„œ START TRANSACTION(๋˜๋Š” BEGIN) ๋ช…๋ น์œผ๋กœ ํŠธ๋žœ์žญ์…˜์„ ์‹œ์ž‘ํ•œ ์ƒํƒœ์—์„œ ์˜จ์ข…์ผ ๋™์ผํ•œ ์ฟผ๋ฆฌ๋ฅผ ๋ฐ˜๋ณตํ•ด์„œ ์‹คํ–‰ํ•ด ๋ด๋„ ๋™์ผํ•œ ๊ฒฐ๊ณผ๋งŒ ๋ณด๊ฒŒ ๋œ๋‹ค.

 

 

๐Ÿ“™ 5. REPEATABLE READ

  REPEATABLE READ๋Š” MySQL์˜ InnoDB ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„์—์„œ ๊ธฐ๋ณธ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๊ฒฉ๋ฆฌ ์ˆ˜์ค€์ด๋‹ค.

  REPEATABLE READ์—์„œ๋Š” NON-REPEATABLE READ ๋ถ€์ •ํ•ฉ์ด ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”๋‹ค.

  InnoDB ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„์€ ํŠธ๋žœ์žญ์…˜์ด ROLLBACK ๋  ๊ฐ€๋Šฅ์„ฑ์— ๋Œ€๋น„ํ•ด ๋ณ€๊ฒฝ๋˜๊ธฐ ์ „ ๋ ˆ์ฝ”๋“œ๋ฅผ ์–ธ๋‘(Undo) ๊ณต๊ฐ„์— ๋ฐฑ์—…ํ•ด ๋‘๊ณ  ์‹ค์ œ ๋ ˆ์ฝ”๋“œ ๊ฐ’์„ ๋ณ€๊ฒฝํ•œ๋‹ค. (MVCC๋ฐฉ์‹)

  REPEATABLE READ๋Š” MVCC(Multi Version Concurrency Control)๋ฅผ ์œ„ํ•ด ์–ธ๋‘ ์˜์—ญ์— ๋ฐฑ์—…๋œ ์ด์ „ ๋ฐ์ดํ„ฐ๋ฅผ ์ด์šฉํ•ด ๋™์ผ ํŠธ๋žœ์žญ์…˜ ๋‚ด์—์„œ๋Š” ๋™์ผํ•œ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์—ฌ์ฃผ๊ธฐ ๋•Œ๋ฌธ์— NON-REPEATABLE READ ๋ถ€์ •ํ•ฉ์ด ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”๋‹ค.

 

  ์‚ฌ์‹ค์€ READ COMMITTED๋„ MVCC๋ฅผ ์ด์šฉํ•ด COMMIT ๋˜๊ธฐ ์ „์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด์—ฌ์ค€๋‹ค. ํ•˜์ง€๋งŒ, READ COMMITTED์™€ REPEATABLE READ๋Š” ์–ธ๋‘ ์˜์—ญ์— ๋ฐฑ์—…๋œ ๋ ˆ์ฝ”๋“œ์˜ ์—ฌ๋Ÿฌ ๋ฒ„์ „ ๊ฐ€์šด๋ฐ ๋ช‡ ๋ฒˆ์งธ ์ด์ „ ๋ฒ„์ „๊นŒ์ง€ ์ฐพ์•„ ๋“ค์–ด๊ฐ€๋А๋ƒ๊ฐ€ ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์—, NON-REPEATABLE READ ๋ฌธ์ œ์˜ ๋ฐœ์ƒ์—ฌ๋ถ€๊ฐ€ ๋‹ค๋ฅด๊ฒŒ ๋œ๋‹ค.

  REPEATABLE READ ๊ฒฉ๋ฆฌ ์ˆ˜์ค€์—์„œ ์–ด๋–ป๊ฒŒ ์–ธ๋‘ ์˜์—ญ์— ๋ฐฑ์—…๋œ ๋ ˆ์ฝ”๋“œ์— ์ ‘๊ทผํ•˜๋Š”์ง€ ์‚ดํŽด๋ณด์ž.

 

  ๋ชจ๋“  InnoDB์˜ ํŠธ๋žœ์žญ์…˜์€ ๊ณ ์œ ํ•œ ํŠธ๋žœ์žญ์…˜ ๋ฒˆํ˜ธ(์ˆœ์ฐจ์ ์œผ๋กœ ์ฆ๊ฐ€ํ•˜๋Š” ๊ฐ’, ํ…Œ์ด๋ธ”์—์„œ๋Š” TRX-ID๋กœ ํ‘œ๊ธฐํ•˜๊ฒ ๋‹ค.)๋ฅผ ๊ฐ€์ง€๋ฉฐ, ์–ธ๋‘ ์˜์—ญ์— ๋ฐฑ์—…๋œ ๋ชจ๋“  ๋ ˆ์ฝ”๋“œ์—๋Š” ๋ณ€๊ฒฝ์„ ๋ฐœ์ƒ์‹œํ‚จ ํŠธ๋žœ์žญ์…˜์˜ ๋ฒˆํ˜ธ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์–ธ๋‘ ์˜์—ญ์˜ ๋ฐฑ์—…๋œ ๋ฐ์ดํ„ฐ๋Š” InnoDB ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„์ด ๋ถˆํ•„์š”ํ•˜๋‹ค๊ณ  ํŒ๋‹จํ•˜๋Š” ์‹œ์ ์— ์ฃผ๊ธฐ์ ์œผ๋กœ ์‚ญ์ œํ•œ๋‹ค.

  ์‚ฌ์šฉ์ž B๊ฐ€ 'emp_no=500000'์ธ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•  ๋•Œ, ์ž์‹ ์˜ ํŠธ๋žœ์žญ์…˜ ๋ฒˆํ˜ธ(10๋ฒˆ) ๋ณด๋‹ค ์ž‘์€ ํŠธ๋žœ์žญ์…˜ ๋ฒˆํ˜ธ์—์„œ ๋ณ€๊ฒฝํ•œ ๊ฒƒ๋งŒ ๋ณด๊ฒŒ ๋œ๋‹ค. ๊ทธ๋ž˜์„œ ์‚ฌ์šฉ์ž B๋Š” ๋ณ€๊ฒฝ๋œ 'Toto'๋ฅผ ์–ป๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ 'Lara'๋ฅผ ์–ป๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด๋‹ค.

  ์ฆ‰, NON-REPEATABLE READ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”๋‹ค.

  ํ•˜์ง€๋งŒ, REPEATABLE READ ๊ฒฉ๋ฆฌ ์ˆ˜์ค€์—์„œ๋Š” PHANTOM READ(๋˜๋Š” PHANTOM ROW) ๋ถ€์ •ํ•ฉ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.
  ์‚ฌ์šฉ์ž B๊ฐ€ ์‹คํ–‰ํ•˜๋Š” ๋‘ ๋ฒˆ์˜ SELECT ... FOR UPDATE ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ๋Š” ์„œ๋กœ ๋‹ค๋ฅด๋‹ค. SELECT ... FOR UPDATE ์ฟผ๋ฆฌ๋Š” SELECT ํ•˜๋Š” ๋ ˆ์ฝ”๋“œ์— ์“ฐ๊ธฐ ์ž ๊ธˆ์„ ๊ฑธ์–ด์•ผ ํ•˜๋Š”๋ฐ, ์–ธ๋‘ ๋ ˆ์ฝ”๋“œ์—๋Š” ์ž ๊ธˆ์„ ๊ฑธ ์ˆ˜ ์—†๋‹ค. ๊ทธ๋ž˜์„œ SELECT ... FOR UPDATE๋‚˜ SELECT ... LOCK IN SHARE MODE๋กœ ์กฐํšŒ๋˜๋Š” ๋ ˆ์ฝ”๋“œ๋Š” ์–ธ๋‘ ์˜์—ญ์˜ ๋ณ€๊ฒฝ ์ „ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ํ˜„์žฌ ๋ ˆ์ฝ”๋“œ์˜ ๊ฐ’์„ ๊ฐ€์ ธ์˜ค๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด๋‹ค.

  DRITY READ NON-REPEATABLE READ PHANTOM READ
REPEATABLE READ X X X
(InnoDB๋Š” ์—†์Œ)

 

 

๐Ÿ“™ 6. SERIALIZABLE

  SERIALIZABLE์€ ๊ฐ€์žฅ ๋‹จ์ˆœํ•œ ๊ฒฉ๋ฆฌ ์ˆ˜์ค€์ด๋ฉด์„œ ๋™์‹œ์— ๊ฐ€์žฅ ์—„๊ฒฉํ•œ ๊ฒฉ๋ฆฌ ์ˆ˜์ค€์ด๋‹ค. ๊ทธ๋งŒํผ ๋™์‹œ ์ฒ˜๋ฆฌ ์„ฑ๋Šฅ๋„ ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜ ๊ฒฉ๋ฆฌ ์ˆ˜์ค€๋ณด๋‹ค ๋–จ์–ด์ง„๋‹ค.

  ํŠธ๋žœ์žญ์…˜์˜ ๊ฒฉ๋ฆฌ ์ˆ˜์ค€์ด SERIALIZABLE๋กœ ์„ค์ •๋˜๋ฉด ์ฝ๊ธฐ ์ž‘์—…๋„ ๊ณต์œ  ์ž ๊ธˆ(์ฝ๊ธฐ ์ž ๊ธˆ)์„ ํš๋“ํ•ด์•ผ๋งŒ ํ•˜๋ฉฐ, ๋™์‹œ์— ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์€ ๊ทธ๋Ÿฌํ•œ ๋ ˆ์ฝ”๋“œ๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ๋ชปํ•˜๊ฒŒ ๋œ๋‹ค.

  ์ฆ‰, ํ•œ ํŠธ๋žœ์žญ์…˜์—์„œ ์ฝ๊ณ  ์“ฐ๋Š” ๋ ˆ์ฝ”๋“œ๋ฅผ ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์—์„œ๋Š” ์ ˆ๋Œ€ ์ ‘๊ทผํ•  ์ˆ˜ ์—†๋Š” ๊ฒƒ์ด๋‹ค.

  DIRTY READ NON-REPEATABLE READ PHANTOM READ
SERIALIZABLE X X X

 

ํ•ด๋‹น ๊ธ€์€
๋ฐฑ์€๋นˆ, ์ด์„ฑ์šฑ ๋‹˜์˜ 'Real MySQL 8.0',
์ฃผํ™์ฒ  ๋‹˜์˜ '๋ฉด์ ‘์„ ์œ„ํ•œ CS ์ „๊ณต์ง€์‹ ๋…ธํŠธ'
๋ฅผ ์ฐธ๊ณ ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

'๐Ÿ“‚ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค > ๊ฐœ๋…' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

B-Tree ์ธ๋ฑ์Šค - (1)  (0) 2023.07.03
MySQL์˜ ์ „์ฒด ๊ตฌ์กฐ & ์ฟผ๋ฆฌ ์‹คํ–‰ ๊ตฌ์กฐ  (0) 2023.06.18
ํŠธ๋žœ์žญ์…˜(Transaction)  (0) 2023.06.17
[DB] ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ‚ค(Key) ๊ฐœ๋… & ํ‚ค(Key) ์ข…๋ฅ˜  (0) 2023.06.13
์„œ๋ธŒ์ฟผ๋ฆฌ(Subquery)  (0) 2023.04.18
    '๐Ÿ“‚ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค/๊ฐœ๋…' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
    • B-Tree ์ธ๋ฑ์Šค - (1)
    • MySQL์˜ ์ „์ฒด ๊ตฌ์กฐ & ์ฟผ๋ฆฌ ์‹คํ–‰ ๊ตฌ์กฐ
    • ํŠธ๋žœ์žญ์…˜(Transaction)
    • [DB] ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ‚ค(Key) ๊ฐœ๋… & ํ‚ค(Key) ์ข…๋ฅ˜
    Amenable
    Amenable
    CS, ์ž๋ฐ”, ์ž๋ฃŒ๊ตฌ์กฐ, ์•Œ๊ณ ๋ฆฌ์ฆ˜, ์Šคํ”„๋ง, ์Šคํ”„๋ง ๋ถ€ํŠธ์— ํ•ด๋‹นํ•˜๋Š” ๊ฐœ๋ฐœ์— ๊ด€ํ•œ ๋‚ด์šฉ์„ ๊ณต์œ ํ•ฉ๋‹ˆ๋‹ค.

    ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”