ํธ๋์ญ์ ์ด๋
ํธ๋์ญ์ ์ ์ฌ๋ฌ ๊ฐ์ ์ํ์ด ์ผ๋ จ์ ์ฒ๋ฆฌ ๋จ์๋ก ๋ฌถ์ด๋ ๊ฒ์ ๋งํ๋ค.
์ ๊ทธ๋ฆผ์ ์ผ์ชฝ ๊ณ์ข์ ๋์ ์ค๋ฅธ์ชฝ ๊ณ์ข๋ก ์ ๊ธํ๋ ๊ณผ์ ์ด๋ค.
์ฒซ๋ฒ ์งธ์ฒ๋ผ ์ผ์ชฝ ๊ณ์ข์์ ์ถ๊ธ์ด ์ฑ๊ณต๋๋ฉด ์ค๋ฅธ์ชฝ ๊ณ์ข๋ก ์ ๊ธ๋๋ค.
ATM์ ๋ฌธ์ ๋ก ์ผ์ชฝ์์ ์ถ๊ธ์ด ๋๊ณ ๋ช ๋ถ ํ, ์ถ๊ธ์ด ์ทจ์๋์๋ค๊ณ ํ๋ฉด ๋๋ฒ์งธ ๊ทธ๋ฆผ์ฒ๋ผ ์ค๋ฅธ์ชฝ ๊ณ์ข์๋ ์ ๊ธ์ด ๋์ง ์์์ผํ๋ค.
๋ง์ฝ ์ถ๊ธ์ ์ทจ์ ๋์๋๋ฐ ์ ๊ธ์ด ๋ผ๋ฒ๋ฆฌ๋ฉด ํฐ ๊ธฐ๋ฅ์์ ๋ฌธ์ ์ธ ๊ฒ์ด๋ค.
์ด๋ ๊ฒ ์ผ๋ จ์ ์ฒ๋ฆฌ๊ฐ All or Nothing์ผ๋ก ์ด๋ฃจ์ด์ง๋ ๊ฒ์ด ํธ๋์ญ์ ์ด๋ค.
- ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ํ๋ฅผ ๋ณํ์ํค๊ธฐ ์ํด ์ํํ๋ ์์ ๋จ์
- ์ํ๋ฅผ ๋ณํ ์ํจ๋ค = SQL ์ง์์ด๋ฅผ ํตํด DB์ ์ ๊ทผํ๋ค
-
SELECT INSERT DELETE UPDATE
-
- ์์
๋จ์ ---> ๋ง์ SQL ๋ช
๋ น๋ฌธ๋ค์ ์ฌ๋์ด ์ ํ๋ ๊ธฐ์ค์ ๋ฐ๋ผ ์ ํ๋ ๊ฒ
- ๊ฒ์ํ์์ ์ฌ์ฉ์๊ฐ ๊ธ์ ์์ฑํ๊ณ ์ฌ๋ฆฌ๊ธฐ ๋ฒํผ์ ๋๋ฅธ ํ ๊ฒ์ํ์ ๋ค์ ๋์์ค๋ฉด ๊ฒ์ํ์ ๋ด๊ฐ ์ด ๊ธ์ด ์
๋ฐ์ดํธ๋ ์ํ๋ฅผ ๋ณผ ์ ์๋ค.
- ์ด๋ DB ์์
- ์ฌ๋ฆฌ๊ธฐ ๋ฒํผ์ ๋๋ฅธ๋ค. : INSERT๋ฌธ์ ์ฌ์ฉํด ์ฌ์ฉ์๊ฐ ์ ๋ ฅํ ๊ฒ์๊ธ ๋ฐ์ดํฐ๋ฅผ ์ฎ๊น.
- ๊ฒ์ํ ์๋ก ๊ตฌ์ฑ : SELECT๋ฌธ์ ์ฌ์ฉํด ์ต์ ์ ๋ณด๋ฅผ ์ ์ง.
- ํ์ฌ ์์ ๋จ์ INSERT ๋ฌธ + SELECT ๋ฌธ -----------> ์ด๋ฅผ ํตํ์ด ํ๋์ tranaction์ด๋ผ ํ๋ค!
- ์ด๋ DB ์์
- ๊ฒ์ํ์์ ์ฌ์ฉ์๊ฐ ๊ธ์ ์์ฑํ๊ณ ์ฌ๋ฆฌ๊ธฐ ๋ฒํผ์ ๋๋ฅธ ํ ๊ฒ์ํ์ ๋ค์ ๋์์ค๋ฉด ๊ฒ์ํ์ ๋ด๊ฐ ์ด ๊ธ์ด ์
๋ฐ์ดํธ๋ ์ํ๋ฅผ ๋ณผ ์ ์๋ค.
์ฆ. ํ๋์ ํธ๋์ญ์ ์ค๊ณ๋ฅผ ์ ๋ง๋๋ ๊ฒ์ด ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃฐ ๋ ๋ง์ ์ด์ ์ ์ค๋ค.
์์ ์ ์์ ์ฑ ์ ๋ณด์ฅํด์ฃผ๋ ๊ฒ์ด๋ค. ์ฆ, ๋ ผ๋ฆฌ์ ์ธ ์์ ์ ์ ๋ชจ๋ ์๋ฒฝํ๊ฒ ์ฒ๋ฆฌํ๊ฑฐ๋ ๋๋ ์ฒ๋ฆฌํ์ง ๋ชปํ ๊ฒฝ์ฐ์๋ ์ ์ํ๋ก ๋ณต๊ตฌํด์ ์์ ์ ์ผ๋ถ๋ง ์ ์ฉ๋๋ ํ์์ด ๋ฐ์ํ์ง ์๊ฒ ๋ง๋ค์ด์ฃผ๋ ๊ธฐ๋ฅ์ด๋ค. ์ฌ์ฉ์์ ์ ์ฅ์์๋ ์์ ์ ๋ ผ๋ฆฌ์ ๋จ์๋ก ์ดํด๋ฅผ ํ ์ ์๊ณ ์์คํ ์ ์ ์ฅ์์๋ ๋ฐ์ดํฐ๋ค์ ์ ๊ทผ ๋๋ ๋ณ๊ฒฝํ๋ ํ๋ก๊ทธ๋จ์ ๋จ์๊ฐ ๋๋ค.
ํธ๋์ญ์ ์ Commit, Rollback ์ฐ์ฐ
Commit
์ด๋ ํ๋์ ํธ๋์ญ์ ์ด ์ฑ๊ณต์ ์ผ๋ก ๋๋ฌ๊ณ , ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ์ผ๊ด์ฑ์๋ ์ํ์ ์์ ๋, ํ๋์ ํธ๋์ญ์ ์ด ๋๋ฌ๋ค๋ผ๋ ๊ฒ์ ์๋ ค์ฃผ๊ธฐ์ํด ์ฌ์ฉํ๋ ์ฐ์ฐ์ด๋ค.
์ด ์ฐ์ฐ์ ์ฌ์ฉํ๋ฉด ์ํํ๋ ํธ๋์ญ์ ์ด ๋ก๊ทธ์ ์ ์ฅ๋๋ฉฐ, ํ์ Rollback ์ฐ์ฐ์ ์ํํ์๋ ํธ๋์ญ์ ๋จ์๋ก ํ๋๊ฒ์ ๋์์ค๋ค.
Rollback
์ด๋ ํ๋์ ํธ๋์ญ์ ์ฒ๋ฆฌ๊ฐ ๋น์ ์์ ์ผ๋ก ์ข ๋ฃ๋์ด ํธ๋์ญ์ ์ ์์์ฑ์ด ๊นจ์ง๊ฒฝ์ฐ, ํธ๋์ญ์ ์ ์ฒ์๋ถํฐ ๋ค์ ์์ํ๊ฑฐ๋, ํธ๋์ญ์ ์ ๋ถ๋ถ์ ์ผ๋ก๋ง ์ฐ์ฐ๋ ๊ฒฐ๊ณผ๋ฅผ ๋ค์ ์ทจ์์ํจ๋ค.
ํ์ ์ฌ์ฉ์๊ฐ ํธ๋์ญ์ ์ฒ๋ฆฌ๋ ๋จ์๋๋ก Rollback์ ์งํํ ์๋ ์๋ค.
ํธ๋์ญ์ ํน์ง ACID
ACID 4๊ฐ์ง ํน์ฑ์ ๋ง์กฑํด์ผํ๋ค.
1. ์์์ฑ(Atomicity)
๋ง์ฝ ํธ๋์ญ์ ์ค๊ฐ์ ์ด๋ ํ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค๋ฉด ํธ๋์ญ์ ์ ํด๋นํ๋ ์ด๋ ํ ์์ ๋ด์ฉ๋ ์ํ๋์ด์๋ ์๋๋ฉฐ ์๋ฌด๋ฐ ๋ฌธ์ ๊ฐ ๋ฐ์๋์ง ์์์ ๊ฒฝ์ฐ์๋ง ๋ชจ๋ ์์ ์ด ์ํ๋์ด์ผ ํ๋ค.
2. ์ผ๊ด์ฑ(Consistency)
ํธ๋์ญ์ ์ด ์๋ฃ๋ ๋ค์์ ์ํ์์๋ ํธ๋์ญ์ ์ด ์ผ์ด๋๊ธฐ ์ ์ ์ํฉ๊ณผ ๋์ผํ๊ฒ ๋ฐ์ดํฐ์ ์ผ๊ด์ฑ์ ๋ณด์ฅํด์ผ ํ๋ค.
3. ๊ณ ๋ฆฝ์ฑ(Isolation)
๊ฐ๊ฐ์ ํธ๋์ญ์ ์ ์๋ก ๊ฐ์ญ์์ด ๋ ๋ฆฝ์ ์ผ๋ก ์ํ๋์ด์ผ ํ๋ค.
4. ์ง์์ฑ(Durability)
ํธ๋์ญ์ ์ด ์ ์์ ์ผ๋ก ์ข ๋ฃ๋ ๋ค์์๋ ์๊ตฌ์ ์ผ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์์ ์ ๊ฒฐ๊ณผ๊ฐ ์ ์ฅ๋์ด์ผ ํ๋ค.
ํธ๋์ญ์ ์ ์ํ
Active
ํธ๋์ญ์ ์ ํ๋ ์ํ. ํธ๋์ญ์ ์ด ์คํ์ค์ด๋ฉฐ ๋์์ค์ธ ์ํ๋ฅผ ๋งํ๋ค.
Failed
ํธ๋์ญ์ ์คํจ ์ํ. ํธ๋์ญ์ ์ด ๋์ด์ ์ ์์ ์ผ๋ก ์งํ ํ ์ ์๋ ์ํ๋ฅผ ๋งํ๋ค.
Partially Committed
ํธ๋์ญ์ ์ Commit ๋ช ๋ น์ด ๋์ฐฉํ ์ํ. ํธ๋์ญ์ ์ commit์ด์ sql๋ฌธ์ด ์ํ๋๊ณ commit๋ง ๋จ์ ์ํ๋ฅผ ๋งํ๋ค.
Committed
ํธ๋์ญ์ ์๋ฃ ์ํ. ํธ๋์ญ์ ์ด ์ ์์ ์ผ๋ก ์๋ฃ๋ ์ํ๋ฅผ ๋งํ๋ค.
Aborted
ํธ๋์ญ์ ์ด ์ทจ์ ์ํ. ํธ๋์ญ์ ์ด ์ทจ์๋๊ณ ํธ๋์ญ์ ์คํ ์ด์ ๋ฐ์ดํฐ๋ก ๋์๊ฐ ์ํ๋ฅผ ๋งํ๋ค.
Partially Committed ์ Committed ์ ์ฐจ์ด์
Commit ์์ฒญ์ด ๋ค์ด์ค๋ฉด ์ํ๋ Partial Commited ์ํ๊ฐ ๋๋ค. ์ดํ Commit์ ๋ฌธ์ ์์ด ์ํํ ์ ์์ผ๋ฉดCommitted ์ํ๋ก ์ ์ด๋๊ณ , ๋ง์ฝ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ฉด Failed ์ํ๊ฐ ๋๋ค.
์ฆ, Partial Commited๋ Commit ์์ฒญ์ด ๋ค์ด์์๋๋ฅผ ๋งํ๋ฉฐ, Commited๋ Commit์ ์ ์์ ์ผ๋ก ์๋ฃํ ์ํ๋ฅผ ๋งํ๋ค.
์ ๊ธ
โ ์ ๊ธ(Locking)์ด๋ ?
- ์ฌ๋ฌ ์ฌ์ฉ์๊ฐ ๋์ผํ ์๊ฐ์ ๋์ผํ ๋ฐ์ดํฐ๋ฅผ ๋์์ ์ก์ธ์คํ ์ ์๊ฒ ํด์ค๋ค.
- ์ ๊ธ์ ํธ๋์ญ์ ์ ์์ฐจ์ ์ผ๋ก ์ฒ๋ฆฌ๋๋๋ก ํจ์ผ๋ก์จ ์์ค๋ ์ ๋ฐ์ดํธ๋ฅผ ๋ฐฉ์งํ๋๋ฐ ์ค์ํ ์ญํ ์ ํ๋ฉฐ ์๋์ผ๋ก ๋ฐ์ํ๋ค.
- ์ ๊ธ์ ํตํด ๋ฐ์ดํฐ์ ๋ํ ์ผ๊ด์ฑ ์ ์ง์ ๋์ ์ฌ์ฉ์ด ๊ฐ๋ฅํด์ง๋ค.
โ ๋ธ๋กํน(Blocking)์ด๋ ?
- ์ด๋ค ํ๋ก์ธ์ค๊ฐ ์์์ ์์ธ์คํ๋ ค๊ณ ํ ๋ ์ด๋ฏธ ๋ค๋ฅธ ํ๋ก์ธ์ค๊ฐ ๊ทธ ์์์ ์ ๊ทธ๊ณ ์์ด์ ๊ทธ ์ ๊ธ์ด ํ๋ฆด ๋๊น์ง ๊ธฐ๋ค๋ ค์ผ ํ๋ ์ํฉ์ ๋งํ๋ค. ์ด๋ฌํ ์ฐจ๋จ์ด ์ค๋ซ๋์ ์ ์ง๋ ๊ฒฝ์ฐ ๋ฌธ์ ๊ฐ ๋๋ค.
โ ์ ๊ธ ๊ด๋ฆฌ
- ๊ต์ฐฉ์ํ(Dead Locks) :
* ํธ๋์ญ์ A๋ ํธ๋์ญ์ B๊ฐ ์ํ๋ ๋ฐ์ดํฐ๋ฅผ ์ ๊ทธ๊ณ ์์ผ๋ฉด์ ํธ๋์ญ์ B๊ฐ ์ ๊ทธ๊ณ ์๋ ๋ฐ์ดํฐ๋ฅผ ์ํ๋ค.
* ํธ๋์ญ์ B๋ ํธ๋์ญ์ A๊ฐ ์ํ๋ ๋ฐ์ดํฐ๋ฅผ ์ ๊ทธ๊ณ ์์ผ๋ฉด์ ํธ๋์ญ์ A๊ฐ ์ ๊ทธ๊ณ ์๋ ๋ฐ์ดํฐ๋ฅผ ์ํ๋ค.
- MSSQL ํด๊ฒฐ๋ฐฉ๋ฒ : ํ์ชฝ ํธ๋์ญ์ ์ฒ๋ฆฌ๋ฅผ ๊ฐ์ ๋ก ์ข ๋ฃ(๋น์ฉ์ด ์ ์ ํธ๋์ญ์ ์ ์ฒ๋ฆฌ๋ฅผ ๊ฐ์ ์ข ๋ฃํ๋ค.)
- SET DEADLOCK_PRIORITY ๋ฌธ์ ์ฌ์ฉํด ๊ต์ฐฉ ์ํ ๋ฐ์ ์ ํธ๋์ญ์ ์ ์ค์๋๋ฅผ ์ง์ ํ ์ ์๋ค.
- ์ฐ๋ฆฌ ํ์ฌ์ ๊ฒฝ์ฐ sp_mon_blocking ํ๋ก์์ ๋ฅผ ์ด์ฉํด ๋ธ๋กํน ์ํ์ธ spid๋ฅผ ์ฐพ์๋ธ๋ค. ๋ธ๋กํนํ๊ณ ์๋ spid ์ธ์ ์ ์ฃฝ์ด๊ธฐ ์ํด ' kill [spid] ' ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ๋ค.
ํธ๋์ญ์ ์ ์ฌ์ฉํ ๋ ์ฃผ์ํ ์
ํธ๋์ญ์ ์ ๊ผญ ํ์ํ ์ต์์ ์ฝ๋์๋ง ์ ์ฉํ๋ ๊ฒ์ด ์ข๋ค. ์ฆ ํธ๋์ญ์ ์ ๋ฒ์๋ฅผ ์ต์ํํ๋ผ๋ ์๋ฏธ๋ค.
์ผ๋ฐ์ ์ผ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ปค๋ฅ์ ์ ๊ฐ์๊ฐ ์ ํ์ ์ด๋ค.
๊ทธ๋ฐ๋ฐ ๊ฐ ๋จ์ ํ๋ก๊ทธ๋จ์ด ์ปค๋ฅ์ ์ ์์ ํ๋ ์๊ฐ์ด ๊ธธ์ด์ง๋ค๋ฉด ์ฌ์ฉ ๊ฐ๋ฅํ ์ฌ์ ์ปค๋ฅ์ ์ ๊ฐ์๋ ์ค์ด๋ค๊ฒ ๋๋ค.
๊ทธ๋ฌ๋ค ์ด๋ ์๊ฐ์๋ ๊ฐ ๋จ์ ํ๋ก๊ทธ๋จ์์ ์ปค๋ฅ์ ์ ๊ฐ์ ธ๊ฐ๊ธฐ ์ํด ๊ธฐ๋ค๋ ค์ผ ํ๋ ์ํฉ์ด ๋ฐ์ํ ์๋ ์๋ ๊ฒ์ด๋ค.
๊ต์ฐฉ์ํ
๊ต์ฐฉ์ํ๋ ๋ฌด์์ธ๊ฐ
๋ณต์์ ํธ๋์ญ์ ์ ์ฌ์ฉํ๋ค๋ณด๋ฉด ๊ต์ฐฉ์ํ๊ฐ ์ผ์ด๋ ์ ์๋ค. ๊ต์ฐฉ์ํ๋ ๋ ๊ฐ ์ด์์ ํธ๋์ญ์ ์ด ํน์ ์์(ํ ์ด๋ธ ๋๋ ํ)์ ์ ๊ธ(Lock)์ ํ๋ํ ์ฑ ๋ค๋ฅธ ํธ๋์ญ์ ์ด ์์ ํ๊ณ ์๋ ์ ๊ธ์ ์๊ตฌํ๋ฉด ์๋ฌด๋ฆฌ ๊ธฐ๋ค๋ ค๋ ์ํฉ์ด ๋ฐ๋์ง ์๋ ์ํ๊ฐ ๋๋๋ฐ, ์ด๋ฅผ ๊ต์ฐฉ์ํ๋ผ๊ณ ํ๋ค.
๊ต์ฐฉ์ํ์ ๋น๋๋ฅผ ๋ฎ์ถ๋ ๋ฐฉ๋ฒ
- ํธ๋์ญ์ ์ ์์ฃผ ์ปค๋ฐํ๋ค.
- ์ ํด์ง ์์๋ก ํ ์ด๋ธ์ ์ ๊ทผํ๋ค. ์์์ ํธ๋์ญ์ 1 ์ด ํ ์ด๋ธ B -> A ์ ์์ผ๋ก ์ ๊ทผํ๊ณ , ํธ๋์ญ์ 2 ๋ ํ ์ด๋ธ A -> B์ ์์ผ๋ก ์ ๊ทผํ๋ค. ํธ๋์ญ์ ๋ค์ด ๋์ผํ ํ ์ด๋ธ ์์ผ๋ก ์ ๊ทผํ๊ฒ ํ๋ค.
- ์ฝ๊ธฐ ์ ๊ธ ํ๋ (SELECT ~ FOR UPDATE)์ ์ฌ์ฉ์ ํผํ๋ค.
- ํ ํ ์ด๋ธ์ ๋ณต์ ํ์ ๋ณต์์ ์ฐ๊ฒฐ์์ ์์ ์์ด ๊ฐฑ์ ํ๋ฉด ๊ต์ฐฉ์ํ๊ฐ ๋ฐ์ํ๊ธฐ ์ฝ๋ค, ์ด ๊ฒฝ์ฐ์๋ ํ ์ด๋ธ ๋จ์์ ์ ๊ธ์ ํ๋ํด ๊ฐฑ์ ์ ์ง๋ ฌํ ํ๋ฉด ๋์์ฑ์ ๋จ์ด์ง์ง๋ง ๊ต์ฐฉ์ํ๋ฅผ ํํผํ ์ ์๋ค.
Reference.
'๐ฅ > Database' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐ์ดํฐ๋ฒ ์ด์ค] SQL Injection (0) | 2021.10.13 |
---|---|
[๋ฐ์ดํฐ๋ฒ ์ด์ค] NoSQL (0) | 2021.09.09 |
[๋ฐ์ดํฐ๋ฒ ์ด์ค] ์ ๊ทํ์ ๋ํด์ (0) | 2021.08.18 |
[๋ฐ์ดํฐ๋ฒ ์ด์ค] Index๋ ๋ฌด์์ธ๊ฐ (0) | 2021.08.11 |
[๋ฐ์ดํฐ๋ฒ ์ด์ค] ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฌ์ฉํ๋ ์ด์ ์ ์ฑ๋ฅ (0) | 2021.08.04 |