๐ก ํธ๋์ญ์
์ Isolation Level์ด๋?
ํธ๋์ญ์
๊ฒฉ๋ฆฌ ์์ค(Isolation Level)์ ๋์์ฑ ์ ์ด์์ ๋งค์ฐ ์ค์ํ ๊ฐ๋
์
๋๋ค. ์ด๋ ์ฌ๋ฌ ํธ๋์ญ์
์ด ๋์์ ์คํ๋ ๋, ๊ฐ ํธ๋์ญ์
์ด ์๋ก์๊ฒ ๋ฏธ์น๋ ์ํฅ์ ์ผ๋ง๋ ํ์ฉํ ์ง๋ฅผ ์ ์ํ๋ ๊ธฐ์ค์
๋๋ค.
๊ฒฉ๋ฆฌ ์์ค์ ๋ฐ๋ผ ํธ๋์ญ์
๊ฐ์ ๋ฐ์ํ ์ ์๋ ๋ฐ์ดํฐ ์ผ๊ด์ฑ ๋ฌธ์ ๋ฅผ ๋ค๋ฅด๊ฒ ์ฒ๋ฆฌํฉ๋๋ค.
๐ฆ ํธ๋์ญ์
๊ฒฉ๋ฆฌ ์์ค์ ํ์์ฑ
๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ACID ํน์ฑ ์ค ํ๋์ธ Isolation(๋
๋ฆฝ์ฑ)์ ์ ์งํ์ฌ, ๊ฐ ํธ๋์ญ์
์ด ๋
๋ฆฝ์ ์ผ๋ก ์ํ๋๋๋ก ํด์ผ ํฉ๋๋ค. ์ด๋ฅผ ์ํด ํธ๋์ญ์
์ด ์คํ๋๋ ๋์ Locking์ ํตํด ๋ค๋ฅธ ํธ๋์ญ์
์ด ํด๋น ๋ฐ์ดํฐ์ ์ ๊ทผํ์ง ๋ชปํ๋๋ก ๋ง์ต๋๋ค.
โ
Locking์ ์ญํ
- ํธ๋์ญ์
์ด DB ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃจ๋ ๋์, ๋ค๋ฅธ ํธ๋์ญ์
์ด ํด๋น ๋ฐ์ดํฐ์ ์ ๊ทผํ๊ฑฐ๋ ์์ ํ์ง ๋ชปํ๊ฒ ํ์ฌ ๋ฐ์ดํฐ ์ผ๊ด์ฑ์ ๋ณด์ฅํฉ๋๋ค.
- Locking์ด ์์ผ๋ฉด ํธ๋์ญ์
์ด ๋์์ ์คํ๋๋ฉด์ ๋ฐ์ดํฐ์ ๋ถ์ผ์น๋ ์์์ด ๋ฐ์ํ ์ ์์ต๋๋ค.
๐ค ๊ทธ๋ ๋ค๋ฉด ๋ฌด์กฐ๊ฑด Locking์ด ์ข์๊น?
๐จ ๋ฌธ์ ์ : ์ฑ๋ฅ ์ ํ
๋ฌด์กฐ๊ฑด Locking์ ์ ์ฉํ๋ฉด ์ฑ๋ฅ์ด ๋จ์ด์ง ์ ์์ต๋๋ค. ํธ๋์ญ์
์ ์์ฐจ์ ์ผ๋ก ์ฒ๋ฆฌํด์ผ ํ๊ธฐ ๋๋ฌธ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฒ๋ฆฌ ์๋๊ฐ ํฌ๊ฒ ์ ํ๋ ์ ์์ต๋๋ค.
- Locking์ด ๋ง์์๋ก ์ฒ๋ฆฌ ์๋๊ฐ ๋๋ ค์ง ์ํ์ด ์์ต๋๋ค.
- ์๋ชป๋ Locking ๋ฐฉ์์ ์ฑ๋ฅ ์ ํ ๋ฟ๋ง ์๋๋ผ, ๋ฐ์ดํฐ ์ฒ๋ฆฌ์ ๋ณ๋ชฉ ํ์์ ์ด๋ํ ์ ์์ต๋๋ค.
๐ ๊ฒฐ๋ก : ์ต๋ํ ํจ์จ์ ์ธ Locking์ด ํ์ํ๋ค!
์ฑ๋ฅ๊ณผ ๋ฐ์ดํฐ ์ผ๊ด์ฑ์ ๋์์ ์ ์งํ๋ ค๋ฉด, ํจ์จ์ ์ธ Locking ๋ฐฉ๋ฒ์ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
Lock์ ๋ฒ์๋ฅผ ์ต์ํํ๊ฑฐ๋ ์ํฉ์ ๋ง๋ ๊ฒฉ๋ฆฌ ์์ค์ ์ ์ ํ ์ ํํ์ฌ ์ต์ ํ๋ ์ฑ๋ฅ๊ณผ ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ์ ๋ชจ๋ ์ ์งํ ์ ์์ต๋๋ค.
Isolation Level์ ์ข
๋ฅ
1. Read Uncommitted (๋ ๋ฒจ 0)
Read Uncommitted๋ ๊ฐ์ฅ ๋ฎ์ ์์ค์ ๊ฒฉ๋ฆฌ๋ฅผ ์ ๊ณตํ๋ Isolation Level์
๋๋ค. ์ด ๋ ๋ฒจ์์๋ ํธ๋์ญ์
์ด ์์ง ์ปค๋ฐ๋์ง ์์ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฅธ ํธ๋์ญ์
์ด ์ฝ์ ์ ์๋๋ก ํ์ฉํฉ๋๋ค. ์ด๋ฅผ "๋ํฐ ๋ฆฌ๋(Dirty Read)"๋ผ๊ณ ํฉ๋๋ค.
- Shared Lock์ด ๊ฑธ๋ฆฌ์ง ์์:
- SELECT ๋ฌธ์ฅ์ด ์คํ๋ ๋ Shared Lock์ด ๊ฑธ๋ฆฌ์ง ์์ผ๋ฏ๋ก, ํด๋น ๋ฐ์ดํฐ์ ๋ค๋ฅธ ํธ๋์ญ์
๋ ์ ๊ทผํ ์ ์์ต๋๋ค.
- ๊ฒฐ๊ณผ์ ์ผ๋ก ์์ง Commit๋์ง ์์, ์ฆ ์๋ฃ๋์ง ์์ ํธ๋์ญ์
์ด ์์ ํ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฅธ ํธ๋์ญ์
์ด ์ฝ์ ์ ์์ต๋๋ค.
๐ด ๋ฌธ์ ์ :
- ๋ํฐ ๋ฆฌ๋(Dirty Read)๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค. ์ฆ, ๋ค๋ฅธ ํธ๋์ญ์
์ด ์๋ฃ๋์ง ์์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์๋๋ฐ, ์ดํ ํด๋น ํธ๋์ญ์
์ด ๋กค๋ฐฑ(Rollback)๋๋ฉด ๋ฐ์ดํฐ๊ฐ ์ฌ๋ผ์ง๊ฑฐ๋ ๋ณ๊ฒฝ๋ ์ ์์ต๋๋ค.
- ์ผ๊ด์ฑ ์๋ ๋ฐ์ดํฐ๊ฐ ๋ฐ์ํ์ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ๋ขฐ์ฑ์ ๋ฌธ์ ๊ฐ ์๊ธธ ์ ์์ต๋๋ค.
๊ฒฐ๋ก : ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ผ๊ด์ฑ์ ์ ์งํ๊ธฐ ์ด๋ ต๊ณ , ์ ๋ขฐ์ฑ์ด ๋ฎ์ง๋ง ์ฑ๋ฅ ์ธก๋ฉด์์๋ ๋ฐ์ด๋ ๊ฒฉ๋ฆฌ ์์ค์
๋๋ค.
2. Read Committed (๋ ๋ฒจ 1)
Read Committed๋ ํธ๋์ญ์
์ด ์ํ๋๋ ๋์ ๋ค๋ฅธ ํธ๋์ญ์
์ด ํด๋น ๋ฐ์ดํฐ์ ์ ๊ทผํ์ง ๋ชปํ๋๋ก Lock์ ๊ฑธ์ด์ฃผ๋ ๋ฐฉ์์
๋๋ค. ์ด ๋ ๋ฒจ์์๋ ์ปค๋ฐ๋ ๋ฐ์ดํฐ๋ง ์ฝ์ ์ ์๊ธฐ ๋๋ฌธ์ ๋ํฐ ๋ฆฌ๋๋ฅผ ๋ฐฉ์งํ ์ ์์ต๋๋ค.
- Shared Lock์ด ๊ฑธ๋ฆผ:
- ํธ๋์ญ์
์ด ๋ฐ์ดํฐ๋ฅผ ์กฐํํ ๋, ํด๋น ๋ฐ์ดํฐ์ Shared Lock์ ๊ฑธ์ด ๋ค๋ฅธ ํธ๋์ญ์
์ด ์ ๊ทผํ์ง ๋ชปํ๊ฒ ํฉ๋๋ค.
- ํธ๋์ญ์
์ด ์ปค๋ฐ๋ ๋ฐ์ดํฐ๋ง ์ฝ์ ์ ์์ต๋๋ค.
๐ข ์ฅ์ :
- ๋ํฐ ๋ฆฌ๋๊ฐ ๋ฐ์ํ์ง ์์. ์ฆ, ์ปค๋ฐ๋์ง ์์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ง ์๊ธฐ ๋๋ฌธ์ ๋ฐ์ดํฐ์ ์ผ๊ด์ฑ์ด ๋ ๋์์ง๋๋ค.
๐ด ๋จ์ :
- Non-repeatable Read๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค. ํธ๋์ญ์
A๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ ํ, ํธ๋์ญ์
B๊ฐ ๊ทธ ๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝํ ๋ค์ ํธ๋์ญ์
A๊ฐ ๋ค์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ผ๋ฉด, ์ฒ์๊ณผ ๋ค๋ฅธ ๊ฐ์ด ๋์ฌ ์ ์์ต๋๋ค.
๊ฒฐ๋ก : ๋๋ถ๋ถ์ SQL ์๋ฒ์์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ฌ์ฉํ๋ ๊ฒฉ๋ฆฌ ์์ค์ผ๋ก, ๋ํฐ ๋ฆฌ๋๋ฅผ ๋ฐฉ์งํ์ฌ ์ผ๊ด์ฑ์ ์ด๋ ์ ๋ ์ ์งํ๋ฉด์ ์ฑ๋ฅ๋ ์ ์ ํ ํ๋ณดํ ์ ์๋ ๊ท ํ ์๋ ๋ฐฉ์์
๋๋ค.
3. Repeatable Read (๋ ๋ฒจ 2)
Repeatable Read๋ ํธ๋์ญ์
์ด ์๋ฃ๋ ๋๊น์ง ๋์ผํ ๋ฐ์ดํฐ๋ฅผ ๋ฐ๋ณตํด์ ์กฐํํ ์ ์๊ฒ ๋ณด์ฅํ๋ ๊ฒฉ๋ฆฌ ์์ค์
๋๋ค. ์ฆ, ํ๋์ ํธ๋์ญ์
๋ด์์ ๋์ผํ ๋ฐ์ดํฐ๋ฅผ ์ฌ๋ฌ ๋ฒ ์กฐํํด๋ ๊ทธ ๊ฐ์ด ํญ์ ๋์ผํฉ๋๋ค.
- Shared Lock์ด ๊ฑธ๋ฆผ:
- ํธ๋์ญ์
์ด ์๋ฃ๋ ๋๊น์ง SELECT ๋ฌธ์ฅ์ด ์ฌ์ฉํ๋ ๋ชจ๋ ๋ฐ์ดํฐ์ Shared Lock์ด ๊ฑธ๋ฆฌ๋ฉฐ, ์ด๋ฅผ ํตํด ๋ค๋ฅธ ํธ๋์ญ์
์ด ํด๋น ๋ฐ์ดํฐ์ ์์ ํ์ง ๋ชปํ๊ฒ ๋ง์ต๋๋ค.
๐ข ์ฅ์ :
- ํธ๋์ญ์
๋ด์์ ์กฐํํ ๋ฐ์ดํฐ์ ์ผ๊ด์ฑ์ด ๋ณด์ฅ๋ฉ๋๋ค.
- ์๋ฅผ ๋ค์ด, ํธ๋์ญ์
A๊ฐ ์ฒ์์ ์กฐํํ ๋ฐ์ดํฐ์ ๋์ค์ ๋ค์ ์กฐํํ ๋ฐ์ดํฐ๊ฐ ํญ์ ๋์ผํ๋ค๋ ๊ฒ์ ๋ณด์ฅํฉ๋๋ค.
๐ด ๋จ์ :
- Phantom Read ๋ฌธ์ ๋ ์ฌ์ ํ ๋ฐ์ํ ์ ์์ต๋๋ค. ์ฆ, ํธ๋์ญ์
A๊ฐ ๋ฐ์ดํฐ ์งํฉ์ ์กฐํํ ํ, ํธ๋์ญ์
B๊ฐ ์๋ก์ด ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐํ๋ฉด, ํธ๋์ญ์
A๊ฐ ๋ค์ ์กฐํํ ๋ ์๋ก์ด ๋ฐ์ดํฐ๊ฐ ํฌํจ๋ ์ ์์ต๋๋ค.
๊ฒฐ๋ก : MySQL์์ ๊ธฐ๋ณธ(Default)์ผ๋ก ์ฌ์ฉํ๋ ๊ฒฉ๋ฆฌ ์์ค์
๋๋ค. ๋ฐ์ดํฐ ์กฐํ ์ ์ผ๊ด์ฑ์ ๋ณด์ฅํ์ง๋ง, ์ฑ๋ฅ๊ณผ ์ผ๊ด์ฑ์ ๊ท ํ์ ๊ณ ๋ คํ ๊ฒฉ๋ฆฌ ์์ค์
๋๋ค.
4. Serializable (๋ ๋ฒจ 3)
Serializable์ ๊ฐ์ฅ ๋์ ๊ฒฉ๋ฆฌ ์์ค์ผ๋ก, ํธ๋์ญ์
์ด ์๋ฃ๋ ๋๊น์ง ํด๋น ๋ฐ์ดํฐ์ ๋ํ ์ฝ๊ธฐ์ ์ฐ๊ธฐ ์์
์ ์ ๋ถ ์ฐจ๋จํ๋ ๋ฐฉ์์
๋๋ค. ์ด ์์ค์ ํธ๋์ญ์
๊ฐ์ ์๋ฒฝํ ๋
๋ฆฝ์ฑ์ ๋ณด์ฅํฉ๋๋ค.
- Shared Lock๊ณผ Exclusive Lock์ด ๊ฑธ๋ฆผ:
- ํธ๋์ญ์
์ด ์๋ฃ๋ ๋๊น์ง ํด๋น ๋ฐ์ดํฐ์ ๋ํ SELECT ๋ฌธ์ฅ์ ํฌํจํ ๋ชจ๋ ์์
์ ๋ํด ๋ค๋ฅธ ํธ๋์ญ์
์ด ์ ๊ทผํ์ง ๋ชปํ๋๋ก ์ฐจ๋จํฉ๋๋ค.
- ์ฐ๊ธฐ๋ฟ๋ง ์๋๋ผ ์ฝ๊ธฐ ์์
๋ ๋ง๊ธฐ ๋๋ฌธ์ ๋ฐ์ดํฐ์ ์์ ํ ๋
๋ฆฝ์ฑ์ ๋ณด์ฅํฉ๋๋ค.
๐ข ์ฅ์ :
- ํธ๋์ญ์
๊ฐ์ ์๋ฒฝํ ์ผ๊ด์ฑ์ ๋ณด์ฅํฉ๋๋ค. ๋ค๋ฅธ ํธ๋์ญ์
์ด ํด๋น ๋ฐ์ดํฐ์ ์๋ฌด๋ฐ ์ํฅ์ ๋ฏธ์น์ง ๋ชปํฉ๋๋ค.
- Phantom Read๋ ๋ฐ์ํ์ง ์์ผ๋ฉฐ, ํธ๋์ญ์
๋ด์ ๋ชจ๋ ์์
์ด ์๋ฒฝํ ๋
๋ฆฝ์ ์ผ๋ก ์ํ๋ฉ๋๋ค.
๐ด ๋จ์ :
- ์ฑ๋ฅ ์ ํ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค. ๋ค๋ฅธ ํธ๋์ญ์
์ด ํด๋น ๋ฐ์ดํฐ์ ์ ๊ทผํ์ง ๋ชปํ๋๋ก ๊ฐ๋ ฅํ ์ ์ฝ์ ๋๊ธฐ ๋๋ฌธ์ ๋์ ์ฒ๋ฆฌ ์ฑ๋ฅ์ด ํฌ๊ฒ ๊ฐ์ํ ์ ์์ต๋๋ค.
๊ฒฐ๋ก : ๊ฐ์ฅ ๋์ ์์ค์ ๊ฒฉ๋ฆฌ๋ฅผ ๋ณด์ฅํ์ง๋ง, ์ฑ๋ฅ ์ธก๋ฉด์์๋ ํจ์จ์ ์ด์ง ์์ ์ ์์ต๋๋ค. ์๋ฒฝํ ๋ฐ์ดํฐ ์ผ๊ด์ฑ์ด ํ์์ ์ธ ๊ฒฝ์ฐ์ ์ฌ์ฉ๋ฉ๋๋ค.
๐ ํธ๋์ญ์
๊ฒฉ๋ฆฌ ์์ค(Isolation Level) ์ ํ ์ ์ฃผ์ํด์ผ ํ ๋ฌธ์ ๋ค
1๏ธโฃ ์ ํ ์ ๊ณ ๋ ค์ฌํญ
-
๋์์ฑ๊ณผ ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ์ ๊ด๊ณ:
- Isolation Level์ ํธ๋์ญ์
์ ๋์ ์คํ๊ณผ ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ(์ผ๊ด์ฑ) ์ฌ์ด์ ํธ๋ ์ด๋์คํ๋ฅผ ๊ฒฐ์ ํ๋ ์์์
๋๋ค.
- ๋์์ฑ์ ๋์ด๋ฉด ์ฌ๋ฌ ํธ๋์ญ์
์ด ๋์์ ์ฒ๋ฆฌ๋์ด ์ฑ๋ฅ์ ํฅ์๋ ์ ์์ง๋ง, ๊ทธ๋งํผ ๋ฐ์ดํฐ์ ๋ฌด๊ฒฐ์ฑ์ด ๊นจ์ง ์ํ์ด ์ปค์ง๋๋ค. ๋ฐ๋๋ก ๋ฌด๊ฒฐ์ฑ์ ๋์ด๊ธฐ ์ํด ๊ฒฉ๋ฆฌ ์์ค์ ๊ฐํํ๋ฉด ๋์์ฑ์ด ๋ฎ์์ ธ ์ฑ๋ฅ ์ ํ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค.
-
๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ ๋ฌธ์ :
- ๊ฒฉ๋ฆฌ ์์ค์ด ๋ฎ์ ๊ฒฝ์ฐ, ์ฌ๋ฌ ํธ๋์ญ์
์ด ๋์์ ๋ฐ์ดํฐ์ ์ ๊ทผํ๊ฒ ๋์ด Dirty Read, Non-repeatable Read, Phantom Read์ ๊ฐ์ ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค.
-
๋น์ฉ:
- Isolation Level์ ๋์ด๋ฉด ๋ฐ์ดํฐ์ ๋ฌด๊ฒฐ์ฑ์ ๋ณด์ฅ๋์ง๋ง, ๊ทธ์ ๋ฐ๋ผ ์ฑ๋ฅ์ ์ํฅ์ ๋ฏธ์น ์ ์๋ ๋น์ฉ์ด ์ฆ๊ฐํฉ๋๋ค. ์ฆ, ๋์ ๊ฒฉ๋ฆฌ ์์ค์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์คํ
์ ์ฒ๋ฆฌ ์ฑ๋ฅ์ ์ถ๊ฐ์ ์ธ ๋ถํ๋ฅผ ์ค ์ ์์ต๋๋ค.
2๏ธโฃ ๋ฎ์ ๋จ๊ณ Isolation Level์ ํ์ฉํ ๋ ๋ฐ์ํ๋ ํ์๋ค
1. Dirty Read (๋ํฐ ๋ฆฌ๋)
-
์ค๋ช
: ์ปค๋ฐ๋์ง ์์ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฅธ ํธ๋์ญ์
์์ ์ฝ๋ ๊ฒ์ ํ์ฉํ๋ ์ํฉ์ ๋งํฉ๋๋ค. ์ฆ, ํ ํธ๋์ญ์
์ด ๋ฐ์ดํฐ๋ฅผ ์์ ํ๊ณ ์์ง Commitํ์ง ์์๋๋ฐ, ๋ค๋ฅธ ํธ๋์ญ์
์ด ๊ทธ ๋ฐ์ดํฐ๋ฅผ ์ฝ๋ ํ์์
๋๋ค. ์ด๋ ์์ ์ค์ธ ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ฒ ๋๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค.
- ์์: ํธ๋์ญ์
A๊ฐ ํน์ ๋ฐ์ดํฐ๋ฅผ ์์ ํ๊ณ ์๋ ๋์, ํธ๋์ญ์
B๊ฐ ํด๋น ๋ฐ์ดํฐ์ ์ ๊ทผํ์ฌ ์์ ๋์ง ์์ ์ํ์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ต๋๋ค. ๊ทธ๋ฌ๋ ๋์ค์ ํธ๋์ญ์
A๊ฐ Rollback์ ์ํํ๋ฉด, ํธ๋์ญ์
B๊ฐ ์ฝ์ ๋ฐ์ดํฐ๋ ๋ ์ด์ ์ ํจํ์ง ์์ ์ํ๊ฐ ๋ฉ๋๋ค.
-
๋ฐ์ ๋ ๋ฒจ: Read Uncommitted ๊ฒฉ๋ฆฌ ์์ค์์ ๋ฐ์ํ ์ ์์ต๋๋ค. ์ด ์์ค์์๋ ํธ๋์ญ์
์ด ์ปค๋ฐ๋์ง ์์๋ ๋ค๋ฅธ ํธ๋์ญ์
์์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ ์ ์๊ธฐ ๋๋ฌธ์ Dirty Read๊ฐ ๋ฐ์ํฉ๋๋ค.
2. Non-Repeatable Read (๋ฐ๋ณต ๋ถ๊ฐ๋ฅํ ์ฝ๊ธฐ)
-
์ค๋ช
: ๊ฐ์ ํธ๋์ญ์
๋ด์์ ๊ฐ์ ์ฟผ๋ฆฌ๋ฅผ ๋ ๋ฒ ์คํํ ๋, ๊ทธ ์ฌ์ด์ ๋ค๋ฅธ ํธ๋์ญ์
์ด ํด๋น ๋ฐ์ดํฐ๋ฅผ ์์ ํ๋ฉด ๋ ๋ฒ์งธ ์ฟผ๋ฆฌ์ ๊ฒฐ๊ณผ๊ฐ ์ฒ์ ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ์ ๋ค๋ฅด๊ฒ ๋์ค๋ ํ์์
๋๋ค. ์ด๋ ์ผ๊ด์ฑ์ด ๊นจ์ง ์ํ์์ ๋ฐ์ํ๋ ๋ฌธ์ ์
๋๋ค.
- ์์: ํธ๋์ญ์
A๊ฐ ๋ฐ์ดํฐ๋ฅผ ์กฐํํ ํ, ํธ๋์ญ์
B๊ฐ ๊ทธ ๋ฐ์ดํฐ๋ฅผ ์์ ํ๊ฑฐ๋ ์ญ์ ํ ๊ฒฝ์ฐ, ํธ๋์ญ์
A๊ฐ ๋ค์ ๋ฐ์ดํฐ๋ฅผ ์กฐํํ์ ๋ ์ฒ์๊ณผ ๋ค๋ฅธ ๊ฐ์ด ๋ฐํ๋ฉ๋๋ค.
-
๋ฐ์ ๋ ๋ฒจ: Read Committed์ Read Uncommitted ์์ค์์ ๋ฐ์ํ ์ ์์ต๋๋ค. ํธ๋์ญ์
์ด ์๋ฃ๋๊ธฐ ์ ์ ๋ค๋ฅธ ํธ๋์ญ์
์ด ๋ฐ์ดํฐ๋ฅผ ์์ ํ ์ ์๋ ๊ฒฉ๋ฆฌ ์์ค์์๋ Non-Repeatable Read๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค.
3. Phantom Read (ํฌํ
๋ฆฌ๋)
-
์ค๋ช
: ํ ํธ๋์ญ์
๋ด์์ ๊ฐ์ ๋ฒ์์ ๋ ์ฝ๋๋ฅผ ๋ ๋ฒ ์ด์ ์ฝ์ ๋, ์ฒซ ๋ฒ์งธ ์ฟผ๋ฆฌ์์ ์กฐํ๋์ง ์์๋ ์๋ก์ด ๋ ์ฝ๋๊ฐ ๋ ๋ฒ์งธ ์ฟผ๋ฆฌ์์ ๋ํ๋๋ ํ์์
๋๋ค. ์ด๋ ๋ค๋ฅธ ํธ๋์ญ์
์ด ์๋ก์ด ๋ฐ์ดํฐ๋ฅผ ์ฝ์
ํจ์ผ๋ก์จ ๋ฐ์ํ๋ ํ์์
๋๋ค.
- ์์: ํธ๋์ญ์
A๊ฐ ํน์ ์กฐ๊ฑด์ ๋ง๋ ๋ ์ฝ๋๋ฅผ ์กฐํํ ํ, ํธ๋์ญ์
B๊ฐ ์๋ก์ด ๋ ์ฝ๋๋ฅผ ์ถ๊ฐํ๊ฑฐ๋ ์์ ํ๋ฉด, ํธ๋์ญ์
A๊ฐ ๋ค์ ์กฐํํ ๋ ์๋กญ๊ฒ ์ถ๊ฐ๋ ๋ฐ์ดํฐ๊ฐ ๋ํ๋ฉ๋๋ค. ์ด๋ฌํ ์ํฉ์ด Phantom Read์
๋๋ค.
-
๋ฐ์ ๋ ๋ฒจ: Repeatable Read, Read Committed, Read Uncommitted ๊ฒฉ๋ฆฌ ์์ค์์ ๋ฐ์ํ ์ ์์ต๋๋ค. ์ด๋ค์ ํธ๋์ญ์
๋ฒ์ ๋ด์์ ์๋ก์ด ๋ฐ์ดํฐ๋ฅผ ์ฝ์
ํ๋ ๊ฒ์ ์ฐจ๋จํ์ง ์๊ธฐ ๋๋ฌธ์ Phantom Read๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค.