๐ŸŒ CS & Infra/Database

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

devCloud 2026. 4. 3. 17:56
728x90

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

1. ํŠธ๋žœ์žญ์…˜ ๊ฒฉ๋ฆฌ ์‹œ ๋ฐœ์ƒํ•˜๋Š” ์ด์ƒ ํ˜„์ƒ

ํŠธ๋žœ์žญ์…˜์ด ๋™์‹œ์— ์‹คํ–‰๋  ๋•Œ ๊ฒฉ๋ฆฌ ์ฒ˜๋ฆฌ๊ฐ€ ์™„๋ฒฝํ•˜์ง€ ์•Š์œผ๋ฉด ๋ฐ์ดํ„ฐ ๋ถˆ์ผ์น˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

  • Dirty Read: ์ปค๋ฐ‹๋˜์ง€ ์•Š์€ ํŠธ๋žœ์žญ์…˜์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๋Š” ํ˜„์ƒ (๋กค๋ฐฑ ์‹œ ๋ฌด๊ฒฐ์„ฑ ํŒŒ๊ดด).
  • Non-repeatable Read: ํ•œ ํŠธ๋žœ์žญ์…˜ ๋‚ด์—์„œ ๊ฐ™์€ ๋ฐ์ดํ„ฐ ์กฐํšŒ ์‹œ, ์‚ฌ์ด ๊ฐ’์ด ์ˆ˜์ •๋˜์–ด ๊ฒฐ๊ณผ๊ฐ€ ๋‹ค๋ฅธ ํ˜„์ƒ.
  • Phantom Read: ๋ฒ”์œ„ ์กฐํšŒ ์‹œ, ์‚ฌ์ด ๋ฐ์ดํ„ฐ๊ฐ€ ์‚ฝ์ž…/์‚ญ์ œ๋˜์–ด ๊ฒฐ๊ณผ ๊ฑด์ˆ˜๊ฐ€ ๋‹ฌ๋ผ์ง€๋Š” ํ˜„์ƒ.

2. SQL ํ‘œ์ค€ ๊ฒฉ๋ฆฌ ์ˆ˜์ค€ 4๋‹จ๊ณ„

๊ฒฉ๋ฆฌ ์ˆ˜์ค€ Dirty Read Non-repeatable Phantom Read
Read Uncommitted ํ—ˆ์šฉ ํ—ˆ์šฉ ํ—ˆ์šฉ
Read Committed ๋ฐฉ์ง€ ํ—ˆ์šฉ ํ—ˆ์šฉ
Repeatable Read ๋ฐฉ์ง€ ๋ฐฉ์ง€ ํ—ˆ์šฉ
Serializable ๋ฐฉ์ง€ ๋ฐฉ์ง€ ๋ฐฉ์ง€

3. ์‹ฌํ™” ๋ฐ์ดํ„ฐ ์ด์ƒ ํ˜„์ƒ

์‹ค๋ฌด ๋ฐ ์—ฐ๊ตฌ์—์„œ ์ค‘์š”ํ•˜๊ฒŒ ๋‹ค๋ฃจ๋Š” ์ถ”๊ฐ€์ ์ธ ์ด์ƒ ํ˜„์ƒ์ž…๋‹ˆ๋‹ค.

  • Dirty Write: ์ปค๋ฐ‹๋˜์ง€ ์•Š์€ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฎ์–ด์“ฐ๋Š” ๊ฒƒ (๋ชจ๋“  ์ˆ˜์ค€์—์„œ ๊ธˆ์ง€).
  • Lost Update: ๋‘ ํŠธ๋žœ์žญ์…˜์ด ๋™์‹œ์— ์ˆ˜์ • ์‹œ, ๋จผ์ € ์ˆ˜์ •๋œ ๋‚ด์šฉ์ด ์‚ฌ๋ผ์ง€๋Š” ํ˜„์ƒ.
  • Read Skew: ์—ฐ๊ด€๋œ ๋‘ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์„ ๋•Œ, ์‹œ์ฐจ๋กœ ์ธํ•ด ๋ฐ์ดํ„ฐ ๋ถˆ์ผ์น˜๋ฅผ ๊ฒฝํ—˜ํ•˜๋Š” ํ˜„์ƒ.
  • Write Skew: ์„œ๋กœ ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ •ํ–ˆ์ง€๋งŒ ๊ฒฐ๊ณผ์ ์œผ๋กœ ๋น„์ฆˆ๋‹ˆ์Šค ์ œ์•ฝ ์กฐ๊ฑด์ด ๊นจ์ง€๋Š” ํ˜„์ƒ.

4. ์Šค๋ƒ…์ƒท ๊ฒฉ๋ฆฌ (Snapshot Isolation)

ํ˜„๋Œ€ RDBMS์—์„œ ์„ฑ๋Šฅ๊ณผ ์ •ํ•ฉ์„ฑ์„ ๋ชจ๋‘ ์žก๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.

  • ํ•ต์‹ฌ ์›๋ฆฌ: ํŠธ๋žœ์žญ์…˜ ์‹œ์ž‘ ์‹œ์ ์˜ ๋ฐ์ดํ„ฐ ์ƒํƒœ(์Šค๋ƒ…์ƒท)๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์Œ.
  • First-committer-wins: ๊ฐ™์€ ๋ฐ์ดํ„ฐ์— ๋‹ค์ค‘ ์“ฐ๊ธฐ ์ž‘์—… ์‹œ, ๋จผ์ € ์ปค๋ฐ‹ํ•œ ํŠธ๋žœ์žญ์…˜๋งŒ ์„ฑ๊ณต์‹œํ‚ค๊ณ  ๋‚˜๋จธ์ง€๋Š” ์‹คํŒจ ์ฒ˜๋ฆฌ (Lost Update ๋ฐฉ์ง€).
  • MVCC์˜ ๊ทผ๊ฐ„: ์ด ๊ธฐ์ˆ ์ด ๋ฐœ์ „ํ•˜์—ฌ MVCC(Multi-Version Concurrency Control)๊ฐ€ ๋จ.

5. ์ฃผ์š” DB๋ณ„ ํŠน์ง• ์š”์•ฝ

  • MySQL (InnoDB): Repeatable Read๊ฐ€ ๊ธฐ๋ณธ๊ฐ’์ด๋ฉฐ, MVCC ๋•๋ถ„์— Phantom Read๋„ ์–ด๋А ์ •๋„ ๋ฐฉ์ง€ํ•จ.
  • Oracle: Read Committed์™€ Serializable์„ ์ฃผ๋กœ ์‚ฌ์šฉํ•˜๋ฉฐ, Serializable์€ ์Šค๋ƒ…์ƒท ๊ฒฉ๋ฆฌ๋กœ ๋™์ž‘ํ•จ.
  • PostgreSQL: ํ‘œ์ค€ ๋‹จ๊ณ„๋ฅผ ์ง€์›ํ•˜๋ฉฐ, Repeatable Read ๋‹จ๊ณ„์—์„œ ์ด๋ฏธ ์Šค๋ƒ…์ƒท ๊ฒฉ๋ฆฌ๋ฅผ ์ ์šฉํ•จ.
728x90

'๐ŸŒ CS & Infra > Database' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[Database] MVCC(๋‹ค์ค‘ ๋ฒ„์ „ ๋™์‹œ์„ฑ ์ œ์–ด)  (0) 2026.04.01