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