์ ๋ฒ ๊ธ์์๋ ๊ธฐ๋ณธ์ ์ธ ๋ฝ ๊ฐ๋ & DB ๋ด๋ถ ๋ฝ ๊ตฌ์กฐ ์ ๋ํด์ ์์๋ณด์๋๋ฐ์
์ด๋ฒ์๋ ์ค์ง์ ์ผ๋ก ์ฌ์ฉ๋๋ ๋ฝ๋ค์ธ ๋๊ด์ ๋ฝ, ๋น๊ด์ ๋ฝ, ๋ถ์ฐ๋ฝ, ๋ฐ๋๋ฝ ์ ๋ํด์ ์์๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค !
1-1. ๋๊ด์ ๋ฝ
๋๊ด์ ๋ฝ์ ์ด๋ฆ์์ ์ ์ ์๋ฏ์ด ์ถฉ๋์ด ๋ฐ์ํ์ง ์๋๋ค๊ณ ๋๊ด์ ์ผ๋ก ๊ฐ์ ํ๋ ๋ฝ ๋ฐฉ์ ์ ๋๋ค.
- DB ๊ฐ ์ ๊ณตํ๋ ๋ฝ ๊ธฐ๋ฅ์ด ์๋๋ผ, ์ ํ๋ฆฌ์ผ์ด์ ๋ ๋ฒจ์์ ๋ฒ์ ๊ด๋ฆฌ ๊ธฐ๋ฅ์ ํตํด ์ถฉ๋์ ๊ฐ์งํ๊ณ ์ฒ๋ฆฌํฉ๋๋ค
- ํธ๋์ญ์ ์ ์ปค๋ฐํ๋ ์์ ์ ์ถฉ๋ ์ฌ๋ถ๋ฅผ ํ์ธํ๋ฏ๋ก, ์ต์ข ์ ๋ฐ์ดํธ ๊ณผ์ ์์๋ง ๋ฝ์ ์ ์ ํ๊ฒ ๋ฉ๋๋ค
- ์ด๋ฅผ ํตํด ๋ฝ ์ ์ ์๊ฐ์ ์ต์ํํ๊ณ , ๋์์ฑ์ ๋์ผ ์ ์์ต๋๋ค
์ค๋ช ์ ํตํด์๋ ๋ฐ๋ก ์ดํด๊ฐ ์ด๋ ต๊ธฐ ๋๋ฌธ์ ์ค์ ์์๋ฅผ ๋ค์ด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค
์ ์ฐฉ์์ผ๋ก ํฐ์ผ์ ์๋งคํ๋ ค๋ ์ํฉ์์ ๋ ์ฌ๋ (A, B) ๊ฐ ๊ฑฐ์ ๋์์ ์๋งค ๋ฒํผ์ ๋๋ ์ต๋๋ค !
์๋งค ๋ฒํผ์ ๋๋ ๊ธฐ๋๋ฌธ์ A ์ B ๊ฐ์ ํธ๋์ญ์ ์ ์์ํฉ๋๋ค !
๊ทธ๋ฆฌ๊ณ A 10 ์ด์ ๋ํด์ ROW ์ ๋ณด์ ๋ฒ์ ์ ํ์ธํฉ๋๋ค
์์ง๊น์ง ์๋งคํ ์ฌ๋์ด ์๊ธฐ ๋๋ฌธ์ A10 ์ ์ํ๋ ์์ฝ ๊ฐ๋ฅ, version ์ 1 ๋ก ๋ํ๋ฉ๋๋ค
A ๊ฐ B ๋ณด๋ค ์ด์ง ๋ ๋จผ์ ํด๋ฆญํด์ ๋ชจ๋ ๊ณผ์ ์ ์๋ฃ ํ
A 10 ์ด์ ๋ํ ์ ๋ณด๋ฅผ ์์ฝ ์๋ฃ ๊ทธ๋ฆฌ๊ณ version ๋ 2๋ก ์ ๋ฐ์ดํธ ํ๋ค์ !
๊ทธ๋ฆฌ๊ณ ํ๋ฐ ๋ฆ์ B ๋ ์ปค๋ฐ ์์ ์ ํด๋น ์ข์์ ๋ํ ROW ๋ฅผ ์ ๋ฐ์ดํธํ๊ธฐ ์ํด์ version ์ ์ฒดํฌํฉ๋๋ค
์ด๋ ? ๊ทผ๋ฐ ์ฒ์ ํ์ธํ version ์ธ 1 ๊ณผ ๋ค๋ฅธ 2 ๋ผ๊ณ DB ๊ฐ ์๋ ค์ฃผ๋ค์ !
๊ทธ๋ฌ๋ฉด B ๋ ์์ธ๋ฅผ ๋ฐ์์ํค๊ณ ์ ํ๋ฆฌ์ผ์ด์ ์์ ํ์ฒ๋ฆฌ๋ฅผ ํด์ค๋๋ค !
์ด๋ฅผ ํตํด์ A 10 ์ด์ ๋ํด์ ์ ํฉ์ฑ์ ์ ์งํ ์ ์์๋ค์ !
1-2. JPA ์์ ๋๊ด์ ๋ฝ ์ฌ์ฉํ๊ธฐ
JPA ์์๋ @Version ์ ์ฌ์ฉํด์ ๋๊ด์ ๋ฝ์ ์ฌ์ฉํ ์ ์์ต๋๋ค
๋๊ด์ ๋ฝ์ด ๋ฐ์ํ๋ ๊ฒฝ์ฐ ObjectOptimisticLockingFailureException ์์ธ๊ฐ ๋ฐ์ํ๊ณ ,
ํด๋น ์๋ฌ๋ฅผ catch ํด์ ์ดํ๋ฆฌ์ผ์ด์ ์์ ํ์ฒ๋ฆฌํด์ฃผ๋ฉด ๋ฉ๋๋ค !
2-2. ๋น๊ด์ ๋ฝ
๋น๊ด์ ๋ฝ์ ๋๊ด์ ๋ฝ๊ณผ๋ ๋ค๋ฅด๊ฒ ์ถฉ๋์ด ๋ฐ์ํ๋ค๊ณ ๋น๊ด์ ์ผ๋ก ๊ฐ์ ํ๋ ๋ฝ ๋ฐฉ์์ ๋๋ค
- ๋น๊ด์ ๋ฝ์ DB๊ฐ ์ ๊ณตํ๋ ๋ฝ ๊ธฐ๋ฅ์ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ ๊ธ(S-Lock, X-Lock) ์ฒ๋ฆฌํฉ๋๋ค.
- ํธ๋์ญ์ ์ด ์์๋๋ฉด S-Lock ๋๋ X-Lock์ ์ค์ ํ๊ณ , ๋ฐ์ดํฐ๋ฅผ ์์ ํ ๋ ์ฆ์ ์ถฉ๋ ์ฌ๋ถ๋ฅผ ๊ฐ์งํ ์ ์์ต๋๋ค. (๋์์ฑ ๋ฌธ์ )
- ๋ฐ์ดํฐ ์์ ์, ํธ๋์ญ์ ์ถฉ๋์ ๋ฐ๋ก ์ ์ ์๊ธฐ ๋๋ฌธ์ ๋ฐ์ดํฐ์ ์ผ๊ด์ฑ์ ์ฝ๊ฒ ๋ณด์ฅํ ์ ์์ง๋ง ์ฑ๋ฅ์ ์ํฅ์ ๋ฏธ์น ์ ์์ต๋๋ค.
- ๊ต์ฐฉ ์ํ(Deadlock) ๋ฌธ์ ๊ฐ ์์ฃผ ๋ฐ์ํ ์ ์๋๋ฐ, ์ด๋ ๋ ํธ๋์ญ์ ์ด ์๋ก ๋ค๋ฅธ ์์์ ์ ๊ทธ๊ณ ๋๊ธฐ ์ํ์ ๋น ์ง๋ ๊ฒฝ์ฐ์ ๋๋ค.
๋น๊ด์ ๋ฝ๋ ๋๊ด์ ๋ฝ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ์ ์ฐฉ์์ผ๋ก ํฐ์ผ์ ์๋งคํ๋ ค๋ ์ํฉ์์ ๋ ์ฌ๋(A, B) ์ ์์๋ก ๋ค์ด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค !
A ์ B ๊ฐ ๋ A 10 ์ด์ ์์ฝํ๋ ค๊ณ ๋์์ ๋ฒํผ์ ๋๋ ์ต๋๋ค
A ๊ฐ ์ด์ง ๋ ๋จผ์ ํด๋ฆญํด์ ํธ๋์ญ์ ์ ์์ํ๊ธฐ ์ ์ ํด๋น row ์ ๋ํด X-LOCK ์ ๊ฑธ์ด์ค๋๋ค
ํ๋ฐ ๋ฆ์ B ๊ฐ ํธ๋์ญ์ ์ ์์ํ ๋ ํด๋น row ์ ๋ํด์ X-LOCK ์ ๊ฑธ๋ ค๊ณ ์๋ํ์ง๋ง, ์ด๋ฏธ ๋ฝ์ด ๊ฑธ๋ ค์์ต๋๋ค !
B ๋ ์ด๋ฏธ ์ ๊ฒจ์๊ธฐ ๋๋ฌธ์ ๊ธฐ๋ค๋ฆฝ๋๋ค
A ๊ฐ ์์ฝ์ ์ฑ๊ณต์ ์ผ๋ก ์งํํ๊ณ , A 10 ์ ๋ํด์ ๋ฐ์ดํฐ๋ฅผ ์์ฝ ์๋ฃ๋ก ์ ๋ฐ์ดํธํจ๊ณผ ๋์์ ๋ฝ์ ํด์ ์์ผ์ค๋๋ค
๊ธฐ๋ค๋ฆฌ๋ B ๊ฐ ๋ฝ์ ํ๋ํ์ง๋ง ,,,,, ์ด๋ฏธ ๋ฐ์ดํฐ๋ ์์ฝ ์๋ฃ๋ก ๋ณ๊ฒฝ๋ ์ํ์ด๊ธฐ ๋๋ฌธ์ ์์ฝ์ ์คํจํ๊ฒ ๋ฉ๋๋ค
3-1. ๊ต์ฐฉ ์ํ (Deadlock)
์์์ ์ ๊น ์๊ธฐํ๋ ๊ฒ์ฒ๋ผ ๋น๊ด์ ๋ฝ์ ๋ฐ์ดํฐ์ ์ผ๊ด์ฑ์ ์ฝ๊ฒ ๋ณด์ฅํ ์ ์์ง๋ง, ๊ต์ฐฉ์ํ ๋ฌธ์ ๊ฐ ์์ฃผ ๋ฐ์ํ๊ฒ ๋ฉ๋๋ค
๊ทธ๋ ๋ค๋ฉด ๊ต์ฐฉ์ํ๋ ๋ฌด์์ผ๊น์ ?
๊ต์ฐฉ์ํ๋ ๋ ํธ๋์ญ์ ์ด ์์ํ ๊ธฐ๋ค๋ฆฌ๊ฒ ๋์ด ์ฒ๋ฆฌ๊ฐ ์งํ๋์ง ์๋ ์ํ๋ฅผ ๊ฐ๋ฆฌํต๋๋ค
์์ํ ๊ธฐ๋ค๋ฆฌ๋ ๊ฑด ๋ ํธ๋์ญ์ ์ด ์๋ก ๋ค๋ฅธ ์์์ ๋ํด ๋ฝ์ ๊ฑธ๊ณ , ๊ฐ ํธ๋์ญ์ ์ด ์๋๋ฐฉ์ด ๊ฑธ๊ณ ์๋ ๋ฝ์ ๊ธฐ๋ค๋ฆฌ๊ณ ์๋ ์ํฉ์์ ๋ฐ์ํ๊ฒ ๋๋๋ฐ์ !
๋ฐ๋๋ฝ์ด ๋ฐ์๋๋ ์๋๋ฆฌ์ค๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค
ํธ๋์ญ์ A๊ฐ Resource1 ๋ฐ์ดํฐ๋ฅผ ์์ ํ๋ ค๊ณ X-Lock์ ๊ฑธ๊ณ , ๊ทธ ํ Resource2 ๋ฐ์ดํฐ๋ฅผ ์์ ํ๋ ค๊ณ ํฉ๋๋ค.
ํธ๋์ญ์ B๋ Resource2 ๋ฐ์ดํฐ๋ฅผ ์์ ํ๋ ค๊ณ X-Lock์ ๊ฑธ๊ณ , ๊ทธ ํ Resource1 ๋ฐ์ดํฐ๋ฅผ ์์ ํ๋ ค๊ณ ํฉ๋๋ค.
ํธ๋์ญ์ A ๊ฐ Resource1 ์ ๋ํด์ ๋ฝ์ ๊ฐ์ง๊ณ ์๋ ์ํฉ์์ Resource 2 ๋ฅผ ์์ ํ๊ธฐ ์ํด์ ์ ๊ทผํฉ๋๋ค
ํ์ง๋ง, Resource 2 ๋ ํธ๋์ญ์ B ๊ฐ ๋ฝ์ ๊ฐ์ง๊ณ ์์์ผ๋ก ๋๊ธฐํฉ๋๋ค
๋ง์ฐฌ๊ฐ์ง๋ก ํธ๋์ญ์ B ๊ฐ Resource2 ์ ๋ํด์ ๋ฝ์ ๊ฐ์ง๊ณ ์๋ ์ํฉ์์ Resource 1 ๋ฅผ ์์ ํ๊ธฐ ์ํด์ ์ ๊ทผํฉ๋๋ค
ํ์ง๋ง, Resource 1 ๋ ํธ๋์ญ์ A ๊ฐ ๋ฝ์ ๊ฐ์ง๊ณ ์์์ผ๋ก ๋๊ธฐํฉ๋๋ค
๊ทธ๋ฌ๋ฉด ํธ๋์ญ์ A ์ ํธ๋์ญ์ B ๋ Resource 1๊ณผ Resource 2์ ๋ํด์ ๋๊ตฌ๋ ์ธ ์ ์๋ ์ํฉ์ด๊ธฐ ๋๋ฌธ์
๊ต์ฐฉ์ํ (Deadlock) ์ ์ง๋ฉดํ๊ฒ ๋ฉ๋๋ค !!!!!!!!
3-2. ๊ต์ฐฉ ์ํ ๋ฐ์์ ๋ค ๊ฐ์ง ์กฐ๊ฑด
๋ฐ๋๋ฝ์ ๋ค์ ๋ค ๊ฐ์ง ์กฐ๊ฑด์ด ๋์์ ์ฑ๋ฆฝํ ๋ ๋ฐ์ํฉ๋๋ค.
์ด ๋ค ๊ฐ์ง ์กฐ๊ฑด์ด ์ถฉ์กฑ๋๋ฉด, ์์คํ ๋ด์์ ์์์ ๋ํ ๋ฌดํ ๋๊ธฐ ์ํ๊ฐ ๋ฐ์ํ๊ณ , ํด๊ฒฐ๋์ง ์์ผ๋ฉด ์์คํ ์ด ๋ฉ์ถ๊ฒ ๋ฉ๋๋ค.
์ด๋ฌํ ์กฐ๊ฑด ์ค ํ๋๋ผ๋ ์ฑ๋ฆฝํ์ง ์์ผ๋ฉด ๋ฐ๋๋ฝ์ ์๋ฐฉํ ์ ์์ต๋๋ค.
์กฐ๊ฑด | ์ค๋ช | ํด๊ฒฐ ๋ฐฉ๋ฒ |
์ํธ ๋ฐฐ์ | ํ ๋ฒ์ ํ๋์ ํ๋ก์ธ์ค๋ง ์์์ ์ฌ์ฉํ ์ ์๋ค | ์ฌ๋ฌ ํ๋ก์ธ์ค๊ฐ ์์์ ๊ณต์ ํ ์ ์๋๋ก ์ค์ ํ๊ฑฐ๋, ์์์ ๋ณต์ ๋ฅผ ํตํด ์ฌ๋ฌ ํ๋ก์ธ์ค๊ฐ ๋์์ ์ฌ์ฉํ ์ ์๊ฒ ํฉ๋๋ค. |
์ ์ ๋๊ธฐ | ์์์ ํ ๊ฐ ์ด์ ๋ณด์ ํ๊ณ ์๋ ์ํ์์ ๋ค๋ฅธ ์์์ ๊ธฐ๋ค๋ฆฌ๋ ๊ฒฝ์ฐ | ํ๋ก์ธ์ค๊ฐ ์คํ๋๊ธฐ ์ ์ ํ์ํ ๋ชจ๋ ์์์ ํ ๋นํ๋๋ก ํฉ๋๋ค. ์ฆ, ํ์ํ ์์์ ํ ๋ฒ์ ์์ฒญํ๊ณ , ๊ธฐ๋ค๋ฆผ ์์ด ๋ชจ๋ ์์์ ํ๋ณดํ๋ ๋ฐฉ์์ ๋๋ค. |
๋น์ ์ | ํ ๋ฒ ํ ๋น๋ ์์์ ๊ฐ์ ๋ก ๋นผ์์ ์ ์๋ค. | ์์์ ์์ฒญํ๋ ํ๋ก์ธ์ค๊ฐ ๋ค๋ฅธ ์์์ ์๊ตฌํ ๋, ์ด๋ฏธ ์ ์ ํ๊ณ ์๋ ์์์ ๋ฐ๋ฉํ๊ฒ ํฉ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ์์์ ์ฌํ ๋น๋์ด ๋ค๋ฅธ ํ๋ก์ธ์ค๊ฐ ์ด์ฉํ ์ ์๊ฒ ๋ฉ๋๋ค. |
์ํ ๋๊ธฐ | ๋๊ธฐ ํ๋ก์ธ์ค์ ์งํฉ์ด ์ํ ํํ๋ก ์์์ ๊ธฐ๋ค๋ฆฌ๊ณ ์๋ค. | ์์์ ๊ณ ์ ํ ๋ฒํธ๋ฅผ ํ ๋นํ๊ณ , ํ๋ก์ธ์ค๊ฐ ์์์ ์์ฒญํ ๋ ๋ฒํธ ์์๋๋ก ์์ฒญํ๊ฒ ํจ์ผ๋ก์จ ์ํ ๋๊ธฐ๋ฅผ ์๋ฐฉํฉ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ์ํ ํํ๋ก ์์์ ๋๊ธฐํ๋ ์ํ๋ฅผ ๋ฐฉ์งํ ์ ์์ต๋๋ค. |
4-1. ๋ถ์ฐ๋ฝ
์๋ฒ๊ฐ ์ฌ๋ฌ ๋์ผ ๋ ๋์ผํ ๋ฐ์ดํฐ์ ๋ํ ๋๊ธฐํ๋ฅผ ๋ณด์ฅํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
์ด๋, ์ฌ๋ฌ ์๋ฒ์์ ๋์์ ๋์ผํ ์์์ ์ ๊ทผํ๊ฑฐ๋ ์์ ํ๋ ค๊ณ ํ ๋, ์ถฉ๋์ ๋ฐฉ์งํ๋ ๋ฐฉ๋ฒ์ผ๋ก ๋ถ์ฐ ๋ฝ์ ์ฌ์ฉํฉ๋๋ค.
๋ถ์ฐ๋ฝ์ ์ฌ๋ฌ ์๋ฒ๋ค๊ฐ ๋๊ธฐํ๋ ์ฒ๋ฆฌ๊ฐ ํ์ํ๊ณ , ๊ณตํต๋ ๋ฝ์ ์ ์ฉํด์ผ ํ๊ธฐ ๋๋ฌธ์ ๊ณตํต๋ ๋ฐ์ดํฐ ์ ์ฅ์๋ฅผ ์ฌ์ฉํด ๋ถ์ฐ๋ฝ์ ์ด์ฉํฉ๋๋ค. Redis ๋ MySQL ์ ์ฌ์ฉํด์ ๋ถ์ฐ๋ฝ์ ์ฌ์ฉํ ์ ์์ต๋๋ค !
์๋ฅผ ๋ค์ด Redis ๋ฅผ ์ฌ์ฉํด์ ๋ถ์ฐ๋ฝ์ ์ฌ์ฉํ๋ ๊ณผ์ ์ ์์๋ก ๋ค์ด๋ณด๊ฒ ์ต๋๋ค!
์๋ฒ A๊ฐ ์์์ ์ ๊ทผํ๋ ค๊ณ ํ ๋, Redis์ ํด๋น ์์์ ๋ํ ๋ฝ์ ์์ฒญํฉ๋๋ค.
Redis๋ ์์์ ๋ฝ์ด ๊ฑธ๋ ค ์๋์ง ํ์ธํ๊ณ , ๋ฝ์ด ์๋ค๋ฉด ํด๋น ์์์ ๋ฝ์ ๊ฑธ์ด ์๋ฒ A์๊ฒ ์์์ ์ฌ์ฉํ ์ ์๋๋ก ํ์ฉํฉ๋๋ค.
์๋ฒ A๊ฐ ์์ ์ฌ์ฉ์ ๋ง์น ํ, Redis์ ๋ฝ์ ํด์ ํ์ฌ ๋ค๋ฅธ ์๋ฒ๊ฐ ํด๋น ์์์ ์ ๊ทผํ ์ ์๋๋ก ํฉ๋๋ค.
๋ฝ ๊ฐ๋ & DB ๋ด๋ถ ๋ฝ ๊ตฌ์กฐ
๊ธฐ๋ณธ์ ์ธ ๋ฝ ๊ฐ๋ & DB ๋ด๋ถ ๋ฝ ๊ตฌ์กฐ
'๐๏ธ ๋ฐ์ดํฐ๋ฒ ์ด์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
ํธ๋์ญ์ ์ด๋ ? (0) | 2025.03.15 |
---|---|
Lock ์ด ์ ๋ฆฌ1 - ๊ธฐ๋ณธ์ ์ธ ๋ฝ ๊ฐ๋ & DB ๋ด๋ถ ๋ฝ ๊ตฌ์กฐ (0) | 2025.02.14 |
์ธ๋ฑ์ค์ ์ข ๋ฅ์ ๋ํด์ ์์๋ณด์ ! (0) | 2025.02.01 |
DB ์ธ๋ฑ์ค ๊ฐ๋ ์ ๋ฆฌ: ์ ์ฅ ๊ตฌ์กฐ, ์์ฑ ๊ณผ์ , ๋์ ์๋ฆฌ (1) | 2024.12.12 |