๐ ํธ๋์ญ์ ๊ณผ ACID
ํธ๋์ญ์ (Transaction)๊ณผ ACID
์์์ RDB๋ ๋ฌด์จ ์ผ์ด ์์ด๋ ๋ฐ์ดํฐ๋ ์ ์ ์ํ๋ฅผ ์ ์งํ๋ค๊ณ ํ์๋ค.
๊ทธ๊ฑธ ์ด๋ป๊ฒ?
๋ฐ๋ก ๊ทธ ํต์ฌ์ด ํธ๋์ญ์
(Transaction)๊ณผ ACID ์์น์ด๋ค.
ํธ๋์ญ์ (Transaction)์ด๋?
ํธ๋์ญ์ : ํ๋์ ์์ ๋จ์๋ฅผ ์๋ฏธํ๋ฉฐ, ์ ๋ถ ์ฑ๊ณตํ๊ฑฐ๋ ์ ๋ถ ์คํจํด์ผ ํ๋ ์ฐ์ฐ
์ด๋ ค์ ๋ณด์ด์ง๋ง ์ฝ๊ฒ ์ค๋ช
ํ๋ฉด โ๋ฌถ์์ฒ๋ฆฌโ์ธ ์
์ด๋ค.
์๋ฅผ๋ค์ด A๊ฐ B์๊ฒ 10๋ง์์ ๊ณ์ข์ด์ฒดํ์์ ๋ ์๋์ ๊ฐ์ ๋จ๊ณ๋ก ์ด๋ฃจ์ด์ง๋ค.
- A ๊ณ์ข์์ 10๋ง์ ์ถ๊ธ
- B ๊ณ์ข์ 10๋ง์ ์ ๊ธ
ํ์ง๋ง A ๊ณ์ข์์๋ ๋์ด ๋น ์ก๋๋ฐ B ๊ณ์ข์๋ ๋์ด ์ ๋ค์ด๊ฐ๋ค๋ฉด?
๋์ด ์ฌ๋ผ์ง๊ฑฐ๋ค..์ด๊ฑด ์ ๋ ์ผ์ด๋์๋ ์๋๋ ์ํฉ์ด๋ค
๊ทธ๋์ ํธ๋์ญ์
์ ๋ ๋ค ์ฑ๊ณตํ๋ฉด ์ ์ฅ / ํ๋๋ผ๋ ์คํจํ๋ฉด ์ ๋ถ ์ทจ์
์ด๋ฐ์์ผ๋ก ๋์ํ๋ค.
์ฆ ๋ถ๋ถ ์ฑ๊ณต์ด๋ผ๋ ๊ฐ๋
์์ฒด๋ฅผ ํ์ฉํ์ง ์๋๋ค.
ACID ์์น์ด๋?
ํธ๋์ญ์
์ ๋ํด ๋ฐฐ์ธ๋ ๋ฌด์กฐ๊ฑด ํ๋ฒ์ฉ ๋ฃ๊ฒ๋๋ ๊ฐ๋
์ด๋ค.
ACID = Atomicity + Consistency + Isolation + Durability
ํธ๋์ญ์ ์ด ์ ๋๋ก ๋์ํ๊ธฐ ์ํด ์ง์ผ์ผ ํ๋ ๊ท์น
ACID ๊ฐ๊ฐ 4๊ฐ์ง ํน์ฑ์์ ์ฒซ๊ธ์๋ฅผ ๋ฐ์์ ACID๋ผ๊ณ ํ๋๋ฐ ํ๋์ฉ ์ค๋ช ํด๋ณด๊ฒ ๋ค.
1๏ธโฃ Atomicity (์์์ฑ)
์๊น ๊ณ์ข ์ด์ฒด์์ ์ค๋ช
ํ ๋ถ๋ถ์ด๋ค.
โ์ ๋ถ ์คํ๋๊ฑฐ๋ ์ ๋ถ ์คํ๋์ง ์๊ฑฐ๋โ
๋ชจ๋ ์ฑ๊ณต ์์๋ ์ปค๋ฐ์, ํ๋๋ผ๋ ์คํจ ์ ๋กค๋ฐฑ์
์ฆ ํธ๋์ญ์
์ ์์
์ด ์ชผ๊ฐ์ง์ง์๊ณ ์์์ ์ด์ฌ์ผํ๋ค๋ ๊ฒ์ด๋ค.
2๏ธโฃ Consistency (์ผ๊ด์ฑ)
ํธ๋์ญ์
์ ํ ๋ฐ์ดํฐ๋ ํญ์ ์ฌ๋ฐ๋ฅธ ์ํ๋ฅผ ์ ์งํด์ผ ํ๋ค.
์๋ฅผ ๋ค์ด ์์ก์ด ์์๊ฐ ๋๋ฉด ์ ๋๋ค๋๊ฐ,
์กด์ฌํ์ง ์๋ ๊ณ์ข์ ์ก๊ธํ๋ฉด ์ ๋๋ค.
์ด๊ฑด DB๊ฐ ์ ์ฝ์กฐ๊ฑด์ผ๋ก ๋ง๋๋ค.
balance >= 0
๊ฐ์ ๊ท์น์ด ๊นจ์ง๋ฉด ์์ ์ ์ฅ์ด ์ ๋๋ค.
์ฆ ์ด์ํ ๋ฐ์ดํฐ ์์ฒด๋ฅผ ๋ชป ๋ฃ๊ฒ ํ๋ค.
3๏ธโฃ Isolation (๊ฒฉ๋ฆฌ์ฑ)
๋์์ ์คํ๋ผ๋ ์๋ก ์ํฅ์ ์ฃผ์ง ์๋๋ค๋ ๊ฒ์ด๋ค.
์๋ฅผ ๋ค์ด A ๊ณ์ข์ 100๋ง์์ด ์๋๋ฐ,
๋ ์ฌ๋์ด ๋์์ ์ถ๊ธํ๋ฉด?
๋ ๋ค 100๋ง์ ๋ณด๊ณ ๋ ๋นผ๋ฒ๋ฆด ์ ์๋ค
๊ทธ๋ฌ๋ฉด? ๋ฐ์ดํฐ๊ฐ ๊ผฌ์ธ๋ค.
๊ทธ๋์ DB๋ SELECT โฆ FOR UPDATE ๊ฐ์ ๊ฑธ๋ก ์ ๊ธ์ ๊ฑด๋ค.
๋ด๊ฐ ์ฒ๋ฆฌํ๋ ๋์ ๋ค๋ฅธ ํธ๋์ญ์
๋ชป ๊ฑด๋๋ฆฐ๋ค๋ ๊ฒ์ด๋ค.
์ฆ ๊ฐ ์์
์ ๋ฐ๋ก ๊ฒฉ๋ฆฌํด์ ์คํํ๋ค.
4๏ธโฃ Durability (์ง์์ฑ)
ํ ๋ฒ ์ ์ฅ๋๋ฉด ์ ๋ ์ฌ๋ผ์ง์ง ์๋๋ค.
COMMIT์ด ๋๋๋ฉด ์๋ฒ ๊บผ์ ธ๋, DB ํฐ์ ธ๋ ๋ฐ์ดํฐ๋ ๋จ์ ์์ด์ผ ํ๋ค.
๊ทธ๋์ DB๋ ๋ก๊ทธ๋ฅผ ๋จ๊ธฐ๊ณ ๋์คํฌ์ ๊ธฐ๋กํ๋ค.
์ฆ ์ ์ฅ๋์ผ๋ฉด ๋๊น์ง ์ฑ
์์ง๋ค.
๊ทธ๋ฐ๋ฐ ์ฌ๊ธฐ์ ํ๊ฐ์ง ๋ฌธ์ ๊ฐ ์๋ค.
๊ณ ๋ฆฝ์ฑ ๋ถ๋ถ์์ ๋ด๊ฐ ์ฒ๋ฆฌํ๋ ๋์ ๋ค๋ฅธ ํธ๋์ญ์
๋ชป ๊ฑด๋๋ฆฐ๋ค๋ฉด, ๋ฐ์ดํฐ ๋ง์์ง๋ฉด ์์ฒญ ๋๋ ค์ง์ง ์์๊น??
ใ
ใ
๋ง๋ค.
๊ฒฉ๋ฆฌ์ฑ์ ๊ฐํ๊ฒ ์ ์งํ ์๋ก ๋ค๋ฅธ ํธ๋์ญ์
์ด ๊ธฐ๋ค๋ ค์ผ ํ๋ ์๊ฐ์ด ๊ธธ์ด์ง๊ณ
๊ฒฐ๊ตญ ์ฑ๋ฅ์ด ๋จ์ด์ง๋ค.
๋ฐ์ดํฐ๋ ์์ ํ์ง๋ง ์ฑ๋ฅ์ด ๋๋ ค์ง๋ ๊ฒ์ด๋ค.
๊ทธ๋์ DB๋ ๊ฒฉ๋ฆฌ ์์ค(Isolation Level)์ด๋ผ๋ ๊ฐ๋
์ ํตํด ์ฑ๋ฅ๊ณผ ์์ ์ฑ ์ฌ์ด์์ ๊ท ํ์ ๋ง์ถ๋ค.
ํธ๋์ญ์ ์ ๊ฒฉ๋ฆฌ ์์ค (Isolation Level)
์ฌ๋ฌ ํธ๋์ญ์
์ด ๋์์ ์ฒ๋ฆฌ๋ ๋, ํน์ ํธ๋์ญ์
์ด ๋ค๋ฅธ ํธ๋์ญ์
์์ ๋ณ๊ฒฝํ๊ฑฐ๋ ์กฐํํ๋ ๋ฐ์ดํฐ๋ฅผ ๋ณผ ์ ์๊ฒ ํ์ฉํ ์ง ์ฌ๋ถ๋ฅผ ๊ฒฐ์ ํ๋ ๊ฒ์ด๋ค.
๊ฒฉ๋ฆฌ ์์ค 4๋จ๊ณ ๊ตฌ์กฐ
์ฌ์ง์ ๋ณด๋ฉด ์์์๋ถํฐ READ-UNCOMMITTED, READ-COMMITTED, REPEATABLE-READ, SERIALIZABLE ์ด 4๊ฐ์ง๊ฐ ์กด์ฌํ๋ค.
์๋ก ์ฌ๋ผ๊ฐ ์๋ก ์๋๋ ๋นจ๋ผ์ง์ง๋ง ๋ฐ์ดํฐ์ ์ผ๊ด์ฑ์ ๋ณด์ฅํ์ง ๋ชปํ๊ณ , ์๋๋ก ๋ด๋ ค์ฌ์๋ก ํธ๋์ญ์
์ ์์ฐจ์ ์ผ๋ก ์ฒ๋ฆฌํ๋ฏ๋ก ์๋๋ ๋๋ ค์ง์ง๋ง, ๋ฐ์ดํฐ์ ์ผ๊ด์ฑ์ ๋ณด์ฅํ ์ ์๋ค๋๋ฐ ์์ธํ ์์๋ณด์.
1๏ธโฃ READ UNCOMMITTED
๊ฐ์ฅ ๋ฎ์ ์์ค์ด๋ค. ๋ค๋ฅธ ํธ๋์ญ์
์ด ์์ง COMMIT๋ ์ ํ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ ์ ์๋ค.
์๋ฅผ ๋ค์ด DB์๋ 10๋ง์์ด ๋ค์ด์๋ ๊ณ์ข๊ฐ ์๋ค์น์.
ํธ๋์ญ์
A โ ๊ธ์ก +5๋ง์ (์์ง COMMIT ์ ํจ) โ DB ๋ด๋ถ ์ํ: 15๋ง์
์ด๋ ํธ๋์ญ์
B๊ฐ ์กฐํํ๋ฉด? โ 15๋ง์์ ์ฝ๋๋ค (์์ง ํ์ ๋์ง ์์ ๊ฐ)
๊ทผ๋ฐ A๊ฐ ๋์ค์ ROLLBACK ํ๋ฉด?? โ ์ค์ DB๋ ๋ค์ 10๋ง์์ผ๋ก ๋์๊ฐ๋ค.
B๋ ์กด์ฌํ์ง๋ ์์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ด๋ฒ๋ฆฐ๊ฑฐ๋ค.
์ด๊ฑธ Dirty Read๋ผ๊ณ ํ๋ค.
์ด๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ค๋ฉด..์ปค๋ฐ๋ ๋ฐ์ดํฐ๋ง ์ฝ์ ์ ์๊ฒ ํ๋ฉด ๋๋๊ฑฐ๋ค.
2๏ธโฃ READ COMMITTED
์์์ ๋งํ ์ปค๋ฐ๋ ๋ฐ์ดํฐ๋ง ์ฝ์ ์ ์๊ฒ ์ค์ ํ ๊ฒ์ด๋ค.
์ด๋ฅผ ํตํด Dirty Read๋ฅผ ํด๊ฒฐํ ์ ์์ง๋ง, ์์ง ๋ฌธ์ ๋ ๋จ์์๋ค.
์๋ฅผ ๋ค์ด DB ์ด๊ธฐ ์ํ: 10๋ง์์ผ๋
ํธ๋์ญ์
B โ ์ฒ์ ์กฐํ โ 10๋ง์
๊ทธ ์ฌ์ด์ ํธ๋์ญ์
A โ +5๋ง์ ํ COMMIT โ DB ์ํ: 15๋ง์
๋ค์ ํธ๋์ญ์
B๊ฐ ์กฐํํ๋ฉด? โ ์ด๋ฒ์๋ 15๋ง์์ด ๋์จ๋ค
์ฆ ๊ฐ์ ํธ๋์ญ์
์์์ ๊ฐ์ ์ฟผ๋ฆฌ๋ฅผ ๋ ๋ฒ ์คํํ๋๋ฐ ๊ฐ์ด ๋ฐ๋๋ค..
์ด๊ฑธ Non-Repeatable Read๋ผ๊ณ ํ๋๋ฐ ์ด๋ฌธ์ ๋ ๋ ๋ค์ ๊ณ ๋ฆฝ ์์ค์์ ํด๊ฒฐ๊ฐ๋ฅํ๋ค.
3๏ธโฃ REPEATABLE READ
ํ ํธ๋์ญ์
์์์๋ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ํญ์ ๋์ผํ๊ฒ ์ฝ๋๋ก ๋ณด์ฅํ๋ ๊ฒฉ๋ฆฌ ์์ค์ด๋ค.
์๊น ๋ฌธ์ ์๋ ์ํฉ์ ๋ค์ ๋ณด์
DB ์ด๊ธฐ ์ํ: 10๋ง์
ํธ๋์ญ์
B (์ฒ์ ์กฐํ) โ 10๋ง์
๊ทธ ์ฌ์ด์ ํธ๋์ญ์
A โ +5๋ง์ ํ COMMIT โ DB ์ํ: 15๋ง์
์ด ์ํ์์ ํธ๋์ญ์
B๊ฐ ๋ค์ ์กฐํํ๋ฉด -> ์ฌ์ ํ 10๋ง์์ด ๋์จ๋ค
์ฆ ๊ฐ์ ํธ๋์ญ์
์์์๋ ๊ฐ์ด ๋ณํ์ง ์๋๋ค.
ํ์ง๋ง ์์ง ๋ฌธ์ ๊ฐ ํ๋ ๋จ์๋ค.
์๋ฅผ ๋ค์ด ์กฐ๊ฑด ์กฐํ๋ฅผ ํ๋ค๊ณ ํด๋ณด์
ํธ๋์ญ์
B โ ์์ก์ด 10๋ง์ ์ด์์ธ ๊ณ์ข ์กฐํ โ ์ฒ์ ๊ฒฐ๊ณผ: 1๊ฐ
๊ทธ ์ฌ์ด์ ํธ๋์ญ์
A โ ์๋ก์ด ๊ณ์ข ์ถ๊ฐ (์์ก 20๋ง์) ํ COMMIT
๋ค์ ํธ๋์ญ์
B๊ฐ ๊ฐ์ ์กฐ๊ฑด์ผ๋ก ์กฐํํ๋ฉด โ ๊ฒฐ๊ณผ๊ฐ 2๊ฐ๊ฐ ๋๋ค
์๋ ๋ฐ์ดํฐ๊ฐ ๊ฐ์๊ธฐ ๋ํ๋๋ ๊ฒ์ด๋ค..
์ด๊ฑธ Phantom Read๋ผ๊ณ ํ๋ค.
Non-Repeatable-Read์ ํ ์ข
๋ฅ๋ก, ์๋ก์ด ๋ฐ์ดํฐ๊ฐ ์๊ธฐ๊ฑฐ๋, ๊ธฐ์กด์ ๋ฐ์ดํฐ๊ฐ ์ฌ๋ผ์ง๋ ๋ฌธ์ ๋ฅผ ๋งํ๋ค.
๊ทผ๋ฐ ์ดํด๊ฐ ์๋๋ ๋ถ๋ถ์ด ์๊ธด๋ค..
๊ฐ์ ํธ๋์ญ์
์ด ์๋๋๊น(COMMIT ํ๋๊น) ๊ฒฐ๊ณผ๊ฐ ๋ฐ๋์ด๋ ๋๋๊ฑฐ ์๋๊ฐ?
ใ
ใ
๋ง๋ ๋ง์ด๋ค. ์ค์ ๋ก ๋ค๋ฅธ ํธ๋์ญ์
์ด๊ธฐ ๋๋ฌธ์ ๋ฐ๋๋ ๊ฒ ์์ฐ์ค๋ฝ๋ค.
๊ทธ๋ผ ์ ์ด๊ฑธ ๋ฌธ์ ๋ก ๋ณด๋ ๊ฑธ๊น?
ํต์ฌ์ โ๋ฐ์ดํฐ๊ฐ ๋ฐ๋์๋โ๊ฐ ์๋๋ผ โ๊ฐ์ ํธ๋์ญ์
์์์ ์กฐํ ๊ฒฐ๊ณผ๊ฐ ๋ฌ๋ผ์ก๋โ๋ค..
ํธ๋์ญ์
์ ๋จ์ํ ์ฟผ๋ฆฌ ํ๋๊ฐ ์๋๋ผ ํ๋์ ์์
๋จ์๋ค.
์ฆ ํธ๋์ญ์
B ์
์ฅ์์๋ ์ฒซ ๋ฒ์งธ ์กฐํ ๊ฒฐ๊ณผ: 1๊ฐ, ๋ ๋ฒ์งธ ์กฐํ ๊ฒฐ๊ณผ: 2๊ฐ
โ ๊ฐ์ ์์
์ ์ํํ๋๋ฐ ๊ฒฐ๊ณผ๊ฐ ๋ฐ๋์ด๋ฒ๋ฆฐ ๊ฒ์ด๋ค..
์ฆ REPEATABLE READ๋ โ์ด๋ฏธ ์ฝ์ ๋ฐ์ดํฐโ๋ ๋ณดํธํ์ง๋ง,
โ์กฐ๊ฑด์ ์ํด ์กฐํ๋๋ ์ ์ฒด ๋ฒ์โ๊น์ง๋ ๋ณดํธํ์ง ์๋๋ค.
๋ค๋ฅธ ํธ๋์ญ์
์ ์ฝ๋ ๊ฑด ์ ์์ด๋ค. ํ์ง๋ง ๊ทธ๊ฒ ๋ด ์์
๊ฒฐ๊ณผ๋ฅผ ๋ฐ๊พธ๋๊น ๋ฌธ์ ์ธ ๊ฒ์ด๋ค.
4๏ธโฃ SERIALIZABLE
๊ฐ์ฅ ๋์ ์์ค์ด๋ค.
ํธ๋์ญ์
์ ๋ง์น ํ๋์ฉ ์์๋๋ก ์คํํ๋ ๊ฒ์ฒ๋ผ ์ฒ๋ฆฌํ๋ค.
์์ ๊ฐ์ ์ํฉ์ผ๋, ํธ๋์ญ์
B๊ฐ ์กฐํ๋ฅผ ์์ํ๋ฉด ๊ทธ ๋์ ๋ค๋ฅธ ํธ๋์ญ์
(A)์
๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝํ๊ฑฐ๋ ์ถ๊ฐํ ์ ์๋ค. SELECT ์กฐ๊ฑด ์์ฒด์ ์ ๊ธ์ ๊ฑธ์ด,
์๋ก์ด ๋ฐ์ดํฐ๊ฐ ๋ผ์ด๋ค ์ ์๊ฒ ๋ง๋๋ ๊ฒ์ด๋ค.
๊ทธ๋์ Phantom Read๊น์ง ๋ชจ๋ ๋ฐฉ์ง๋๋ค.
๋ฐ์ดํฐ๊ฐ ๊ผฌ์ผ ์ผ์ด ์์ ์๋ค๋ ๊ฑฐ๋ค.
ํ์ง๋ง ๊ทธ๋งํผ ์ฑ๋ฅ์ด ๋งค์ฐ ๋๋ฆฌ๋ค..
์ต์ข
์ ์ผ๋ก ์ ๋ฆฌ๋ฅผ ํ์๋ฉด
- READ UNCOMMITTED โ Dirty Read ๋ฐ์
- READ COMMITTED โ Dirty Read ํด๊ฒฐ (ํ์ง๋ง ๊ฐ ๋ฐ๋)
- REPEATABLE READ โ ๊ฐ ์ ์ง (ํ์ง๋ง ์๋ก์ด ๋ฐ์ดํฐ ์๊น)
- SERIALIZABLE โ ์๋ฒฝํ์ง๋ง ๋๋ฆผ
์ค๋ฌด์์ ์ฌ์ฉ
๊ทธ๋์ ์ค๋ฌด์์๋ ์ด๋ป๊ฒ ์ธ๊น??
๋๋ถ๋ถ ๊ธฐ๋ณธ์ READ COMMITTED ๋๋ REPEATABLE READ์ด๋ค.
์ฑ๋ฅ ๊ด์ฐฎ๊ณ ๋๋ถ๋ถ ๋ฌธ์ ์์ด ๋์ํ๋๊น.
ํ์ง๋ง ์ ๋ง ์ค์ํ ๊ฒฝ์ฐ(๊ธ์ต, ๊ฒฐ์ ๋ฑ)์๋ SERIALIZABLE ์ฌ์ฉํ๋ค.
๊ฒฉ๋ฆฌ์ฑ์ ๋ฌด์กฐ๊ฑด ๋๋ค๊ณ ์ข์ ๊ฒ ์๋๋ผ ์๋น์ค ์ํฉ์ ๋ง๊ฒ ์ ํํ๋ ๊ฒ์ด ํต์ฌ์ด๋ค.