๐ ์์ ํ ๋ฐ์ดํฐ ์ฒ๋ฆฌ
๋ฐ์ดํฐ๋ฒ ์ด์ค ์์คํ ์์ ํธ๋์ญ์ ๊ณผ ๋์์ฑ ์ ์ด๋ ๋ฐ์ดํฐ์ ๋ฌด๊ฒฐ์ฑ๊ณผ ์ผ๊ด์ฑ์ ์ ์งํ๊ธฐ ์ํ ํต์ฌ ๊ฐ๋ ์ ๋๋ค. ์ด๋ฅผ ์ดํดํ๊ณ ์ ์ ํ ํ์ฉํ๋ ๊ฒ์ ์์ ์ ์ธ ๋ฐ์ดํฐ ์ฒ๋ฆฌ๋ฅผ ์ํด ํ์์ ์ ๋๋ค.
1. ํธ๋์ญ์ ๊ณผ ACID ์์น
๐ฏ ํธ๋์ญ์ (Transaction)์ด๋?
ํธ๋์ญ์ ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ํ๋์ ๋ ผ๋ฆฌ์ ์์ ๋จ์๋ฅผ ์๋ฏธํ๋ฉฐ, ์ฌ๋ฌ ๊ฐ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ์ฐ์ ํ๋์ ์์ ๋จ์๋ก ๋ฌถ์ด ์ฒ๋ฆฌํฉ๋๋ค. ํธ๋์ญ์ ์ ๋ชจ๋ ์ฑ๊ณต์ ์ผ๋ก ์๋ฃ๋๊ฑฐ๋, ๋ชจ๋ ์คํจํ์ฌ ์ด์ ์ํ๋ก ๋ณต๊ตฌ๋์ด์ผ ํฉ๋๋ค.
๐ฏ ACID ์์น
ํธ๋์ญ์ ์ ๋ค์์ ACID ์์น์ ๋ฐ๋ผ์ผ ํฉ๋๋ค:
- ์์์ฑ(Atomicity): ํธ๋์ญ์ ์ ๋ชจ๋ ์ฐ์ฐ์ ๋ชจ๋ ์ฑ๊ณต์ ์ผ๋ก ์๋ฃ๋๊ฑฐ๋, ๋ชจ๋ ์คํจํ์ฌ ์ด์ ์ํ๋ก ๋ณต๊ตฌ๋์ด์ผ ํฉ๋๋ค.
- ์ผ๊ด์ฑ(Consistency): ํธ๋์ญ์ ์ด ์ฑ๊ณต์ ์ผ๋ก ์๋ฃ๋๋ฉด ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ์ผ๊ด์ฑ ์๋ ์ํ๋ฅผ ์ ์งํด์ผ ํฉ๋๋ค.j-
- ๊ฒฉ๋ฆฌ์ฑ(Isolation): ๋์์ ์คํ๋๋ ํธ๋์ญ์ ๋ค์ ์๋ก ๊ฐ์ญํ์ง ์๋๋ก ๋ ๋ฆฝ์ ์ผ๋ก ์ํ๋์ด์ผ ํฉ๋๋ค.
- ์ง์์ฑ(Durability): ํธ๋์ญ์ ์ด ์ฑ๊ณต์ ์ผ๋ก ์๋ฃ๋๋ฉด ๊ทธ ๊ฒฐ๊ณผ๋ ์๊ตฌ์ ์ผ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฐ์๋์ด์ผ ํฉ๋๋ค.
๐ฏ ํธ๋์ญ์ ์ ์ํ
ํธ๋์ญ์ ์ ์ํ ๊ณผ์ ์์ ๋ค์๊ณผ ๊ฐ์ ์ํ๋ฅผ ๊ฐ์ง๋๋ค:
- ํ์ฑ ์ํ (Active)
- ํธ๋์ญ์ ์ด ์์๋์ด ์ฐ์ฐ์ด ์คํ ์ค์ธ ์ํ์ ๋๋ค.
- ๋ถ๋ถ ์๋ฃ ์ํ (Partially Committed)
- ํธ๋์ญ์ ์ ๋ชจ๋ ์ฐ์ฐ์ด ์คํ์ ์๋ฃํ๊ณ , Commit ์ฐ์ฐ์ด ๋์ฐฉํ ์ํ์ ๋๋ค.
- ์๋ฃ ์ํ (Committed)
- ํธ๋์ญ์ ์ด ์ฑ๊ณต์ ์ผ๋ก ์๋ฃ๋์ด ๊ทธ ๊ฒฐ๊ณผ๊ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์๊ตฌ์ ์ผ๋ก ์ ์ฅ๋ ์ํ์ ๋๋ค.
- ์คํจ ์ํ (Failed)
- ํธ๋์ญ์ ์ด ์คํ ๋์ค ์ค๋ฅ๊ฐ ๋ฐ์ํ์ฌ ๋ ์ด์ ์งํํ ์ ์๋ ์ํ์ ๋๋ค.
- ์ฒ ํ ์ํ (Aborted)
- ํธ๋์ญ์ ์ด ์คํจํ์ฌ Rollback ์ฐ์ฐ์ ํตํด ์์ ์ ์ํ๋ก ๋ณต๊ตฌ๋ ์ํ์ ๋๋ค.
๐ 2. ํธ๋์ญ์ ๊ฒฉ๋ฆฌ ์์ค
์ฌ๋ฌ ํธ๋์ญ์ ์ด ๋์์ ์คํ๋ ๋ ๋ฐ์ํ ์ ์๋ ๋ฐ์ดํฐ ๋ถ์ผ์น ๋ฌธ์ ๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด, ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ํธ๋์ญ์ ๊ฒฉ๋ฆฌ ์์ค์ ์ ๊ณตํฉ๋๋ค. SQL ํ์ค์์๋ ๋ค์๊ณผ ๊ฐ์ 4๊ฐ์ง ๊ฒฉ๋ฆฌ ์์ค์ ์ ์ํฉ๋๋ค
- READ UNCOMMITTED (์ปค๋ฐ๋์ง ์์ ์ฝ๊ธฐ):
- ํธ๋์ญ์ ์ด ์ปค๋ฐ๋์ง ์์ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฅธ ํธ๋์ญ์ ์ด ์ฝ์ ์ ์์ต๋๋ค.
- ๋ฌธ์ ์ : Dirty Read, Non-repeatable Read, Phantom Read ๋ฐ์ ๊ฐ๋ฅ์ฑ์ด ์์ต๋๋ค.
- READ COMMITTED (์ปค๋ฐ๋ ์ฝ๊ธฐ):
- ํธ๋์ญ์ ์ด ์ปค๋ฐ๋ ๋ฐ์ดํฐ๋ง ์ฝ์ ์ ์์ต๋๋ค.
- ๋ฌธ์ ์ : Non-repeatable Read, Phantom Read ๋ฐ์ ๊ฐ๋ฅ์ฑ์ด ์์ต๋๋ค.
- REPEATABLE READ (๋ฐ๋ณต ๊ฐ๋ฅํ ์ฝ๊ธฐ):
- ํธ๋์ญ์ ์ด ๋์ผํ ๋ฐ์ดํฐ๋ฅผ ์ฌ๋ฌ ๋ฒ ์ฝ์ด๋ ๋์ผํ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์ฅํฉ๋๋ค.
- ๋ฌธ์ ์ : Phantom Read ๋ฐ์ ๊ฐ๋ฅ์ฑ์ด ์์ต๋๋ค.
- SERIALIZABLE (์ง๋ ฌํ ๊ฐ๋ฅ):
- ๊ฐ์ฅ ๋์ ์์ค์ ๊ฒฉ๋ฆฌ๋ก, ํธ๋์ญ์ ๋ค์ด ์์ฐจ์ ์ผ๋ก ์คํ๋๋ ๊ฒ์ฒ๋ผ ๋์ํฉ๋๋ค.
- ๋ฌธ์ ์ : ๋์์ฑ ์ฒ๋ฆฌ ์ฑ๋ฅ์ด ์ ํ๋ ์ ์์ต๋๋ค.
3. ๋์์ฑ ์ ์ด์ MVCC
๐ฏ ๋์์ฑ ์ ์ด(Concurrency Control)
๋์์ฑ ์ ์ด๋ ๋ค์ค ์ฌ์ฉ์ ํ๊ฒฝ์์ ์ฌ๋ฌ ํธ๋์ญ์ ์ด ๋์์ ์ํ๋ ๋, ๋ฐ์ดํฐ์ ์ผ๊ด์ฑ๊ณผ ๋ฌด๊ฒฐ์ฑ์ ์ ์งํ๊ธฐ ์ํ ๊ธฐ๋ฒ์ ๋๋ค. ๋์์ฑ ์ ์ด๊ฐ ์๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค
- ๊ฐฑ์ ์์ค (Lost Update)
- ๋ ๊ฐ์ ํธ๋์ญ์ ์ด ๋์ผํ ๋ฐ์ดํฐ๋ฅผ ๋์์ ๊ฐฑ์ ํ ๋, ํ ํธ๋์ญ์ ์ ๊ฐฑ์ ๊ฒฐ๊ณผ๊ฐ ๋ค๋ฅธ ํธ๋์ญ์ ์ ์ํด ๋ฎ์ด์ฐ์ฌ์ง๋ ํ์์ ๋๋ค.
- ํํฉ ํ์
์ค๋ฅ (Dirty Read)
- ํ ํธ๋์ญ์ ์ด ์์ง Commit๋์ง ์์ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฅธ ํธ๋์ญ์ ์ด ์ฝ์ ๋ ๋ฐ์ํ๋ ๋ฌธ์ ์ ๋๋ค.
- ๋ฐ๋ณต ๋ถ๊ฐ๋ฅํ ์ฝ๊ธฐ (Non-repeatable Read)
- ํ ํธ๋์ญ์ ์ด ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ๋ ๋ฒ ์ฝ์ ๋, ๊ทธ ์ฌ์ด์ ๋ค๋ฅธ ํธ๋์ญ์ ์ด ํด๋น ๋ฐ์ดํฐ๋ฅผ ์์ ํ๊ฑฐ๋ ์ญ์ ํ์ฌ ๊ฒฐ๊ณผ๊ฐ ๋ฌ๋ผ์ง๋ ํ์์ ๋๋ค.
- ํฌํ
๋ฆฌ๋ (Phantom Read)
- ํ ํธ๋์ญ์ ์ด ํน์ ์กฐ๊ฑด์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์กฐํํ ํ, ๋ค๋ฅธ ํธ๋์ญ์ ์ด ํด๋น ์กฐ๊ฑด์ ๋ง๋ ์๋ก์ด ๋ฐ์ดํฐ๋ฅผ ์ฝ์ ํ์ฌ ์ด์ ํธ๋์ญ์ ์ด ๋์ผํ ์กฐํ๋ฅผ ํ์ ๋ ๊ฒฐ๊ณผ ์งํฉ์ด ๋ฌ๋ผ์ง๋ ํ์์ ๋๋ค.
๐ฏ MVCC(Multi-Version Concurrency Control)
MVCC๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๋์์ฑ ์ ์ด๋ฅผ ์ํด ์ฌ์ฉ๋๋ ๊ธฐ๋ฒ์ผ๋ก, ๊ฐ ํธ๋์ญ์ ์ด ๋ฐ์ดํฐ์ ์ค๋ ์ท์ ๊ฐ์ ธ์ ์์ ์ ์ํํ๊ฒ ํจ์ผ๋ก์จ ์ฝ๊ธฐ ์์ ๊ณผ ์ฐ๊ธฐ ์์ ์ด ์ถฉ๋ํ์ง ์๋๋ก ํฉ๋๋ค. ์ด๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋์์ฑ์ ๋์ด๊ณ , ์ ๊ธ์ผ๋ก ์ธํ ๋ณ๋ชฉ ํ์์ ์ค์ผ ์ ์์ต๋๋ค.
4. ๋ฐ๋๋ฝ(Deadlock)๊ณผ ํด๊ฒฐ ๋ฐฉ๋ฒ
๐ฏ ๋ฐ๋๋ฝ(Deadlock)์ด๋?
๋ฐ๋๋ฝ์ ๋ ๊ฐ ์ด์์ ํธ๋์ญ์ ์ด ์๋ก๊ฐ ์์ ํ ์์์ ๊ธฐ๋ค๋ฆฌ๋ฉฐ ๋ฌดํ ๋๊ธฐ ์ํ์ ๋น ์ง๋ ํ์์ ๋งํฉ๋๋ค. ์ด๋ฌํ ์ํฉ์ด ๋ฐ์ํ๋ฉด ํธ๋์ญ์ ์ด ์งํ๋์ง ๋ชปํ๊ณ ์์คํ ์ ์ฑ๋ฅ์ด ์ ํ๋ฉ๋๋ค.
๐ฏ ๋ฐ๋๋ฝ ํด๊ฒฐ ๋ฐฉ๋ฒ
- ์๋ฐฉ(Prevention): ํธ๋์ญ์ ์ด ์์์ ์์ฒญํ ๋ ๋ฐ๋๋ฝ์ด ๋ฐ์ํ์ง ์๋๋ก ๋ฏธ๋ฆฌ ๋ฐฉ์งํ๋ ๋ฐฉ๋ฒ์ ๋๋ค. ์๋ฅผ ๋ค์ด, ๋ชจ๋ ํธ๋์ญ์ ์ด ์์์ ๋์ผํ ์์๋ก ์์ฒญํ๋๋ก ๊ท์น์ ์ ํ ์ ์์ต๋๋ค.
๐ ๊ทธ๋ฌ๋, ์ด๋ ํ์ค์ ์ผ๋ก ๋นํจ์จ์ ์ผ ์ ์์ผ๋ฏ๋ก, ํธ๋์ญ์ ๋ค์ด ์์์ ์ ๊ทผํ๋ ์์๋ฅผ ์ผ๊ด๋๊ฒ ์ ์งํ๊ฑฐ๋, ํธ๋์ญ์ ์ ์์ฃผ ์ปค๋ฐํ๋ ๋ฑ์ ๋ฐฉ๋ฒ์ด ๋ฐ๋๋ฝ ์๋ฐฉ์ ๋์์ด ๋ ์ ์์ต๋๋ค.
- ํํผ(Avoidance): ํธ๋์ญ์ ์ด ์์์ ์์ฒญํ ๋ ํ์ฌ ์ํ๋ฅผ ๊ณ ๋ คํ์ฌ ๋ฐ๋๋ฝ์ด ๋ฐ์ํ ๊ฐ๋ฅ์ฑ์ด ์๋์ง ํ๋จํ๊ณ , ๋ฐ์ํ ๊ฐ๋ฅ์ฑ์ด ์์ผ๋ฉด ์์ ํ ๋น์ ๋ณด๋ฅํ๋ ๋ฐฉ๋ฒ์ ๋๋ค.
๐ ์๊ฐ ์คํฌํ๋ฅผ ํ์ฉํ์ฌ ๊ต์ฐฉ ์ํ๋ฅผ ํํผํ๋ ๋ฐฉ๋ฒ์ผ๋ก, Wait-Die ๋ฐฉ์๊ณผ Wound-Wait ๋ฐฉ์์ด ์์ต๋๋ค. Wait-Die ๋ฐฉ์์ ์ค๋๋ ํธ๋์ญ์ ์ด ์์์ ์์ฒญํ๋ฉด ๋๊ธฐํ๊ณ , ์๋ก์ด ํธ๋์ญ์ ์ด ์์์ ์์ฒญํ๋ฉด ํฌ๊ธฐํ๋ ๋ฐฉ์์ ๋๋ค. ๋ฐ๋ฉด, Wound-Wait ๋ฐฉ์์ ์ค๋๋ ํธ๋์ญ์ ์ด ์์์ ์์ฒญํ๋ฉด ์์์ ์ ์ ํ๊ณ , ์๋ก์ด ํธ๋์ญ์ ์ด ์์์ ์์ฒญํ๋ฉด ๋๊ธฐํ๋ ๋ฐฉ์์ ๋๋ค.
- ํ์ง(Detection) ๋ฐ ๋ณต๊ตฌ(Recovery): ๋ฐ๋๋ฝ์ด ๋ฐ์ํ๋์ง ์ฃผ๊ธฐ์ ์ผ๋ก ๊ฒ์ฌํ๊ณ , ๋ฐ๊ฒฌ๋๋ฉด ์ผ๋ถ ํธ๋์ญ์ ์ ์ค๋จ(rollback)ํ์ฌ ๋ฐ๋๋ฝ ์ํ๋ฅผ ํด์ํ๋ ๋ฐฉ๋ฒ์ ๋๋ค.
๐ฅ5. ์ ๊ธ(Lock) ๋ฉ์ปค๋์ฆ
โ 1. ์ ๊ธ์ ๊ธฐ๋ณธ ๊ฐ๋
์ ๊ธ์ ํธ๋์ญ์ ์ด ํน์ ๋ฐ์ดํฐ์ ์ ๊ทผํ๊ฑฐ๋ ์์ ํ ๋, ๋ค๋ฅธ ํธ๋์ญ์ ์ด ํด๋น ๋ฐ์ดํฐ์ ๋์์ ์ ๊ทผํ๊ฑฐ๋ ์์ ํ์ง ๋ชปํ๋๋ก ์ ํํ๋ ๋ฉ์ปค๋์ฆ์ ๋๋ค. ์ด๋ฅผ ํตํด ๋ฐ์ดํฐ์ ๋ฌด๊ฒฐ์ฑ์ ์ ์งํ๊ณ , ์ฌ๋ฌ ํธ๋์ญ์ ์ด ๋์์ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์์ ํ๋ ค ํ ๋ ๋ฐ์ํ ์ ์๋ ์ถฉ๋์ ๋ฐฉ์งํฉ๋๋ค.
โ 2. ์ ๊ธ์ ์ ํ
์ ๊ธ์ ๊ธฐ๋ฅ๊ณผ ๋ชฉ์ ์ ๋ฐ๋ผ ์ฌ๋ฌ ์ ํ์ผ๋ก ๋ถ๋ฅ๋ฉ๋๋ค.
a. ๊ณต์ ์ ๊ธ(Shared Lock, S Lock)
๊ณต์ ์ ๊ธ์ ์ฌ๋ฌ ํธ๋์ญ์ ์ด ๋์์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ ์ ์๋๋ก ํ์ฉํฉ๋๋ค. ๊ทธ๋ฌ๋ ๊ณต์ ์ ๊ธ์ด ๊ฑธ๋ฆฐ ๋ฐ์ดํฐ์ ๋ํด ๋ค๋ฅธ ํธ๋์ญ์ ์ด ์์ ํ๋ ค๋ฉด, ํด๋น ๊ณต์ ์ ๊ธ์ด ํด์ ๋ ๋๊น์ง ๋๊ธฐํด์ผ ํฉ๋๋ค. ์ด๋ ๋ฐ์ดํฐ๋ฅผ ์ฝ๋ ๋์ ๋ค๋ฅธ ํธ๋์ญ์ ์ด ๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝํ ์ ์๋๋ก ํ์ฌ ๋ฐ์ดํฐ์ ์ผ๊ด์ฑ์ ๋ณด์ฅํฉ๋๋ค.
b. ๋ฐฐํ ์ ๊ธ(Exclusive Lock, X Lock)
๋ฐฐํ ์ ๊ธ์ ๋ฐ์ดํฐ๋ฅผ ์์ ํ๊ฑฐ๋ ์ญ์ ํ๋ ค๋ ํธ๋์ญ์ ์ ๋ถ์ฌ๋ฉ๋๋ค. ๋ฐฐํ ์ ๊ธ์ ํ๋ํ ํธ๋์ญ์ ์ธ์๋ ํด๋น ๋ฐ์ดํฐ์ ๋ํ ๋ค๋ฅธ ์ ๊ธ์ ์์ฒญํ ์ ์์ผ๋ฉฐ, ๋ค๋ฅธ ํธ๋์ญ์ ์ ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ฑฐ๋ ์์ ํ ์ ์์ต๋๋ค. ์ด๋ฅผ ํตํด ํธ๋์ญ์ ์ด ๋ฐ์ดํฐ๋ฅผ ์์ ํ๊ฒ ์์ ํ ์ ์๋๋ก ๋ณด์ฅํฉ๋๋ค.
c. ๋๊ด์ ์ ๊ธ(Optimistic Lock)
๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ค์์์ ์ ๊ธ์ด ์๋, ์ ํ๋ฆฌ์ผ์ด์ ์์ค์์ ๋ฒ์ ๊ด๋ฆฌ ๋ฑ์ ํตํด ๋์์ฑ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ์ ๋๋ค. ์ด๋ ํธ๋์ญ์ ์ด ์ถฉ๋ํ์ง ์์ ๊ฒ์ด๋ผ๊ณ ๊ฐ์ ํ๊ณ , ์ปค๋ฐ ์์ ์ ์ถฉ๋ ์ฌ๋ถ๋ฅผ ํ์ธํ์ฌ ๋ฌธ์ ๊ฐ ์์ ๊ฒฝ์ฐ ๋กค๋ฐฑํ๋ ๋ฐฉ์์ ๋๋ค. ์ด๋ฌํ ๋ฐฉ์์ ์ถฉ๋์ด ๋๋ฌผ๊ฒ ๋ฐ์ํ๋ ์๋๋ฆฌ์ค์์ ์ฑ๋ฅ์์ ์ด์ ์ ์ ๊ณตํฉ๋๋ค
โ 3. ์ ๊ธ์ ์ธ๋ถํ(Granularity)
์ ๊ธ์ ์ ์ฉ ๋ฒ์์ ๋ฐ๋ผ ์ธ๋ถํ๋ฉ๋๋ค.
๐นa. ํ ์์ค ์ ๊ธ(Row-Level Lock)
ํน์ ํ์ ๋ํด ์ ๊ธ์ ์ค์ ํฉ๋๋ค. ์ด๋ ๋์ ๋์์ฑ์ ์ ๊ณตํ์ง๋ง, ์ ๊ธ ๊ด๋ฆฌ ์ค๋ฒํค๋๊ฐ ํฝ๋๋ค.
๐นb. ํ์ด์ง ์์ค ์ ๊ธ(Page-Level Lock)
๋ฐ์ดํฐ๋ฒ ์ด์ค ํ์ด์ง ๋จ์๋ก ์ ๊ธ์ ์ค์ ํฉ๋๋ค. ์ด๋ ํ ์์ค๊ณผ ํ ์ด๋ธ ์์ค์ ์ค๊ฐ ์ ๋์ ๋์์ฑ์ ์ ๊ณตํฉ๋๋ค.
๐นc. ํ ์ด๋ธ ์์ค ์ ๊ธ(Table-Level Lock)
์ ์ฒด ํ ์ด๋ธ์ ๋ํด ์ ๊ธ์ ์ค์ ํฉ๋๋ค. ์ด๋ ์ ๊ธ ๊ด๋ฆฌ๊ฐ ๊ฐ๋จํ์ง๋ง, ๋์์ฑ์ด ๋ฎ์์ง ์ ์์ต๋๋ค.
๐นd. ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ค ์ ๊ธ(Database-Level Lock)
์ ์ฒด ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ํด ์ ๊ธ์ ์ค์ ํฉ๋๋ค. ์ด๋ ์ฃผ๋ก ๊ด๋ฆฌ ์์ ์ ์ฌ์ฉ๋๋ฉฐ, ๋์์ฑ์ด ๋งค์ฐ ๋ฎ์์ง๋๋ค.
โ 4. ์ ๊ธ์ ๊ตฌํ ๋ฐ ๊ด๋ฆฌ
์ ๊ธ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์คํ ์์ ์๋์ผ๋ก ๊ด๋ฆฌ๋์ง๋ง, ๊ฐ๋ฐ์๋ ์ ๊ธ์ ๋์ ๋ฐฉ์์ ์ดํดํ๊ณ , ํ์์ ๋ฐ๋ผ ๋ช ์์ ์ผ๋ก ์ ๊ธ์ ์ ์ดํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ํธ๋์ญ์ ๊ฒฉ๋ฆฌ ์์ค์ ์ค์ ํ๊ฑฐ๋, ํน์ ์ฟผ๋ฆฌ์ ๋ํด ๋ช ์์ ์ผ๋ก ์ ๊ธ์ ์ค์ ํ ์ ์์ต๋๋ค.
โ 5. ์ ๊ธ๊ณผ ์ฑ๋ฅ
์ ๊ธ์ ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ์ ์ ์งํ๋ ๋ฐ ํ์์ ์ด์ง๋ง, ๊ณผ๋ํ ์ ๊ธ์ด๋ ๋ถ์ ์ ํ ์ ๊ธ ๊ด๋ฆฌ๋ก ์ธํด ์ฑ๋ฅ ์ ํ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค. ๋ฐ๋ผ์ ์ ๊ธ์ ์ ํ๊ณผ ๋ฒ์๋ฅผ ์ ์ ํ๊ฒ ์ค์ ํ๊ณ , ํธ๋์ญ์ ์ ์ ์ํ๊ฒ ์ฒ๋ฆฌํ์ฌ ์ ๊ธ์ด ์ฅ์๊ฐ ์ ์ง๋์ง ์๋๋ก ํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
๐ ์ ๊ธ ๊ฒฝํฉ(Lock Contention): ์ฌ๋ฌ ํธ๋์ญ์ ์ด ๋์์ ๋์ผํ ์์์ ๋ํด ์ ๊ธ์ ์์ฒญํ ๋ ๋ฐ์ํ๋ ๊ฒฝํฉ ์ํฉ์ ์์คํ ์ฑ๋ฅ์ ๋ถ์ ์ ์ธ ์ํฅ์ ๋ฏธ์น ์ ์์ต๋๋ค. ์ด๋ฅผ ์ต์ํํ๊ธฐ ์ํด ํธ๋์ญ์ ์ ๋ฒ์๋ฅผ ์ต์ํํ๊ณ , ํ์ํ ์์์๋ง ์ ๊ธ์ ์ค์ ํ๋ฉฐ, ํธ๋์ญ์ ์ ์ ์ํ๊ฒ ์ฒ๋ฆฌํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
๐ฏ ๋ถ์ฐ ํ๊ฒฝ์์์ ์ ๊ธ ๊ด๋ฆฌ
๋ถ์ฐ ์ ๊ธ(Distributed Lock): ์ฌ๋ฌ ๋์ ์๋ฒ๊ฐ ๋ถ์ฐ ํ๊ฒฝ์์ ๋์ผํ ์์์ ์ ๊ทผํ ๋ ๋์์ฑ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋ถ์ฐ ์ ๊ธ ๋ฉ์ปค๋์ฆ์ด ์ฌ์ฉ๋ฉ๋๋ค. ์๋ฅผ ๋ค์ด, Redis์ ๊ฐ์ ์ธ๋ฉ๋ชจ๋ฆฌ ๋ฐ์ดํฐ ์ ์ฅ์๋ฅผ ํ์ฉํ์ฌ ๋ถ์ฐ ์ ๊ธ์ ๊ตฌํํ ์ ์์ต๋๋ค.
โ 6. ๋ฐ๋๋ฝ(Deadlock)๊ณผ ์ ๊ธ
์ ๊ธ ๋ฉ์ปค๋์ฆ์ ์ฌ์ฉํ ๋ ๋ฐ๋๋ฝ์ด ๋ฐ์ํ ์ ์์ต๋๋ค. ๋ฐ๋๋ฝ์ ๋ ๊ฐ ์ด์์ ํธ๋์ญ์ ์ด ์๋ก๊ฐ ์์ ํ ์ ๊ธ์ ๊ธฐ๋ค๋ฆฌ๋ฉฐ ๋ฌดํ ๋๊ธฐ ์ํ์ ๋น ์ง๋ ํ์์ ๋๋ค. ์ด๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์คํ ์ ๋ฐ๋๋ฝ ๊ฐ์ง ๋ฐ ํด์ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ๋ฉฐ, ๊ฐ๋ฐ์๋ ํธ๋์ญ์ ์ ์ ๊ธ ์์๋ฅผ ์ผ๊ด๋๊ฒ ์ ์งํ๊ณ , ํธ๋์ญ์ ์ ๋ฒ์๋ฅผ ์ต์ํํ์ฌ ๋ฐ๋๋ฝ ๋ฐ์ ๊ฐ๋ฅ์ฑ์ ์ค์ผ ์ ์์ต๋๋ค.
์ ๊ธ ๋ฉ์ปค๋์ฆ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์คํ ์ ๋์์ฑ ์ ์ด์ ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ ์ ์ง์ ํต์ฌ์ ์ธ ์ญํ ์ ํฉ๋๋ค. ๊ฐ๋ฐ์๋ ์ด๋ฌํ ๋ฉ์ปค๋์ฆ์ ์ดํดํ๊ณ ์ ์ ํ๊ฒ ํ์ฉํ์ฌ ํจ์จ์ ์ด๊ณ ์์ ํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์คํ ์ ๊ตฌ์ถํ ์ ์์ต๋๋ค.