๋ค์์ ์ฌ์ฉ์ ๋ค์ค์ ํธ๋์ญ์ ์ฌ์ด์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ผ๊ด์ฑ ๋ณด์ฅ
๋ฐ์ดํฐ๋ฒ ์ด์ค ๋์์ฑ ์ ์ด (Concurrency Control)
๋ฉํฐ์ ์ ํ๊ฒฝ์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ์ฌ๋ฌ ์ฌ์ฉ์๊ฐ ๋์์ ์ ๊ทผํ ๋์๋ ๋ฐ์ดํฐ ์ผ๊ด์ฑ(Data Integrity)์ ์ ์งํด์ผ ํ๋ค. ์ด๋ฅผ ์ํด DBMS์์๋ ๋์์ฑ ์ ์ด ๋งค์ปค๋์ฆ์ ๋์ ํ๋ค. ๋์์ฑ ์ ์ด๋ ๋ค์ค ์์ฒญ์ด ๊ฐ์ ๋ฐ์ดํฐ์ ์ ๊ทผํด๋ ๋ฐ์ดํฐ ์์์ด๋ ์ผ๊ด์ฑ ๋ฌธ์ ๋ฅผ ๋ฐฉ์งํ๋๋ก ์ค๊ณ๋์๋ค.
1๏ธโฃ ๋์์ฑ ์ ์ด๋?
- ๋ฉํฐ์ ์ ํ๊ฒฝ์์ ๋์ ์ ๊ทผ
- ๋ฉํฐ์ ์ : ๋จ์ผ DB ์ธ์คํด์ค ๋ด ๋ค์ ์ค๋ ๋ + ์ฌ๋ฌ ์ธ์คํด์ค
- ๋ค์์ ํธ๋์ญ์ ์ด ๋์์ ๊ฐ์ ๋ฐ์ดํฐ์ ์ ๊ทผํ๋ ์ํฉ
- ์ฃผ์ ๋ชฉํ
- Data Integrity(๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ)๋ณด์ฅ
- Data Consistencty(๋ฐ์ดํฐ ์ผ๊ด์ฑ) ์ ์ง
- ๋ฐ์ดํฐ ์ถฉ๋ ๋ฐฉ์ง ๋ฐ ์ฑ๋ฅ ์ต์ ํ
2๏ธโฃ ๋์์ฑ ์ ์ด์ ํต์ฌ: Locking Mechanism
๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ๋์์ฑ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด Locking Mechanism์ ํ์ฉํ๋ค.
๋ ๊ฐ์ง ์ฃผ์ ์ ๊ทผ ๋ฐฉ์์ผ๋ก ๋๋๋ค.
- Pessimistic Lock(๋น๊ด์ ๋ฝ)
- ์ถฉ๋ ๊ฐ๋ฅ์ฑ์ ๋ฏธ๋ฆฌ ์์ธกํ๊ณ ๋ฐ์ดํฐ ์ ๊ธ์ ํตํด ์ด๋ฅผ ๋ฐฉ์งํ๋ ๋ฐฉ์.
- Optimistic Lock(๋๊ด์ ๋ฝ)
- ์ถฉ๋ ๊ฐ๋ฅ์ฑ์ ๋ฌด์ํ๊ณ ์์ ํ ๊ฒ์ฆ ๋จ๊ณ์์ ์ถฉ๋ ์ฌ๋ถ๋ฅผ ํ์ธํ๋ ๋ฐฉ์.
Lock type | ํน์ง | ์ฃผ์ ํ์ฉ ํ๊ฒฝ |
Pessimistic | ์์ ์ ์ Lock์ ์ค์ ํ์ฌ ์ถฉ๋ ๋ฐฉ์ง | RDBMS, ์ถฉ๋ ๊ฐ๋ฅ์ฑ ๋์ ํ๊ฒฝ |
Optimistic | ์์ ํ ์ถฉ๋ ๊ฒ์ฆ. Lock ์์ด ์ฑ๋ฅ ์ต์ ํ | NoSQL, ๋์์ฑ์ด ์ค์ํ ํ๊ฒฝ |
3๏ธโฃ Pessimistic Lock(๋น๊ด์ ๋ฝ)
๐ก ์ฃผ์ ํน์ง
1. ์ ๋ฝ ์ฒดํฌ → ํ์์
- ๋ฐ์ดํฐ๋ฅผ ์ ๊ทผํ๊ธฐ ์ ์ Lock ์ค์
- ์ถฉ๋ ๊ฐ๋ฅ์ฑ์ ๋ฏธ๋ฆฌ ๋ฐฉ์ง
2. ์ฃผ์ ํ์ฉ ํ๊ฒฝ
- ์ฐ๊ธฐ ์์ ๋น์ค์ด ๋์ ํ๊ฒฝ
- ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ ์ ๋ ๋ณด์ฅ ํ์
3. ์ ๊ธ ๋ฐฉ์
- Shared Lock (S-Lock): ์ฝ๊ธฐ ์ ์ฉ ์ ๊ธ → ๋ค์์ ์ฝ๊ธฐ ๊ฐ๋ฅ / ์ฐ๊ธฐ ๋ถ๊ฐ
- Exclusive Lock (X-Lock): ์ฐ๊ธฐ ์ ์ฉ ์ ๊ธ → ๋ชจ๋ ์ ๊ทผ ๋ถ๊ฐ
4. ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋นํธ์ธ Lock
- DBMS๊ฐ ํธ๋์ญ์ ๋จ์๋ก ๋ด๋ถ์ ์ผ๋ก Lock์ ๊ด๋ฆฌํ๋ค.
- Lock์ด ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ์ ๋ณด์ฅํ๋ฉฐ, ๊ฐ๋ฐ์๊ฐ ์ง์ Lock ๊ตฌํ ๋ถ๋ด์ด ์ ๋ค.
- ์ฃผ์ ์ฌ๋ก: MySQL InnoDB, Oracle
5. ์ฅ์ ๊ณผ ๋จ์
์ฅ์ | ๋จ์ |
๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ ๋ณด์ฅ | ๋์์ฑ ๊ฐ์, ๋ฐ๋๋ฝ ๋ฐ์ ๊ฐ๋ฅ |
์ถฉ๋ ๋ฐฉ์ง | ์ ๊ธ ํ๋ ๋๊ธฐ ์๊ฐ ์ฆ๊ฐ |
๐ฅ ๋ฐ๋๋ฝ(Deadlock)
- ๋ฐ๋๋ฝ ๋ฐ์ ์ํฉ
- ํธ๋์ญ์ A: ๋ฐ์ดํฐ D1 ์ ๊ธ ํ D2 ์ ๊ทผ ๋๊ธฐ
- ํธ๋์ญ์ B: ๋ฐ์ดํฐ D2 ์ ๊ธ ํ D1 ์ ๊ทผ ๋๊ธฐ
- ๋ ํธ๋์ญ์ ์ด ์๋ก์ ์์์ ๊ธฐ๋ค๋ฆฌ๋ฉฐ ๋ฌดํ ๋๊ธฐ ์ํ

4๏ธโฃ Optimistic Lock(๋๊ด์ ๋ฝ)
๐ก ์ฃผ์ ํน์ง
1. ์ ์์ → ํ๋ฒ์ ์ฒดํฌ
- ์์ ์ํ ํ, Commit ์์ ์์ ์ถฉ๋์ ๊ฒ์ฆํ๋ค.
- ์ถฉ๋ ๋ฐ์ ์ ๋กค๋ฐฑ ๋ฐ ์ฌ์๋
2. ์ฃผ์ ํ์ฉ ํ๊ฒฝ
- ์ฝ๊ธฐ ์์ ๋น์ค์ด ๋์ ํ๊ฒฝ
- ๋ถ์ฐ ๋ฐ์ดํฐ ์ฒ๋ฆฌ NoSQL ์์คํ (DynamoDB, Redis)
3. ์ํํธ์จ์ด์ Lock
- Lock ๊ธฐ๋ฅ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ํํธ์จ์ด์์ ๊ตฌํ
- ๋ฐ์ดํฐ์ ๋ฒ์ ์ ๋ณด๋ฅผ ์ถ๊ฐํ์ฌ ๋ณ๊ฒฝ ์ ์ถฉ๋์ ๊ฒ์ฆ
- ์ฃผ์ ์ฌ๋ก: DynamoDB, Redis
4. ๋ฒ์ ๊ด๋ฆฌ ๋ฐฉ์
- Version ํ๋ ์ถ๊ฐ: ๋ฐ์ดํฐ ๋ณ๊ฒฝ ์ ๋ฒ์ ์ฆ๊ฐ
- ์ถฉ๋ ์ OptimisticLockException ๋ฐ์
5. ๋์ ์์
- ํธ๋์ญ์
T1๊ณผ T2์ ๋์ ์์
- T1: 9์ 0๋ถ์ ๋ฐ์ดํฐ (๊ฐ=0)๋ฅผ์ฝ์ → 9์ 1๋ถ์ ๊ฐ=1 ์ ์ฅ
- T2: 9์ 0๋ถ์ ๋์ผํ ๋ฐ์ดํฐ(๊ฐ=0)๋ฅผ ์ฝ์ → 9์ 2๋ถ์ ๊ฐ=2 ์ ์ฅ ์๋
- ์ถฉ๋ ๋ฐ์
- T2๋ Commit ์์ ์์ ๋ฐ์ดํฐ ๋ฒ์ ์ด ๋ณ๊ฒฝ๋์์์ ํ์ธ → ์ถฉ๋ ๊ฐ์ง
- ์ฒ๋ฆฌ
- T2์ ์์ ๋กค๋ฐฑ
- ๊ฐ๋ฐ์๊ฐ ์ง์ ์ถฉ๋ ์ฒ๋ฆฌ๋ฅผ ๊ตฌํํด์ผํจ
- ์์: OptimisitcLockException ๋ฐ์
6. ์ฅ์ ๊ณผ ๋จ์
์ฅ์ | ๋จ์ |
์ฑ๋ฅ ์ต์ ํ, ๋์์ฑ ์ฆ๊ฐ | ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ ๋ณด์ฅ ์์ค ๋ฎ์ |
Lock ์์ด ์์ ๊ฐ๋ฅ | ์ถฉ๋ ์ฒ๋ฆฌ ๋ก์ง ์ถ๊ฐ ๊ฐ๋ฐ ํ์ |
5๏ธโฃ Pessimistic vs Optimistic Lock
๊ตฌ๋ถ | Pessimisitc Lock | Optimisitc Lock |
๋์๋ฐฉ์ | ์ ์ ๊ธ → ํ์์ | ์ ์์ → ํ๋ฒ์ ์ฒดํฌ |
Lock ๊ตฌํ | ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋นํธ์ธ | ์ํํธ์จ์ด์ |
์ฃผ์ ํ์ฉ ํ๊ฒฝ | RDBMS (์ถฉ๋ ๊ฐ๋ฅ์ฑ ๋์ ํ๊ฒฝ) | NoSQL (๋์์ฑ์ด ์ค์ํ ํ๊ฒฝ) |
์ฅ์ | ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ ๋ณด์ฅ | ์ฑ๋ฅ ํฅ์, ๋์์ฑ ์ฆ๊ฐ |
๋จ์ | ๋ฅ์์ฑ ์ ํ, ๋ฐ๋๋ฝ ๋ฐ์ ์ํ | ์ถฉ๋ ์ ์ถ๊ฐ ๊ฐ๋ฐ ํ์ |
์ฃผ์ ์ฌ์ฉ ์ฌ๋ก | ๊ธ์ฉ ์์คํ , ERP | IoT, ์์ ๋ฏธ๋์ด, ๋ถ์ฐ ๋ฐ์ดํฐ ์ฒ๋ฆฌ |
โน๏ธ ์ฐธ๊ณ
[ASAC 6๊ธฐ ๊ฐ์์๋ฃ]
'๐ปDEV-STUDY > DataBase' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[DB] ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ์ฅ (Scaling) (0) | 2024.11.29 |
---|---|
[DB] ํธ๋์ญ์ Isolation Level (0) | 2024.11.28 |
[DB] ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค & ๋น๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค (0) | 2024.11.22 |