๐งฑ ACID ํธ๋์ญ์ ์ดํดํ๊ธฐ
โ ACID๋ ๋ฌด์์ธ๊ฐ?
ACID๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ํธ๋์ญ์ ์ด ์ ํํ๊ณ ์ ๋ขฐ์ฑ ์๊ฒ ์ฒ๋ฆฌ๋๋๋ก ๋ณด์ฅํ๋ 4๊ฐ์ง ํต์ฌ ์์ฑ์ ๋๋ค.
ํญ๋ชฉ | ์ค๋ช |
---|---|
A - Atomicity | ํธ๋์ญ์ ์ ๋ชจ๋ ์ฑ๊ณตํ๊ฑฐ๋ ๋ชจ๋ ์คํจํด์ผ ํจ |
C - Consistency | ํธ๋์ญ์ ํ DB๋ ํญ์ ์ ํจํ ์ํ์ฌ์ผ ํจ |
I - Isolation | ํธ๋์ญ์ ์ ๋ ๋ฆฝ์ ์ผ๋ก ์คํ๋์ด์ผ ํจ |
D - Durability | ํธ๋์ญ์ ๊ฒฐ๊ณผ๋ ์๊ตฌ์ ์ผ๋ก ๋ณด์กด๋์ด์ผ ํจ |
๐งฉ 1. ์์์ฑ (Atomicity)
ํธ๋์ญ์ ์ ๋ ์ด์ ๋๋ ์ ์๋ ์ต์ ๋จ์
์ ๋ถ ์ฑ๊ณตํ๊ฑฐ๋, ์ ๋ถ ์คํจํด์ผ ํฉ๋๋ค.
๐ ์์: ๊ณ์ข ์ด์ฒด
- A ๊ณ์ข์์ 3000์ ์ถ๊ธ
- B ๊ณ์ข์ 3000์ ์ ๊ธ
โ 2๋ฒ์์ ์คํจํ๋ฉด 1๋ฒ๋ ์๋ ๋กค๋ฐฑ๋์ด์ผ ํฉ๋๋ค.
๐ก ์ค์ ๊ตฌํ: Undo ๋ก๊ทธ
- RDBMS๋ ํธ๋์ญ์ ์์ ์ ๊ฐ์ Undo ๋ก๊ทธ๋ก ์ ์ฅ
- ์ค๋ฅ ๋ฐ์ ์, ๋ก๊ทธ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ด์ ์ํ๋ก ๋กค๋ฐฑ
๐งฉ 2. ์ผ๊ด์ฑ (Consistency)
ํธ๋์ญ์ ์ ํ๋ก DB ์ ์ฝ ์กฐ๊ฑด์ด ํญ์ ์ ์ง๋์ด์ผ ํจ
๐ ์์: ์ ์ฝ ์กฐ๊ฑด ์๋ฐ
User
ํ ์ด๋ธ์NOT NULL
์ปฌ๋ผ์ด ์๋๋ฐ,
ํธ๋์ญ์ ์ค๊ฐ์ NULL์ด ์ฝ์ ๋๋ฉด โ ์ ์ฒด ํธ๋์ญ์ ๋กค๋ฐฑ
๐ก ์ค์ ๊ตฌํ
- ๋ฌด๊ฒฐ์ฑ ๊ฒ์ฌ: FK, ์ ์ฝ์กฐ๊ฑด, ํธ๋ฆฌ๊ฑฐ ๋ฑ
- ์ ํ๋ฆฌ์ผ์ด์ โ DB๋ก ์์
๐งฉ 3. ๊ฒฉ๋ฆฌ์ฑ (Isolation)
๋์์ ์คํ๋๋ ํธ๋์ญ์ ์ด ์๋ก ๊ฐ์ญํ์ง ์๋๋ก ๋ณด์ฅ
๐ ์์: ์ค๊ฐ ๊ฒฐ๊ณผ ๋ ธ์ถ ๋ฐฉ์ง
- A ๊ณ์ข โ B ๊ณ์ข ์ด์ฒด ์ค์
๋๊ตฐ๊ฐ๊ฐ A์ ์๊ณ ๋ฅผ ์กฐํํ๋ฉด ์ ๋จ (์ค๊ฐ ์ํ ๋ ธ์ถ ๋ฐฉ์ง)
๐ก ํธ๋์ญ์ ๊ฐ์ญ ๋ฌธ์ (Isolation Level)
๋ฌธ์ ์ ํ | ์ค๋ช |
---|---|
Dirty Read | ์ปค๋ฐ๋์ง ์์ ๊ฐ ์ฝ๊ธฐ |
Non-repeatable Read | ํ ํธ๋์ญ์ ๋ด์์ ๊ฐ์ด ๋ฐ๋ |
Phantom Read | ์กฐ๊ฑด์ ๋ง๋ ํ์ด ์๊ธฐ๊ฑฐ๋ ์ฌ๋ผ์ง |
๐ก ์ค์ ์ ์ด ๋ฐฉ๋ฒ
- ๊ฒฉ๋ฆฌ ์์ค ์ค์ (Isolation Level)
Level | ์ค๋ช |
---|---|
READ UNCOMMITTED | ์ต์ ๋ณด์ฅ, Dirty Read ๊ฐ๋ฅ |
READ COMMITTED | Oracle ๊ธฐ๋ณธ๊ฐ |
REPEATABLE READ | MySQL InnoDB ๊ธฐ๋ณธ๊ฐ |
SERIALIZABLE | ๊ฐ์ฅ ์๊ฒฉ, ์ฑ๋ฅ ๋ถ๋ด โ |
๐งฉ 4. ์ง์์ฑ (Durability)
์ฑ๊ณตํ ํธ๋์ญ์ ์ ์์คํ ์ด ๊บผ์ ธ๋ ๋ฐ๋์ ์ ์ฅ๋์ด์ผ ํจ
๐ ์์
- ์ฃผ๋ฌธ ์ฑ๊ณต ๋ฉ์์ง โ DB ๋ฐ์๋์๋๋ฐ
์๋ฒ๊ฐ ๋ค์ด๋์ด๋ โ ์ฌ์์ ํ ๋ฐ์ดํฐ๋ ๊ทธ๋๋ก ์์ด์ผ ํจ
๐ก ์ค์ ๊ตฌํ: WAL (Write-Ahead Logging)
- ํธ๋์ญ์ ์ด ์ปค๋ฐ๋๋ฉด ๋จผ์ ๋ก๊ทธ ํ์ผ(WAL)์ ๊ธฐ๋ก
- ๋์คํฌ์ ์ฐ๊ธฐ ์๋ฃ๋ ํ์์ผ ํธ๋์ญ์ ์ ์ฑ๊ณต์ผ๋ก ์ฒ๋ฆฌ
- ์์คํ ์ฅ์ ์ โ WAL์ ์ฝ์ด ์ํ ๋ณต๊ตฌ ๊ฐ๋ฅ
๐ฌ ์ถ๊ฐ๋ก ์์๋๋ฉด ์ข์ ๊ฐ๋ ๋ค
๊ฐ๋ | ์ค๋ช |
---|---|
WAL (Write-Ahead Logging) | ๋ก๊ทธ ์ฐ์ ๊ธฐ๋ก โ ๋ณต๊ตฌ๋ฅผ ์ํ ํต์ฌ |
CAP ์ด๋ก ๊ณผ์ ๊ด๊ณ | ACID๋ Consistency์ ์ง์ค, CAP์ ๋ถ์ฐ ์์คํ ์ ํธ๋ ์ด๋์คํ |
ํธ๋์ญ์ Savepoint | ํธ๋์ญ์ ๋ด๋ถ์์ ํน์ ์ง์ ๊น์ง ๋กค๋ฐฑ ๊ฐ๋ฅ |
Auto Commit | ํธ๋์ญ์ ์ ๋ช ์ํ์ง ์์ผ๋ฉด ์๋ ์ปค๋ฐ๋จ (์ฃผ์!) |
๐ฏ ์ค๋ฌด์์๋ ์ธ์ ACID๋ฅผ ํ์ฉํ๋์?
- ๊ณ์ข ์ด์ฒด, ์ฃผ๋ฌธ, ์ฌ๊ณ ๊ฐ์ ๋ฑ ์ ๋ ์คํจํ๋ฉด ์ ๋๋ ์์
- ๊ธ์ต/๊ฒฐ์ /์ธ์ฆ ๋ฑ์์ ์ผ๊ด์ฑ๊ณผ ์ ํ์ฑ์ด ์ค์ํ ๊ฒฝ์ฐ
- ๋์ฒด๋ก RDBMS (MySQL, PostgreSQL ๋ฑ)๊ฐ ๊ธฐ๋ณธ์ ์ผ๋ก ACID ๋ณด์ฅ
๐ ์ ๋ฆฌ ์์ฝ
์์ฑ | ์๋ฏธ | ์ค๋ฌด ํฌ์ธํธ |
---|---|---|
A - ์์์ฑ | All or Nothing | ์ค๊ฐ ์คํจ โ ์ ์ฒด ๋กค๋ฐฑ |
C - ์ผ๊ด์ฑ | ๊ท์น ์ ์ง | FK, ์ ์ฝ์กฐ๊ฑด ์ ์ง |
I - ๊ฒฉ๋ฆฌ์ฑ | ๋ ๋ฆฝ์ ์คํ | ์ค๊ฐ ๊ฐ ๋ณด์ง ์๊ฒ |
D - ์ง์์ฑ | ์คํจํด๋ ๊ฒฐ๊ณผ ์ ์ง | WAL๋ก ๋ณต๊ตฌ ๊ฐ๋ฅ |
๋๊ธ๋จ๊ธฐ๊ธฐ