ํธ๋์ ์ ๊ฒฉ๋ฆฌ ์์ค์ด๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๋์์ ์คํ๋๋ ์ฌ๋ฌ ํธ๋์ ์ ๊ฐ์ ๋ ๋ฆฝ์ฑ์ ๋ณด์ฅํ๋ ์ ๋์ ๋๋ค.
์ฆ, ์ฌ๋ฌ ํธ๋์ ์ ์ด ๋์์ ์ํ๋ ๋, ํน์ ํธ๋์ ์ ์ด ๋ค๋ฅธ ํธ๋์ ์ ์์ ๋ณ๊ฒฝ ๋๋ ์กฐํํ๋ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ ์ ์๊ฒ ํ์ฉํ ์ง ์ฌ๋ถ๋ฅผ ๊ฒฐ์ ํ๋ ๋จ๊ณ์ ๋๋ค.
๊ฒฉ๋ฆฌ ์์ค์ด ๋์ ์์๋๋ก SERIALIZABLE, REPEATABLE READ, READ COMMITTED, READ UNCOMMITED๊ฐ ์กด์ฌํฉ๋๋ค. ๊ฒฉ๋ฆฌ ์์ค์ด ๋์์๋ก ์ฑ๋ฅ์ ์ ํ๋์ง๋ง ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ์ด ๋ณด์ฅ๋๊ณ , ๊ฒฉ๋ฆฌ ์์ค์ด ๋ฎ์์๋ก ์ฑ๋ฅ์ ์ข์์ง์ง๋ง ๋ฐ์ดํฐ ์ผ๊ด์ฑ์ด ๋ฎ์์ง๋๋ค.
[ ๊ฒฉ๋ฆฌ ์์ค ]
SERIALIZABLE ์ ๊ฐ์ฅ ๋์ ์์ค์ ๊ฒฉ๋ฆฌ๋ก, ํธ๋์ ์ ์ ์์ฐจ์ ์ผ๋ก ์คํํฉ๋๋ค. ๋ค๋ฅธ ์ฌ์ฉ์๋ ํธ๋์ญ์ ์์ญ์ ํด๋นํ๋ ๋ฐ์ดํฐ์ ๋ํด ์์ ๋ฐ ์ ๋ ฅ์ด ๋ถ๊ฐ๋ฅํฉ๋๋ค. ๋ฐ๋ผ์ ๋ชจ๋ ์ด์ ํ์์ ๋ฐฉ์งํ๋ฉฐ, ๊ฐ์ฅ ๋์ ๋ฐ์ดํฐ ์ผ๊ด์ฑ์ ๋ณด์ฅํฉ๋๋ค. ํ์ง๋ง ๋์์ฑ์ด ๋ฎ์์ ธ ์ฑ๋ฅ ์ ํ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค.
REPEATABLE READ ๋ ํธ๋์ญ์ ์ด ๋ฒ์ ๋ด์์ ์กฐํํ ๋ฐ์ดํฐ ๋ด์ฉ์ด ํญ์ ๋์ผํจ์ ๋ณด์ฅํฉ๋๋ค. ๋ค๋ฅธ ์ฌ์ฉ์๋ ํธ๋์ญ์ ์์ญ์ ํด๋นํ๋ ๋ฐ์ดํฐ์ ๋ํด ์์ ์ด ๋ถ๊ฐ๋ฅํฉ๋๋ค. ์๋ ๋ ๋ฒจ์ ๋นํด ๋ฐ์ดํฐ ์ผ๊ด์ฑ์ด ๋์ต๋๋ค. ํ์ง๋ง ์๋ก์ด ๋ฐ์ดํฐ๊ฐ ์ฝ์ ๋๋ฉด Phantom Read ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค.
READ COMMITTED ๋ ํธ๋์ญ์ ์ด ์ปค๋ฐ๋ ๋ณ๊ฒฝ์ฌํญ๋ง ๋ค๋ฅธ ํธ๋์ญ์ ์ด ์ฝ์ ์ ์์ต๋๋ค. Dirty Read๋ฅผ ๋ฐฉ์งํ ์ ์์ง๋ง ๋๋จธ์ง ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค. ๋ง์ DBMS(Oracle, SQL Server, PostgreSQL)์ ๊ธฐ๋ณธ ๊ฒฉ๋ฆฌ ์์ค์ ๋๋ค.
READ UNCOMMITTED ๋ ํธ๋์ญ์ ์ด commit๋์ง ์์ ๋ณ๊ฒฝ์ฌํญ์ ๋ค๋ฅธ ํธ๋์ญ์ ์ด ์ฝ์ ์ ์์ต๋๋ค. ๊ฐ์ฅ ๋ฎ์ ์์ค์ ๊ฒฉ๋ฆฌ๋ก ์ฑ๋ฅ์ด ๋ฐ์ด๋์ง๋ง ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ์ด ๋ณด์ฅ๋์ง ์์ ์ ๋ขฐ์ฑ์ด ๋ฎ์ต๋๋ค.
Dirty Read, Non-Repeatable Read, Phantom Read๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค.
[ ์ด์ ํ์ ]
- Dirty Read : ์ปค๋ฐ๋์ง ์์ ๋ฐ์ดํฐ๋ฅผ ์ฝ๋ ๋ฌธ์ ์
๋๋ค.
- ํธ๋์ญ์ A๊ฐ ๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝํ๊ณ B๋ ๊ทธ ๋ฐ์ดํฐ๋ฅผ ์ฝ์. ๋์ค์ ํธ๋์ญ์ A๊ฐ ๋กค๋ฐฑ๋๋ฉด ํธ๋์ญ์ B๋ ์ ํจํ์ง ์์ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ๊ฒ ๋ฉ๋๋ค.
- Non-repeatable Read: ๊ฐ์ ์ฟผ๋ฆฌ๋ฅผ ๋ ๋ฒ ์คํํ์ ๋ ๋ค๋ฅธ ๊ฒฐ๊ณผ๊ฐ ๋์ค๋ ๋ฌธ์ ์
๋๋ค.
- ํธ๋์ญ์ A๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ณ , ํธ๋์ญ์ B๊ฐ ๊ทธ ๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝํ๊ณ ์ปค๋ฐํ ํ, ํธ๋์ญ์ A๊ฐ ๋ค์ ์ฝ์ผ๋ฉด ๋ค๋ฅธ ๊ฐ์ ์ป๊ฒ๋ฉ๋๋ค.
- Phantom Read: ๊ฐ์ ์ฟผ๋ฆฌ๋ฅผ ๋ ๋ฒ ์คํํ์ ๋ ๊ฒฐ๊ณผ ์งํฉ์ด ๋ฌ๋ผ์ง๋ ๋ฌธ์ ์
๋๋ค.
- ํธ๋์ญ์ A๊ฐ ํน์ ์กฐ๊ฑด์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์กฐํํ๊ณ , ํธ๋์ญ์ B๊ฐ ํด๋น ์กฐ๊ฑด์ ๋ง์กฑํ๋ ์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ /์ญ์ ํ ํ, ํธ๋์ญ์ A๊ฐ ๋ค์ ๊ฐ์ ์กฐ๊ฑด์ผ๋ก ์กฐํํ๋ฉด ๊ฒฐ๊ณผ ์งํฉ์ด ๋ฌ๋ผ์ง๋๋ค.
'TIL' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
git rm --cached ์ปค๋ฐ์ ํฌํจ๋ ํ์ผ ์ ๊ฑฐํ๊ธฐ (0) | 2025.03.14 |
---|---|
๋ฉํฐ ๋ชจ๋ ํ๋ก์ ํธ (multi module) ๊ฐ๋ (0) | 2025.03.10 |
SpringBoot์์ FeignClient ๊ฐ๋จํ๊ฒ ์ ์ฉํ๊ธฐ (0) | 2025.03.01 |
FeignClient vs RestClient (0) | 2025.02.28 |
PageableArgumentResolver๋ฅผ ํ์ฉํ @Pageable ํ์ด์ง ์ฌ์ด์ฆ ์ ํ (0) | 2025.02.24 |