๐ก ๋ณธ ๋ฌธ์๋ 'RDB ํธ๋์ญ์ '์ ๋ํด ์ ๋ฆฌํด๋์ ๊ธ์ ๋๋ค.
RDB๋ ๊ด๊ณ๊ฐ ์ค์ํ๊ธฐ์ ์ผ๋ จ์ ๊ณผ์ ์ค ์ผ๋ถ๋ง ์ฑ๊ณตํ๋ฉด ์๋๊ธฐ์ ํธ๋์ญ์ ์ ํตํด ๊ด๋ฆฌํฉ๋๋ค. ์ด๋ฌํ ํธ๋์ญ์ ์ ํน์ฑ ๋ฐ ๊ฒฉ๋ฆฌ์ฑ์ ๋ฐ๋ฅธ ๋ฌธ์ ์ ๋ฑ์ ๋ค๋ฃจ๋ฉฐ ์ค์ ํธ๋์ญ์ ์ ํ์ฉํจ์ ๋์๋ ๋งํ ์ ๋ณด๋ฅผ ์ ๋ฆฌํ์์ผ๋ ์ฐธ๊ณ ๋ถํ๋๋ฆฝ๋๋ค.
1. ํธ๋์ญ์
1.1 ํธ๋์ญ์ ์ด๋?
RDB๋ ๊ด๊ณ๊ฐ ์ค์ํ๊ธฐ์ ์ผ๋ จ์ ๊ณผ์ ์ค ์ผ๋ถ๋ง ์ฑ๊ณตํ๋ฉด ์๋๊ธฐ์ ๋ชจ๋ ์ ์ฉ(Commit)๋๊ฑฐ๋ ๋ชจ๋ ์ทจ์(Rollback)๋์ด์ผ ํฉ๋๋ค. ๋ฐ๋ผ์ ์ฌ๋ฌ ๊ณผ์ ์ ํ๋์ ๋ฌถ์์ธ 'ํธ๋ ์ญ์ '์ด๋ผ๋ ๋จ์๋ฅผ ํตํด ๊ด๋ฆฌํ์ฌ ๋ฐ์ดํฐ์ ์ ํฉ์ฑ์ ๋ณด์ฅํฉ๋๋ค. ์ด์ ๋ฌธ์ ๊ฐ ์๊ธธ ๊ฒฝ์ฐ ๋ฐ์ดํฐ์ ๋ถ์ ํฉ์ด ์๊ธธ ์ ์์ผ๋ฉฐ, ํธ๋ ์ ์ ์ ์ค์ผ์ค ๊ด๋ฆฌ๋ฅผ ์ ๋ชปํ๋ฉด ๋ฐ๋๋ฝ์ ๋น ์ง ์ ์์ต๋๋ค.
1.2 ํธ๋์ญ์ ์ ํน์ฑ
ACID (Atomicity, Consistency, Isolation, Durability)๋ผ ์นญํ๋ 4๊ฐ์ง ํน์ฑ์ ๊ฐ์ง๊ณ ์์ต๋๋ค.
- Atomicity(์์์ฑ): ํธ๋์ญ์ ์ ์ต์์ ์ ๋ฌด ๋จ์๋ฅผ ์๋ฒฝํ๊ฒ ์คํํ๊ฑฐ๋ ํน์ ์ ํ ์คํํ์ง ์์์ผ ํจ.
- Consistency(์ผ๊ด์ ): ํธ๋์ญ์ ์ด ์ปค๋ฐ๋๋ฉด ๋ฐ์ดํฐ๊ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์คํค๋ง๋ฅผ ์ค์ํด์ผ ํจ
- Isolation(๊ฒฉ๋ฆฌ์ฑ): ์คํ ์ค์ธ ํธ๋์ ์ ์ ์ค๊ฐ์ ๋ค๋ฅธ ํธ๋์ ์ ์ด ์ ๊ทผํ ์ ์์
- Durability(์ง์์ฑ): ์๊ธฐ์น ๋ชปํ ์์คํ ์ฅ์ ์ ๋ง์ง๋ง์ผ๋ก ์ํ๋ก ๋ณต๊ตฌํจ.
ํธ๋์ญ์ ์ ์์์ฑ, ์ผ๊ด์ฑ, ์ง์์ฑ์ ๋ณด์ฅํ๋๋ฐ ๋ฌธ์ ๋ ๊ฒฉ๋ฆฌ์ฑ์ ๋๋ค. ํธ๋์ญ์ ๊ฐ์ ๊ฒฉ๋ฆฌ์ฑ์ ์๋ฒฝํ ๋ณด์ฅํ๋ ค๋ฉด ๋์์ ์ฒ๋ฆฌ๋๋ ํธ๋์ญ์ ์ ๊ฑฐ์ ์ฐจ๋ก๋๋ก ์คํ์ ํด์ผํฉ๋๋ค. ํ์ง๋ง ์ด๋ ๊ฒ ์ฒ๋ฆฌ๋ฅผ ํ๋ฉด ์ฒ๋ฆฌ ์ฑ๋ฅ์ด ๋งค์ฐ ๋๋น ์ง๊ฒ ๋ฉ๋๋ค. ์ด๋ฌํ ๋ฌธ์ ๋ก ์ธํด ANSI ํ์ค์ ํธ๋์ญ์ ์ ๊ฒฉ๋ฆฌ ์์ค์ 4๋จ๊ณ๋ก ๋๋์ด ์ ์ํ๊ณ ์์ต๋๋ค.
2. ํธ๋์ญ์ ๊ฒฉ๋ฆฌ ์์ค(isolation level): ANSI ํ์ค
2.1 ํธ๋์ญ์ ๊ฒฉ๋ฆฌ ์์ค
ํธ๋์ญ์ ์ ๊ฒฉ๋ฆฌ ์์ค(Isolation level)์ด๋ ๋์์ ์ฌ๋ฌ ํธ๋์ญ์ ์ด ์ฒ๋ฆฌ๋ ๋, ํน์ ํธ๋์ญ์ ์ด ๋ค๋ฅธ ํธ๋์ญ์ ์์ ๋ณ๊ฒฝํ๊ฑฐ๋ ์กฐํํ๋ ๋ฐ์ดํฐ๋ฅผ ๋ณผ ์ ์๋๋ก ํ์ฉํ ์ง ๋ง์ง๋ฅผ ๊ฒฐ์ ํ๋ ๊ฒ์ ๋๋ค.
๊ฒฉ๋ฆฌ ์์ค์ ๋ค์๊ณผ ๊ฐ์ด 4๊ฐ์ง๋ก ์ ์ํ ์ ์์ผ๋ฉฐ, ์์๋๋ก READ UNCOMMITTED์ ๊ฒฉ๋ฆฌ ์์ค์ด ๊ฐ์ฅ ๋ฎ๊ณ SERIALIZABLE์ ๊ฒฉ๋ฆฌ ์์ค์ด ๊ฐ์ฅ ๋์ต๋๋ค.
READ UNCOMMITTED
- ํธ๋์ญ์ ๋ด์์ ์ปค๋ฐํ์ง ์์ ๋ฐ์ดํฐ์ ๋ค๋ฅธ ํธ๋์ญ์ ์ด ์ ๊ทผ ๊ฐ๋ฅ
READ COMMITTED
- ํธ๋์ญ์ ๋ด์์ COMMIT์ด ์๋ฃ๋ ๋ฐ์ดํฐ๋ง ๋ค๋ฅธ ํธ๋์ญ์ ์์ ์ ๊ทผ ๊ฐ๋ฅ
- Update/Delete ๋ฅผ ํ๊ธฐ ์ ์ ์ด์ ์ ๋ฐ์ดํฐ๋ฅผ Undo ์์ญ์ ๋ฐฑ์
ํด๋์ Commit ํ๊ธฐ ์ ๊น์ง๋ ๋ค๋ฅธ ํธ๋์ญ์
์ด ์ ๊ทผํ๋ฉด Undo ์์ญ์ ๋ ์ฝ๋๋ฅผ ์ ๋ฌ
- 1) ํธ๋์ญ์ ์ ๋กค๋ฐฑ ๋๋น์ฉ
- 2) ํธ๋์ญ์ ์ ๊ฒฉ๋ฆฌ ์์ค์ ์ ์งํ๋ฉด์ ๋์ ๋์์ฑ์ ์ ๊ณต
- Oracle DBMS์์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ฌ์ฉ๋๋ ๊ฒฉ๋ฆฌ ์์ค
REPEATABLE READ
- Undo ์์ญ์ ๋ฐฑ์ ๋ ์ด์ ๋ฐ์ดํฐ๋ฅผ ํตํด ๋์ผํ ํธ๋์ญ์ ๋ด์์๋ ๋์ผํ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์ฌ์ค ์ ์๋๋ก ๋ณด์ฅ
- MySQL์ InnoDB ์คํ ๋ฆฌ์ง ์์ง์์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ฌ์ฉ๋๋ ๊ฒฉ๋ฆฌ ์์ค
SERIALIZABLE
- ํ ํธ๋์ญ์ ์์ ์ฝ๊ณ ์ฐ๋ ๋ ์ฝ๋๋ฅผ ๋ค๋ฅธ ํธ๋์ญ์ ์์๋ ์ ๊ทผ ๋ถ๊ฐ๋ฅ
- ๊ฐ์ฅ ์๊ฒฉํ ๊ฒฉ๋ฆฌ ์์ค์ผ๋ก ์๋ฒฝํ ์ฝ๊ธฐ ์ผ๊ด์ฑ ๋ชจ๋ ์ ๊ณต
- ๋์ ์ฒ๋ฆฌ ์ฑ๋ฅ์ด ๋ค๋ฅธ ํธ๋์ญ์ ๊ฒฉ๋ฆฌ ์์ค๋ณด๋ค ํ์ ํ ๋จ์ด์ง
2.2 ํธ๋์ญ์ ๊ฒฉ๋ฆฌ ์์ค์ ๋ฐ๋ฅธ ๋ฌธ์ ์
๊ฒฉ๋ฆฌ ์์ค | DIRTY READ | NON-REPEATABLE READ | PHANTOM READ |
READ UNCOMMITTED | O | O | O |
READ COMMITTED | X | O | O |
REPEATABLE READ | X | X | O(InnoDB๋ ๋ฐ์ X) |
SERIALIZABLE | X | X | X |
DIRTY READ
- ํน์ ํธ๋์ญ์ ์์ ์ฒ๋ฆฌํ ์์ ์ด ์๋ฃ๋์ง ์์์์๋ ๋ถ๊ตฌํ๊ณ ๋ค๋ฅธ ํธ๋์ญ์ ์์ ๋ณผ ์ ์๊ฒ ๋๋ ํ์
NON-REPEATABLE READ
- ํ๋์ ํธ๋์ญ์ ๋ด์์ ๋์ผํ SELECT ์ฟผ๋ฆฌ๋ฅผ ์คํํ์ ๋ ํญ์ ๊ฐ์ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์ฅํด์ผ ํ๋ค๋ "REPEATABLE READ" ์ ํฉ์ฑ์ ์ด๊ธ๋๊ฒ ๋จ
PHANTOM READ
- ๋ค๋ฅธ ํธ๋์ญ์ ์์ ์ํํ ๋ณ๊ฒฝ ์์ ์ ์ํด ๋ ์ฝ๋๊ฐ ๋ณด์๋ค๊ฐ ์๋ณด์๋ค๊ฐ ํ๋ ํ์
์ฐธ๊ณ
- [book] Real MySQL: http://www.yes24.com/Product/Goods/6960931
- [Tistory] [MySQL] - ํธ๋์ญ์ ์ ๊ฒฉ๋ฆฌ ์์ค(Isolation level): https://zzang9ha.tistory.com/381
'Study: ComputerScience(CS) > CS: Database(SQL)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[DB] MySQL ์ํคํ ์ฒ (feat. Real MySQL) (2) | 2022.11.18 |
---|---|
[DB] DB ๋ฐ์ดํฐ dumpํ๋ ๋ฐฉ๋ฒ : MySQL ๋ฐ์ดํฐ๋ฅผ export, import ํ์! (feat. mysqldump) (0) | 2022.09.09 |
[DB] ์ปค๋ฅ์ ํ(DBCP)์ด๋? DB Connection Pool (0) | 2022.08.22 |
[DB] ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฉ์ด์ ๋ฆฌ (0) | 2022.04.16 |