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 |
|---|