DB Transaction & Lock
ํธ๋์ญ์
(Transaction)?
์ ์
ํธ๋์ญ์ ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ํ๋ฅผ ๋ณํ์ํค๊ธฐ ์ํด์ ์ํํ๋ ์์ ์ ๋จ์๋ฅผ ๋ปํ๊ณ , ์ด ์์ ์ ์์ ์ฑ์ ๋ณด์ฅํด์ฃผ๋ ๊ธฐ๋ฅ์ด๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค ์ํ๋ฅผ ๋ณํ์ํจ๋ค๋ ๊ฒ์ CRUD๋ฅผ ์ํด ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ๊ทผํ๋ ๊ฒ์ ์๋ฏธํ๋ค.
์ฌ์ฉ์ ์ ์ฅ์์๋ ์์ ์ ๋ ผ๋ฆฌ์ ์ธ ๋จ์๋ก ์ดํดํ ์ ์๊ณ , ์์คํ ์ ์ ์ฅ์์๋ ๋ฐ์ดํฐ๋ค์ ์ ๊ทผ ๋๋ ๋ณ๊ฒฝํ๋ ํ๋ก๊ทธ๋จ์ ๋จ์๊ฐ ๋๋ค.
ํน์ง
์์์ฑ(Atomicity)
ํธ๋์ญ์ ์ด ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ชจ๋ ๋ฐ์๋๊ฑฐ๋, ์ ํ ๋ฐ์๋์ง ์์์ผํ๋ค๋ ๊ฒ
์ผ๊ด์ฑ(Consistency)
ํธ๋์ญ์ ์ ์์ ์ฒ๋ฆฌ ๊ฒฐ๊ณผ๊ฐ ํญ์ ์ผ๊ด์ฑ์ด ์์ด์ผ ํ๋ค๋ ๊ฒ
ํธ๋์ญ์ ์ด ์งํ๋๋ ๋์์๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ๋ณ๊ฒฝ ๋๋๋ผ๋ ์ ๋ฐ์ดํธ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ก ํธ๋์ญ์ ์ด ์งํ๋๋ ๊ฒ์ด ์๋๋ผ, ์ฒ์์ ํธ๋์ญ์ ์ ์งํํ๊ธฐ ์ํด ์ฐธ์กฐํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ก ์งํ๋๋ค.
๋ ๋ฆฝ์ฑ(Isolation)
๋ ์ด์์ ํธ๋์ญ์ ์ด ๋์์ ์คํ๋๊ณ ์์ ๊ฒฝ์ฐ ์ด๋ค ํ๋์ ํธ๋์ญ์ ์ด๋ผ๋, ๋ค๋ฅธ ํธ๋์ญ์ ์ ์ฐ์ฐ์ ๋ผ์ด๋ค ์ ์๋ค๋ ์ ์ ๊ฐ๋ฆฌํจ๋ค. ๊ฐ๊ฐ์ ํธ๋์ญ์ ์ ์๋ก ๊ฐ์ญ์์ด ๋ ๋ฆฝ์ ์ผ๋ก ์ํ๋์ด์ผ ํ๋ค.
์ง์์ฑ(Durability)
ํธ๋์ญ์ ์ด ์ฑ๊ณต์ ์ผ๋ก ์๋ฃ ๋์์ ๊ฒฝ์ฐ, ์๊ตฌ์ ์ผ๋ก ๋ฐ์๋์ด์ผ ํ๋ค๋ ์ ์ด๋ค.
ํธ๋์ญ์
์ ์ํ ๋ณํ์ ํธ๋์ญ์
์ ์ด์ด
๋์์ฑ ์ ์ด ๊ธฐ๋ฒ
๋ฝํน(locking): ํธ๋์ญ์ ์ด ๋ฐ์ดํฐ์ ์ ๊ธ(lock)์ ์ค์ ํ๋ฉด ๋ค๋ฅธ ํธ๋์ญ์ ์ ํด๋น ๋ฐ์ดํฐ์ ๋ํด ์ ๊ธ์ด ํด์ (unlock)๋ ๋๊น์ง ์ ๊ทผ/์์ /์ญ์ ๊ฐ ๋ถ๊ฐํ๋ค.
ํ์์คํฌํ(timestamp): ์์คํ ์์ ์์ฑํ๋ ๊ณ ์ ๋ฒํธ์ธ ํ์์คํฌํ๋ฅผ ํธ๋์ญ์ ์ ๋ถ์ฌํจ์ผ๋ก์จ ํธ๋์ญ์ ๊ฐ์ ์ ๊ทผ ์์๋ฅผ ๋ฏธ๋ฆฌ ์ ํ๋ค.
๋๊ด์ ์ ํฉ์ฑ ๊ฒ์ฆ: ๋จผ์ ํธ๋์ญ์ ์ ์ํํ๊ณ ํธ๋์ญ์ ์ ์ข ๋ฃํ ๋ ์ ํฉ์ฑ์ ๊ฒ์ฆํ์ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ต์ข ๋ฐ์ํ๋ค.
๋ค์ค ๋ฒ์ ์ ์ด๊ธฐ๋ฒ:ํ๋์ ๋ฐ์ดํฐ ์์ดํ ์ ๋ํด ์ฌ๋ฌ ๋ฒ์ ์ ๊ฐ์ ์ ์งํ๋ค.
ํธ๋์ญ์
vs Lock
์ ๊ธ(Lock)์ ๋์์ฑ์ ์ ์ดํ๊ธฐ ์ํ ๊ธฐ๋ฅ์ด๊ณ , ํธ๋์ญ์ ์ ๋ฐ์ดํฐ์ ์ ํฉ์ฑ์ ๋ณด์ฅํ๊ธฐ ์ํ ๊ธฐ๋ฅ์ด๋ค. ํธ๋์ญ์ ์ ๋ฐ์ดํฐ์ ๋ํ ์ก์ธ์ค๋ฅผ ์๋นํ ๋น(reservation)ํ๋๋ฐ, ์ด ์๋นํ ๋น์ ์ ๊ธ์ด๋ผ๊ณ ํ๋ค.
์ ๊ธ์ ์ฌ๋ฌ ์ปค๋ฅ์ ์์ ๋์์ ๋์ผํ ์์(record or table)์ ์์ฒญํ ๊ฒฝ์ฐ, ์์๋๋ก ํ ์์ ์๋ ํ๋์ ์ปค๋ฅ์ ๋ง ๋ณ๊ฒฝํ ์ ์๊ฒ ํด์ค๋ค.
ํธ๋์ญ์ ์ ํ๋์ ๋ ผ๋ฆฌ์ ์ธ ์์ ์ ์์ฒด๊ฐ ์์ ํ ์ ์ฉ๋ ์ ์์์ ๋ณด์ฅํ๋ค.
์ค์ ๋ก ๋ด๊ฐ ์งํํ Rails ํ๋ก์ ํธ์์๋ ํธ๋์ญ์
์ ํน์ง ์ค '๋
๋ฆฝ์ฑ'์ ์๋ชป ์ดํดํ ๋๋จธ์ง record ๋์์ ๊ทผ์ ๋ง๊ธฐ ์ํด ActiveRecord::Base transaction
๋ฌธ์ ์ ์ธํ์๋ค๊ฐ ์ํ์ฐฉ์ค๋ฅผ ๊ฒช์๋ค. Rails๋ ๋ณ๋ค๋ฅธ ์ค์ ์ ํ์ง ์์ผ๋ฉด ์ฐ๊ฒฐ๋ DB์ ๋ฐ๋ผ default๋ก ์ค์ ๋๋ ํธ๋์ญ์
๊ฒฉ๋ฆฌ ๋ ๋ฒจ์ด ๋ค๋ฅธ๋ฐ, ๋ด๊ฐ ์ผ๋ PostgreSQL์ ๊ฒฝ์ฐ read uncommited ๋ ๋ฒจ๋ก ๊ฒฉ๋ฆฌ๋์๊ธฐ ๋๋ฌธ์ด๋ค. ๊ทธ๋์ Record ์์ฒด์ lock์ ๊ฑฐ๋ ํ์์ผ๋ก ์์ ํ๋ค.์ง๋๊ณ ๋ณด๋ ์ด ๋ฐฉ์์ ์์ ๋ฐฉํธ์ด์์ ๋ฟ ๋น์ฉ์ด ๋๋ฌด ํฌ๋ค! ํ ๋ง๋๋ก ์ฒ ์ด ์์๋ค..;
ํธ๋์ญ์
์ ์ํ
ํธ๋์ญ์ ์ ์ํ๋ ์๋ 5๊ฐ๋ก ๋๋ ์ ์๋ค.
Active: ํธ๋์ญ์ ์ ํ๋ ์ํ. ํธ๋์ญ์ ์ด ์คํ ์ค์ด๋ฉฐ ๋์ ์ค์ธ ์ํ๋ฅผ ๋งํ๋ค.
Partially Committed: ํธ๋์ญ์ ์
Commit
๋ช ๋ น์ด ๋์ฐฉํ ์ํ. ํธ๋์ญ์ ์commit
์ด์ sql
๋ฌธ์ด ์ํ๋๊ณ ,commit
๋ง ๋จ์ ์ํ๋ฅผ ๋งํ๋ค.Failed: ํธ๋์ญ์ ์คํจ ์ํ. ํธ๋์ญ์ ์ด ๋ ์ด์ ์ ์์ ์ผ๋ก ์งํํ ์ ์๋ ์ํ๋ฅผ ๋งํ๋ค.
Committed: ํธ๋์ญ์ ์๋ฃ ์ํ. ํธ๋์ญ์ ์ด ์ ์์ ์ผ๋ก ์๋ฃ๋ ์ํ๋ฅผ ๋งํ๋ค.
Aborted: ํธ๋์ญ์ ์ด ์ทจ์๋ ์ํ. ํธ๋์ญ์ ์ด ์ทจ์๋๊ณ ํธ๋์ญ์ ์คํ ์ด์ ๋ฐ์ดํฐ๋ก ๋์๊ฐ ์ํ๋ฅผ ๋งํ๋ค.
Commit
์์ฒญ์ด ๋ค์ด์ค๋ฉด ์ํ๋ Partial Commited
์ํ๊ฐ ๋๋ค. ์ดํ Commit
์ ๋ฌธ์ ์์ด ์ํํ ์ ์์ผ๋ฉด Committed
์ํ๋ก ์ ์ด๋๊ณ , ๋ง์ฝ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ฉด Failed
์ํ๊ฐ ๋๋ค. ์ฆ, Partial Commited
๋ Commit
์์ฒญ์ด ๋ค์ด์์ ๋๋ฅผ ๋งํ๋ฉฐ, Commited
๋ Commit
์ ์ ์์ ์ผ๋ก ์๋ฃํ ์ํ๋ฅผ ๋งํ๋ค.
ํธ๋์ญ์
์ ์ฌ์ฉํ ๋์ ์ฃผ์ํ ์
ํธ๋์ญ์ ์ ์๋ ์ด์ ์์ ๊ผญ ํ์ํ ์ต์์ ์ฝ๋์๋ง ์ ์ฉํ๋ ๊ฒ์ด ์ข๋ค.
์ผ๋ฐ์ ์ผ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ปค๋ฅ์ ์ ๊ฐ์๊ฐ ์ ํ์ ์ด๋ค. ๊ทธ๋ฐ๋ฐ ๊ฐ ๋จ์์ ํ๋ก๊ทธ๋จ์ด ์ปค๋ฅ์ ์ ์์ ํ๋ ์๊ฐ์ด ๊ธธ์ด์ง๋ค๋ฉด ์ฌ์ฉ ๊ฐ๋ฅํ ์ฌ์ ์ปค๋ฅ์ ์ ๊ฐ์๊ฐ ์ค์ด๋ค๊ฒ ๋๋ค. ์ด๋ '๊ต์ฐฉ ์ํ'๋ฅผ ์ ๋ฐํ ์ ์๋ค.
ํธ๋์ญ์
์์ ๊ต์ฐฉ์ํ(Deadlock)?
๋ฎคํ์ค๋ ์ธ๋งํฌ์ด๋ฅผ ๋ค๋ฃฐ ๋ ๋ง๋ฌ๋ ๊ทธ ๊ต์ฐฉ ์ํ(Deadlock)๊ฐ ๋ง๋ค. ๋ ๊ฐ์ ํธ๋์ญ์ ์ด ํน์ ์์(record ๋๋ table)์ lock์ ํ๋ํ ์ฑ ๋ค๋ฅธ ํธ๋์ญ์ ์ด ์์ ํ๊ณ ์๋ ์ ๊ธ์ ์๊ตฌํ๋ฉด ์๋ฌด๋ฆฌ ๊ธฐ๋ค๋ ค๋ ์ํฉ์ด ๋ฐ๋์ง ์๋ '๊ต์ฐฉ ์ํ'์ ๋น ์ง ์ ์๋ ๊ฒ์ด๋ค. ์์
๊ต์ฐฉ์ํ์ ๋น๋๋ฅผ ๋ฎ์ถ๋ ๋ฐฉ๋ฒ์?
ํธ๋์ญ์ ์ด ์ ๊ธ์ ์ ์งํ๋ ์๊ฐ์ ์ค์ธ๋ค.
ํธ๋์ญ์ ์์ ์คํํ๋ ์์ ์ ์๋ฅผ ์ค์ธ๋ค.
ํธ๋์ญ์ ์ ๋ ์ด์์ ๋ ์งง์ ํธ๋์ญ์ ์ผ๋ก ๋ถํ ํ์ฌ ์์ฃผ ์ปค๋ฐํ๋ค.
์ ํด์ง ์์๋ก ํ ์ด๋ธ์ ์ ๊ทผํ๋ค. ๊ฐ๋ น ํ ์ด๋ธ B->A์ ์์ผ๋ก ์ ๊ทผํ๋ ํธ๋์ญ์ ๊ณผ ํ ์ด๋ธ A->B๋ก ์์ผ๋ก ์ ๊ทผํ๋ ํธ๋์ญ์ ์ ํผ์ฌํค๋๊ฒ ์๋๋ผ ํต์ผํ๋ ์์ด๋ค.
์ฝ๊ธฐ ์ ๊ธ ํ๋(
SELECT
)์ ์ฌ์ฉ์ ํผํ๋ค. ๊ฐ๋ น MySQL์์SERIALIZABLE
๊ฒฉ๋ฆฌ ์์ค์์๋ ๋ชจ๋ SELECT ์ฟผ๋ฆฌ์ ์๋์ ์ผ๋กLOCK IN SHARE MODE
๊ฐ ๋ง๋ถ์ฌ์ ธ์ ์คํ๋๋ ํจ๊ณผ๊ฐ ๋์ ์ฝ๊ธฐ ์ ๊ธ์ ๊ฑธ๊ณ ๋ ์ฝ๋๋ฅผ ์ฝ๊ฒ ๋๋ค.ํ ํ ์ด๋ธ์ ๋ณต์ ํ์ ๋ณต์์ ์ฐ๊ฒฐ์์ ์์ ์์ด ๊ฐฑ์ ํ๋ฉด ๊ต์ฐฉ์ํ๊ฐ ๋ฐ์ํ๊ธฐ ์ฝ๋ค. ์ด ๊ฒฝ์ฐ์๋ ํ ์ด๋ธ ๋จ์์ ์ ๊ธ์ ํ๋ํด ๊ฐฑ์ ์ ์ง๋ ฌํํ๋ฉด ๋์์ฑ์ ๋จ์ด์ง์ง๋ง ๊ต์ฐฉ์ํ๋ฅผ ํํผํ ์ ์๋ค.
ํธ๋์ญ์
๊ต์ฐฉ์ํ ๋ฐ์์ ํด๊ฒฐ๋ฐฉ๋ฒ์?
๋ฐ๋๋ฝ๊ณผ ๊ด๋ จ๋๋ ํธ๋์ญ์ ๊ฐ์ด๋ฐ ํ๋๋ฅผ ํฌ์์(victim) ์ผ์ abort ํ๋ ๊ฒ์ด๋ค.
์ฐธ๊ณ
Last updated