ํธ๋์ญ์ ๊ณผ MVCC์ ๋ํด์ ์ ๋งคํ๊ฒ ๋์ด๊ฐ๋ ๋ถ๋ถ์ ์ ๋ฆฌํ๊ณ , ํ๋ฃจ๋ฃฉ ์ฝ๊ฒ ์ค๋ช ํ ์ ์๋ ์ฌ๋์ด ๋๊ธฐ ์ํด ์ ๋ฆฌํ๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค์์์ ํธ๋์ญ์
์ ์์
์ ์ต์ ๋จ์๋ค.
ํธ๋์ญ์
์ ์ฌ๋ฌ ์์
์ ํ๋์ ์์
์ฒ๋ผ ์ฒ๋ฆฌํ๊ธฐ๋ ํ๋ค.
ํธ๋์ญ์
์ด ์ฑ๊ณตํ๋ฉด ๋ชจ๋ ์์
์ด ๋ฐ์(commit)๋๊ณ , ์คํจํ๋ฉด ์ด์ ์ํ๋ก ๋์๊ฐ๋ค.(rollback)
์ด๋ฅผ ์ํด ACID๋ผ๋ ๋ค ๊ฐ์ง ํน์ง์ ์ถฉ์กฑํด์ผ ํ๋ค.
๋ฌด์ง์ฑ์ผ๋ก DB๋ฅผ ๋ฏฟ๋ ๊ฒ์ด ์๋๋ผ, ๊ฐ๋ฐ์๋ ์์ ํ ์ฝ๋๋ฅผ ์์ฑํ๊ธฐ ์ํด ๋
ธ๋ ฅํด์ผ ํ๋ค.
๊ทธ๋ฌ๋ ACID ํน์ฑ์ด ๋ชจ๋ ํธ๋์ญ์
๊ฒฉ๋ฆฌ ์์ค์์ ๋ณด์ฅ๋๋ ๊ฒ์ ์๋๋ค.
Serializable ์์ค์์๋ง ๋ชจ๋ ํน์ฑ์ด ์๋ฒฝํ ์ง์ผ์ง๊ณ , ๋ฎ์ ์์ค์์๋ ์ฑ๋ฅ๊ณผ ๋์์ฑ์ ์ํด ์ผ๋ถ ํน์ฑ์ ์๋ณดํด์ผ ํ๋ค.
์์
Read Committed : Dirty Read X , Non-Repeatable Read(NRR)์ Phantom Read(PR) O
๊ฐ๋ฐ์๋ NRR, PR ๊ฐ์ ๋ฌธ์ ๋ฅผ ๊ณ ๋ คํด ์ฝ๋๋ฅผ ์์ฑํด์ผ ํ๋ค.
์์ฝ. ์ธ์ฐ์.
Serializable์ด ๊ฐ์ฅ ๋์ ๊ฒฉ๋ฆฌ ์์ค, ์ฑ๋ฅ ์ ํ์ ๋ฐ๋๋ฝ ์ํ์ด ๋๋ค.
๋ฐ๋ฉด, Read Committed๋ ์ฑ๋ฅ์ ๋ฐ์ด๋์ง๋ง ์ผ๊ด์ฑ ๋ณด์ฅ์ด ์ฝํด ๊ฐ๋ฐ์๊ฐ ์ถ๊ฐ๋ก ์ฒ๋ฆฌํด์ผ ํ๋ค.
๋ค์ค ๋ฒ์ ๋์์ฑ ์ ์ด(MVCC)๋ ๋์์ฑ ๋ฌธ์ ๋ฅผ ๋ณด๋ค ์ฐ์ํ๊ฒ ํด๊ฒฐํ๊ธฐ ์ํ ๊ธฐ์ ์ด๋ค.
MVCC๋ ๋ฐ์ดํฐ์ ์ฌ๋ฌ ๋ฒ์ ์ ์ ์งํด ํธ๋์ญ์
๊ฐ ์ถฉ๋์ ํผํ๋ค.
ํธ๋์ญ์
์ด ๋ฐ์ดํฐ๋ฅผ ์ฝ์ ๋, ํ์ฌ ์์ ์ ๋ฐ์ดํฐ๊ฐ ์๋๋ผ ํธ๋์ญ์
์์ ์์ ์ ์ค๋
์ท์ ์ฐธ์กฐํ๋ค.
๋ค๋ฅธ ํธ๋์ญ์
์ด ๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝํ๋๋ผ๋ ์ํฅ์ ๋ฐ์ง ์๋๋ค.
Non-Repeatable Read/ Phantom Read ๋ฌธ์ ๋ฅผ ๋ฐฉ์งํ๊ณ ,
์ฑ๋ฅ ์ ํ ์์ด ๋ฐ์ดํฐ ์ผ๊ด์ฑ์ ๋ณด์ฅํ๋ค.
MySQL๊ณผ MariaDB๋ Repeatable Read ๊ฒฉ๋ฆฌ ์์ค์์ MVCC๋ฅผ ์ฌ์ฉํด ํธ๋์ญ์ ๋ด์์ ์ผ๊ด๋ ๋ฐ์ดํฐ๋ฅผ ์ ๊ณตํ๋ค.
๊ทธ๋ฌ๋ฉด ๊ฐ๋ฐ์๋๊ตฌ์ฒด์ ์ผ๋ก ์ด๋ป๊ฒ ํด์ผํ ๊น? ๋์์ฑ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ ์ค ํ๋๊ฐ ๋๊ด์ ๋ฝ(Optimistic Lock)๊ณผ ๋น๊ด์ ๋ฝ(Pessimistic Lock)์ด๋ค.
๊ฐ๋ฐ์๋ ์ํฉ์ ๋ง๊ฒ ๋ ๊ฐ์ง ๋ฝ์ ์ ํํด ์ฌ์ฉํด์ผ ํ๋ฉฐ, ์ฑ๋ฅ์ ์ด์ ๋ก ๋ฝ์ ๊ฑธ์ง ์๋ ๊ฒ์ ์ํํ ์ ์๋ค.
ํนํ, ์ต๊ด์ ์ผ๋ก ์ฐ๋ MSSQL์ WITH (NOLOCK)์ ๊ฐ์ ๊ธฐ๋ฅ์ ์ฑ๋ฅ ์ต์ ํ๋ฅผ ์ํด ๋จ์ฉํ๋ฉด, Dirty Read ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์๋ค.