ํธ๋์ญ์ (Transaction)์ด๋?
Pessimistic Lock(์ ์ ์ ๊ธ)
- Thread1์ด ์ฌ์ฉํ๋ Resource(์์)์ Lock(์ ๊ธ)ํฉ๋๋ค.
- Thread2๋ Resource(์์)์ ์ ๊ทผํ๋ ค๊ณ ํ๋ฉด unLock์ด ๋ ๋๊น์ง ๊ธฐ๋ค๋ ค์ผ ํฉ๋๋ค.
์ ์ ์ ๊ธ์๋ ๋ฌธ์ ๊ฐ ์์๊น์?
- Thread1์ด Resource A๋ฅผ ์ ๊ทธ๊ณ Resource B๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด ์์ฒญํ ์ํฉ
- Thread2์ด Resource B๋ฅผ ์ ๊ทธ๊ณ Resource A๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด ์์ฒญํ ์ํฉ
๋ ์ฝ๊ฒ ์ค๋ช ํ์๋ฉด?
- ์๋ก๊ฐ ๊ฐ์ง๊ณ ์๋ ๊ฒ์ ๋์ง ์๊ณ ์๋๊ฐ ๊ฐ์ง ๊ฒ์ ๋บ๊ธฐ ์ํด ๋ ธ๋ ฅํ์ง๋ง.
- ๋๋์ง ์๋ ์ธ์์ ๋๋ค.
์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด์ ?
- Timeout๋ฅผ ํตํด ๋ฌดํ ๋๊ธฐ ์ํ๋ฅผ ๋ฐฉ์งํ๊ณ ์์ต๋๋ค.
- Lock Timeout
- Query Timeout
- Connection Timeout
- ์ฌ์ฉํ๋ DBMS์ ๋ฐ๋ผ ์ ๋ต์ด ๋ค๋ฅด๊ธฐ์ DBMS๋ฅผ ํ์ธํด์ผ ํฉ๋๋ค.
์ ์ ์ ๊ธ์ผ๋ก ํ ์ ์๋ ์ํฉ
- ์ด์์๊ฐ ์์คํ ์์ ๋ฐฐ์ก์ง๋ฅผ ๊ฐ์ ธ์ต๋๋ค.
- ์ด์์๊ฐ ์ํ์ ๋ฐฐ์กํ๋ฌ ๊ฐ ์ฌ์ด์ ๊ณ ๊ฐ์ ๋ฐฐ์ก์ง๋ฅผ ๋ณ๊ฒฝํ์ฃ .
- ์ด์์๋ ์์ ์ ๋ฐฐ์ก์ง๋ก ๋ฐฐ์ก์ ์งํํ๊ณ ๋ฐฐ์ก ์ํ ๋ณ๊ฒฝ์ ์์ฒญํฉ๋๋ค.
๊ทธ๋ฌ๋ฉด ์ด์์๋ ๊ณ ๊ฐ์ ์ต์ ๋ฐฐ์ก์ง๊ฐ ์๋ ์์ ์ ๋ฐฐ์ก์ง๋ก ๋ฐฐ์กํด๋ฒ๋ฆฌ๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํฉ๋๋ค.
Optimistic Lock(๋น์ ์ ์ ๊ธ)
- ๋ณ๊ฒฝํ ๋ฐ์ดํฐ๋ฅผ ์ค์ DBMS์ ๋ฐ์ํ๋ ์์ ์ ๋ณ๊ฒฝ ๊ฐ๋ฅ ์ฌ๋ถ๋ฅผ ํ์ธํ๋ ๋ฐฉ์์ ๋๋ค.
- ๋ฐ์ดํฐ์ version ์ซ์๋ฅผ ๋ถ์ฌํฉ๋๋ค.
- ๋ฐ์ดํฐ๊ฐ ๋ณ๊ฒฝ์ด ๋ฐ์ํ ๊ฒฝ์ฐ ์์ฒญ version๋ฒํธ์ ์์คํ version๋ฒํธ๊ฐ ์ผ์นํ๋์ง ํ์ธํฉ๋๋ค.
Passimistic Offline Lock(์คํ๋ผ์ธ ์ ์ ์ ๊ธ)
- Application Level์์ Lock์ ๊ฑฐ๋ ๋ฐฉ๋ฒ์ผ๋ก ์๊ฐ๋ฉ๋๋ค.
- ํ ์ฌ๋์ด ๋ธ๋ก๊ทธ์ ๊ธ์ ์์ ํ๊ณ ์๋ค๋ฉด.
- ๋ค๋ฅธ ์ฌ๋๋ค์ด ๊ธ ์์ ์ ์ํด ์ ๊ทผํ๋ค๋ฉด Lock ์ํ๋ฅผ ๋ณด์ฌ์ฃผ๋ฉฐ ์๋ฌ ํ์ด์ง๋ฅผ ๋ฐํํฉ๋๋ค.
- ์ฌ๋ฌ ํธ๋์ญ์ ์ ๊ฑธ์ณ ๋ฐ์ดํฐ ๋ณ๊ฒฝ์ ๋ง์ต๋๋ค.
- ์ฒซ๋ฒ์งธ ํธ๋์ญ์ ์์ ๋ ์ด์ ์๋ฌด ํ๋์ ํ์ง ์์ ์ ์๊ธฐ ๋๋ฌธ์ ์ ๊ธ์ ์ ํจ ์๊ฐ์ ๊ฐ์ ธ์ผ ํฉ๋๋ค.
- ๋จ์ .
- ์ฝ๋ ๋ณต์ก๋ ๋์ต๋๋ค.
์ ๋ฆฌํ๋ฉฐ
์ ์ ์ ๊ธ๊ณผ ๋น์ ์ ์ ๊ธ์ ์ ํํ๋ ๊ฐ์ฅ ์ค์ํ ๊ธฐ์ค์ ์ถฉ๋์ ๋น๋์ ์ฌ๊ฐ๋๋ค. ์ถฉ๋์ด ์์ฃผ ๋ฐ์ํ์ง ์๊ฑฐ๋ ๊ทธ ๊ฒฐ๊ณผ๊ฐ ๊ทธ๋ฆฌ ์ฌ๊ฐํ์ง ์๋ค๋ฉด ๋ ๋์ ๋์์ฑ์ ์ ๊ณตํ๊ณ ๊ตฌํํ๊ธฐ๊ธฐ๋ ์ฌ์ด ๋น์ ์ ์ ๊ธ์ ์ ํํด์ผ ํ๋ค. ๊ทธ๋ฌ๋ ์ถฉ๋์ ๊ฒฐ๊ณผ๊ฐ ์ฌ์ฉ์์๊ฒ ์ฌ๊ฐํ ๊ฒฝ์ฐ์๋ ์ ์ ์ ๊ธ์ ์ฌ์ฉํด์ผ ํ๋ค. - ๋งํดํ์ธ๋ฌ ์ . ์ํฐํ๋ผ์ด์ฆ ์ ํ๋ฆฌ์ผ์ด์ ์ํคํ ์ฒ ํจํด
- ๋ฌธ์ ์ ๋ํด ์ดํดํ๊ณ Lock ์ ๋ต์ ์ ํํ๋ ๊ฒ์ด ์ต์ ์ ๋๋ค.