๊ฐ์
MySQL๊ณผ ๊ฐ์ RDB๋ ์์ ํ๊ณ ์ ๋ขฐํ ์ ์๋ ํธ๋์ญ์ ์ ๋ณด์ฅํ๊ธฐ ์ํด ACID ์ฑ์ง์ ํต์ฌ ์์น์ผ๋ก ์ผ๊ณ ์ด๋ฅผ ๊ตฌํํ๊ณ ์๋ค. ๋ณดํต ACID ์ฑ์ง์ ์๋์ ๊ฐ์ด ์ ์๋๋ค.
- Atomicity (์์์ฑ): ํธ๋์ญ์ ์ ๋ชจ๋ ์์ ์ ์ ๋ถ ์ฒ๋ฆฌ๋๊ฑฐ๋, ํ๋๋ ์ฒ๋ฆฌ๋์ง ์์์ผ ํ๋ค.
- Consistency (์ผ๊ด์ฑ): ํธ๋์ญ์ ์ด ์๋ฃ๋ ํ, ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ์ผ๊ด๋ ์ํ(๊ท์น, ์ ์ฝ ์กฐ๊ฑด)๋ฅผ ์ ์งํด์ผ ํ๋ค.
- Isolation (๋ ๋ฆฝ์ฑ): ๋์์ ์ํ๋๋ ์ฌ๋ฌ ํธ๋์ญ์ ์ ์๋ก ์ํฅ์ ๋ฏธ์น์ง ์๊ณ ๋ ๋ฆฝ์ ์ผ๋ก ๋์ํด์ผ ํ๋ค.
- Durability (์ง์์ฑ): ์ฑ๊ณต์ ์ผ๋ก ์๋ฃ๋ ํธ๋์ญ์ ์ ๊ฒฐ๊ณผ๋ ์๊ตฌ์ ์ผ๋ก ๋ฐ์๋์ด์ผ ํ๋ค.
์ ์์ ๋ํด์๋ ์ ์๊ณ ์์ง๋ง, ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ด๋ฅผ ์ด๋ป๊ฒ ๋ณด์ฅํ๊ณ ์๋์ง ์์ธํ ๋ด์ฉ์ ๊ณต๋ถํด๋ณด์ง ์์๋ ๊ฑฐ ๊ฐ๋ค. ๊ฐ์๊ธฐ ๊ถ๊ธํ๊ธฐ๋ ํด์ ๋ธ๋ก๊ทธ ๊ธ์ ์์ฑํ๋ฉด์ ๊ด๋ จ ๋ด์ฉ์ ์ ๋ฆฌํ๋ค.
ACID์์ ๊ฐ์ฅ ์ค์ํ ๊ฒ์ Undo ๋ก๊ทธ์ Redo ๋ก๊ทธ์ด๋ค. ์ด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ชจ๋ ํน์ฑ์ ๋ณด์ฅํ๊ณ ์๊ธฐ ๋๋ฌธ์ด๋ค. MySQL์์๋ ์ด ๋ ๊ฐ์ ๋ก๊ทธ๋ก ์์์ฑ๊ณผ ์ง์์ฑ, ๋ ๋ฆฝ์ฑ์ ๋ณด์ฅํ๋ค. ์ด ๋ ๋ก๊ทธ์ ์กด์ฌ ์ด์ ๋ ๋ฌด์์ผ๊น? ์ด๋ฅผ ๋จผ์ ์์๋ณด๊ธฐ ์ํด์๋ MySQL์ ์ํคํ ์ฒ์ ๋ฒํผ ๊ด๋ฆฌ ์ ์ฑ ์ ๋ํด์ ๋จผ์ ์์์ผ ํ๋ค.
MySQL์ ์ํคํ ์ฒ
๋จผ์ ACID์ ๋ํด์ ์ด์ผ๊ธฐ ํ๊ธฐ์ ์ ๊ฐ๋จํ๊ฒ๋๋ง MySQL์ ์ํคํ ์ฒ ๊ตฌ์กฐ๋ฅผ ์ดํด๋ณด๋ฉด ์๋์ ๊ฐ๋ค. ์ง์ ์ฒ๋ฆฌ๊ธฐ๊ฐ ์ค์ ๋ก SQL์ ํด์ํ๊ณ , ๊ฒ์ฆ ๋ฐ ์ต์ ํํ๋ ๊ตฌ๊ฐ์ด๋ฉฐ, ์ค์ ๋ก SQL์ ์คํํ๋ฉด์ ๋ฐ์ํ๋ ๋ฐ์ดํฐ ์ฝ์ , ์์ , ์ญ์ , ์กฐํ ๋ฑ์ ๋ฌผ๋ฆฌ์ ์ธ ์ฒ๋ฆฌ๋ฅผ ์ํํ๋ ๊ฒ์ ์ง์ ์ฒ๋ฆฌ๊ธฐ ์๋ ๊ณ์ธต์ธ '์ ์ฅ ์์คํ '์ด ๋ด๋นํ๋ค.
์ ์ฅ ์์คํ ์๋ ํํ ์๋ InnoDB์ ๊ฐ์ ์คํ ๋ฆฌ์ง ์์ง์ด ํ์ฉ๋๋ฉฐ, ์ด์ธ์๋ MyISAM, Memory ๋ฑ์ด ์กด์ฌํ๋ค. ๊ทธ๋ฆผ์์๋ ๋์คํฌ๊น์ง๋ฅผ InnoDB๋ผ๊ณ ํํํ์ง๋ง ์ ํํ๋ ํ์ด์ง ๋ฒํผ์ ๋ก๊ทธ ๋ฒํผ๊ฐ ํฌํจ๋ ์์ญ์ด '์ ์ฅ ์์คํ '์ด๊ณ , ๊ทธ ์๋๋ ๋์คํฌ๋ก InnoDB๊ฐ ๊ด๋ฆฌํ ๋ฟ InnoDB ์์ฒด์ ํฌํจ๋๋ ์์ญ์ ์๋๋ค.
์ฆ, ๊ทธ๋ฆผ์ InnoDB๊ฐ ๊ด๋ฆฌํ๋ ๋ ผ๋ฆฌ์ ์ธ ์์ญ์ ํ์ํ ๊ฒ์ด๋ผ๊ณ ๋ณด๋ฉด ๋๋ค.

๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋์คํฌ์ ๋ฐ์ดํฐ ํ์ผ๋ค์ ์ ์ฅํ์ฌ ๊ด๋ฆฌํ์ง๋ง, ์ฑ๋ฅ์ ์ํด ์ผ๋ถ๋ถ์ ๋ฉ์ธ ๋ฉ๋ชจ๋ฆฌ์ ์ ์งํ๋ค. ๋ํ, ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ๋์คํฌ ์ ์ถ๋ ฅ ํจ์จ์ ์ํด ๋ฐ์ดํฐ๋ฅผ ๊ณ ์ ํฌ๊ธฐ์ ํ์ด์ง(Page) ๋จ์๋ก ์ ์ฅํ๊ณ ์กฐํํ๊ธฐ ๋๋ฌธ์, ๋ฉ์ธ ๋ฉ๋ชจ๋ฆฌ์ ๊ด๋ฆฌ๋๋ ๋ฐ์ดํฐ ์ญ์ ํ์ด์ง ๋จ์๋ก ๋๋์ด 'ํ์ด์ง ๋ฒํผ(InnoDB ๊ณต์์ ๋ฒํผ ํ)'๋ฅผ ํตํด ๊ด๋ฆฌ๋๋ค.
๋ฒํผ ๊ด๋ฆฌ ์ ์ฑ
๋ฒํผ ๊ด๋ฆฌ ์ ์ฑ ์๋ Steal, No-Steal, Force, No-Force๊ฐ ์กด์ฌํ๋๋ฐ, ๊ฐ๊ฐ์ ์ค๋ช ์ ์๋์ ๊ฐ๋ค.
- Steal: ์ด๋ ํ ์์ ๋ ํ์ด์ง๋ฅผ ์ธ์ ๋ ์ง ๋์คํฌ์ ์ธ ์ ์๋ ์ ์ฑ
- No-Steal: ๋ชจ๋ ์์ ๋ ํ์ด์ง๋ ์ ์ด๋ ํธ๋์ญ์ ์ ์ปค๋ฐ ํ ์ข ๋ฃ ์์ ๊น์ง๋ ํ์ด์ง ๋ฒํผ์ ์ ์งํด์ผ ํ๋ ์ ์ฑ
- Force: ํธ๋์ญ์ ์ปค๋ฐ ์ ์์ ๋ ๋ชจ๋ ํ์ด์ง๋ฅผ ๊ณง๋ฐ๋ก ๋์คํฌ์ ๋ฐ์ํด์ผ ํ๋ ์ ์ฑ
- No-Force: ํธ๋์ญ์ ์ปค๋ฐ์ด ์ผ์ด๋๋ ์์ ๋ ๋ชจ๋ ํ์ด์ง๋ฅผ ๋์คํฌ์ ๊ณง๋ฐ๋ก ๋ฐ์ํ์ง ์๋ ์ ์ฑ
ํ์ฌ ์กด์ฌํ๋ ๊ฑฐ์ ๋ชจ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ๋ฒํผ ๊ด๋ฆฌ ์ ์ฑ ์ Steal, No-Force ์ ์ฑ ์ผ๋ก ๊ด๋ฆฌํ๊ณ ์๋ค. ๊ทธ ์ด์ ๋ ๊ฐ๋จํ๊ฒ ๋งํ๋ฉด ์ฑ๋ฅ ๋๋ฌธ์ด๋ค. No-Steal์ ๊ฒฝ์ฐ์๋ ํธ๋์ญ์ ์ด ๊ธธ๊ฒ ์ ์ง๋๊ฑฐ๋, ๋ฐ์ดํฐ ํฌ๊ธฐ๊ฐ ํฐ ๊ฒฝ์ฐ ์์ ๋ ๋ฐ์ดํฐ๊ฐ ํ์ด์ง ๋ฒํผ์ ์ฉ๋์ ์ด๊ณผํ๋ ์ผ์ด ๋ฐ์ํ ์ ์๊ณ , Force์ ๊ฒฝ์ฐ์๋ ๋ชจ๋ ํ์ด์ง๋ฅผ ๊ณง๋ฐ๋ก ๋์คํฌ์ ๋ฐ์ํ๋ ๊ทธ๋งํผ ๋ค๋์ ๋์คํฌ I/O๊ฐ ํ๋ฒ์ ๋ฐ์ํ ์ ์๋ค.
์ฑ๋ฅ์ ์ํด Steal + No-Force ์ ์ฑ ์ ์ ํํ์ง๋ง, Steal ์ ์ฑ ์ผ๋ก ์ธํด ๋กค๋ฐฑ์ด ์ผ์ด๋ ํธ๋์ญ์ ์ ๋ฐ์ดํฐ๋ ๋์คํฌ์ ๋ฐ์๋ ์ ์๊ณ , No-Force ์ ์ฑ ์ผ๋ก ์ธํด ์ปค๋ฐ๋์์์๋ ๋์คํฌ์ ๋ฐ์๋์ง ์๊ณ ์ข ๋ฃ๋์ด ๋ฌธ์ ๊ฐ ์๊ธธ ์ ์๋ค. ์ด๋ฅผ ์ํด์ ํ์ํ ๊ฒ์ด ๊ฐ๊ฐ Undo ๋ก๊ทธ์ Redo ๋ก๊ทธ์ด๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ก๊น ๋ฐฉ์
๊ทธ๋ผ ๋ก๊ทธ๋ ์ด๋ค ๋ฐฉ์์ผ๋ก ๊ธฐ๋ก๋ ๊น? ๋ก๊ทธ ๊ธฐ๋ก ๋ฐฉ์์ ๋ํ์ ์ผ๋ก ์ธ ๊ฐ์ง๋ก ๋ถ๋ฅ๋๋ค. ๊ฐ๊ฐ '๋ฌผ๋ฆฌ์ ์ํ ๋ก๊น ', '๋ฌผ๋ฆฌ์ ์ ์ด ๋ก๊น ', '๋ ผ๋ฆฌ์ ์ ์ด ๋ก๊น '์ด๋ค.
๋ฌผ๋ฆฌ์ ์ํ ๋ก๊น
์ํ ๋ณํ ์ด์ ์ด๋ฏธ์ง์ ๋ณํ ํ์ ์ด๋ฏธ์ง๋ฅผ ํจ๊ป ๋ก๊น ํ๋ ๋ฐฉ๋ฒ์ด๋ค. ์๋ฅผ ๋ค์ด a๋ผ๋ ์ปฌ๋ผ์ด 1์์ 2๋ก ๋ณํํ๋ค๋ฉด ํ๋์ ๋ก๊ทธ ๋ ์ฝ๋๋ a์ปฌ๋ผ์ด ์กด์ฌํ๋ ๋ฌผ๋ฆฌ์ ์ธ ํ์ด์ง์ n๋ฒ์ง์ ์ด์ ๊ฐ์ธ 1๊ณผ ์ดํ ๊ฐ์ธ 2๋ฅผ ํจ๊ป ๊ธฐ๋กํ๋ค.
์ด๋ฅผ ํตํด Undo๊ฐ ํ์ํ ๋ ์ด์ ์ด๋ฏธ์ง๋ฅผ, Redo๊ฐ ํ์ํ ๊ฒฝ์ฐ์๋ ์ดํ ์ด๋ฏธ์ง๋ฅผ ํตํด ๊ฐ์ ๋ณต๊ตฌํ๋ค.
๋ฌผ๋ฆฌ์ ์ ์ด ๋ก๊น
XOR ์ฐ์ฐ์ ์ฐจ์ด๊ฐ๋ง ๊ธฐ๋กํ๋ ๋ฐฉ์์ด๋ค. ๋ณต๊ตฌ ์์ ์ ๋ก๊ทธ ๋ ์ฝ๋์ ๊ธฐ๋ก๋ ์ด๋ฏธ์ง๋ฅผ XOR ๊ฐ๊ณผ ๋น๊ตํ์ฌ ๋ณต๊ตฌ๋ฅผ ์ํํ๋ค.
๋ ผ๋ฆฌ์ ์ ์ด ๋ก๊น
ํด๋น ๋ฐฉ์์ ๊ฐ์ ๊ธฐ๋กํ๋ ๊ฒ์ด ์๋๋ผ '์ด๋ค ์ผ'์ ์ํํ๋์ง ๊ธฐ๋กํ๋ ๋ฐฉ๋ฒ์ด๋ค. a = a + 1๊ณผ ๊ฐ์ ์ฐ์ฐ์ ๋ก๊น ํ ์๋ ์๊ณ , ์ด์ ๊ฐ 1, ์ดํ ๊ฐ 2์ ๊ฐ์ ๊ฐ์ ๋ก๊น ํ ์๋ ์๋ค.
ํด๋น ๋ก๊น ์ ๋ฌผ๋ฆฌ์ ๋ก๊น ๊ณผ ๋ค๋ฅด๊ฒ ์ค์ ๋ฌผ๋ฆฌ์ ์ธ ์์น๋ฅผ ์ ์ฅํ์ง ์๊ณ ’A ํ ์ด๋ธ์ B ์ปฌ๋ผ‘๊ณผ ๊ฐ์ด ๋ ผ๋ฆฌ์ ์ผ๋ก ๋์์ ํํํ๋ค.
๊ทธ๋์ B-Tree, B+Tree์ SMO ์ฐ์ฐ์ผ๋ก ๋ฌผ๋ฆฌ์ ์์น๊ฐ ์์ฃผ ๋ณํ๋ ๊ฒฝ์ฐ์ ๋ก๊น ์์ ๊ณผ ๋ณต๊ตฌ ์์ ์ ์์น๊ฐ ๋ค๋ฅธ ๊ฒฝ์ฐ๋ฅผ ๋ฐฉ์งํ ์ ์๋ค.
์ด ์ธ ๊ฐ์ง ๋ก๊น ๋ฐฉ์ ์ค MySQL์์๋ Undo ๋ก๊ทธ์๋ ๋ ผ๋ฆฌ์ ์ ์ด ๋ก๊น ์ Redo ๋ก๊ทธ์๋ ๋ฌผ๋ฆฌ์ ์ํ + ์ ์ด ๋ก๊น ์ ํ์ฉํ๊ณ ์๋ค.
๊ทธ ์ด์ ๋ ์ฅ์ ๋ก ์ธํ ๋ณต๊ตฌ ์์, ํ์ค ๋ณต๊ตฌ ์๊ณ ๋ฆฌ์ฆ์ธ ARIES ๋ฐฉ์์ ๋ฐ๋ฅด๊ธฐ ๋๋ฌธ์ด๋ค. ํด๋น ์๊ณ ๋ฆฌ์ฆ์ Redo ๋ก๊ทธ๋ฅผ ํ์ฉํด ๋ฌผ๋ฆฌ์ ์์น์ ๋ฐ์ดํฐ๋ฅผ ๋จผ์ ๋๋ ค๋ฐ์ ํ์ Undo ๋ก๊ทธ๋ก ์์ง ๋๋์ง ์์ ํธ๋์ญ์ ์ ๋กค๋ฐฑ ์ํค๋ ๊ณผ์ ์ ๊ฑฐ์น๋ค.
์ข ๋ ์์ธํ ์ดํด๋ณด๋ฉด, B-Tree์ ๊ตฌ์กฐ๊ฐ ๋ณ๊ฒฝ๋๋ SMO ์ฐ์ฐ ์ค ์ฅ์ ๊ฐ ๋ฌ๋ค๋ฉด ํธ๋ฆฌ์ ๋ฌผ๋ฆฌ์ ์ฐ๊ฒฐ์ด ์์๋์ฑ(ํฌ์ธํฐ ์ฐ๊ฒฐ์ ์คํจ ๋ฑ)๋ก ์๋ฒ๊ฐ ์ฌ๊ฐ๋๋๋ค. ์ด๋ด๋๋ ๋ ผ๋ฆฌ์ ์์น๋ก ๋ ์ฝ๋๋ฅผ ์ฐพ์ง ๋ชปํ ๊ฐ๋ฅ์ฑ์ด ๋๋ค. ๊ทธ๋์ ๋ฌผ๋ฆฌ์ ์์น์ ๋ ์ฝ๋๋ฅผ ๋ฐ์๋ฃ๊ณ , B-Tree๋ฅผ ๋ณต๊ตฌํ ํ์ ๋ ผ๋ฆฌ์ ์์น๋ฅผ ํตํด ๋๋์ง ์์ ํธ๋์ญ์ ์ ๋กค๋ฐฑํ๋ ๊ฒ์ด๋ค.
์ด๋ ๊ฒ ๋ณต๊ตฌ๋ฅผ ์ํด ๋ก๊ทธ๋ฅผ ํ์ฉํ๊ธฐ ๋๋ฌธ์ ๋ชจ๋ ๋ฐ์ดํฐ๋ WAL(Write-Ahead Log) ๊ท์น์ ๋ฐ๋ผ ๋ฐ์ดํฐ๋ณด๋ค ๋ก๊ทธ๋ฅผ ๋จผ์ ๋์คํฌ์ ๊ธฐ๋กํ๋ค.
Durability (์ง์์ฑ)
MySQL์์๋ ์์ ์ง์์ ๊ธฐ๋ฐ์ผ๋ก ์ง์์ฑ์ ๋ณด์ฅํ๊ณ ์๋ค. ํธ๋์ญ์ ์ปค๋ฐ ์์ ์ ๋ก๊ทธ ๋ฒํผ์ ์๋ ํด๋น ํธ๋์ญ์ ์ ๋ก๊ทธ ๋ฐ์ดํฐ๋ค์ ๋ชจ๋ ๋์คํฌ์ ์์ฑ๋๋ฉฐ, fsync()์ ๊ฐ์ ์์คํ ์ฝ์ ํตํด ๋ฌผ๋ฆฌ์ ๋์คํฌ์ ์์ ํ ๋๊ธฐํ ๋์์์ ํ์ธํ ํ์์ผ ์ปค๋ฐ์ด ์๋ฃ๋ ๊ฒ์ผ๋ก ์ธ์ ํ๋ค. ์ปค๋ฐ ์์ ์ด์ธ์๋ WAL์ด ํ์ํ ๊ฒฝ์ฐ, ๋ก๊ทธ ๋ฒํผ๊ฐ ๊ฐ๋ ์ฐฌ ๊ฒฝ์ฐ, DBMS ๋ด๋ถ์ ์ผ๋ก ํ์๋ก ํ๋ ๊ฒฝ์ฐ์๋ ๋ก๊ทธ ๋ฒํผ์ ์๋ ๋ก๊ทธ ๋ฐ์ดํฐ๋ค์ด ๋์คํฌ์ ์์ฑ๋๋ค.
์ด ๊ณผ์ ์์ ์๋ฒ์ ์ฅ์ ๊ฐ ๋์ MySQL์ด ๋น์ ์ ์ข ๋ฃ๋์๋ค๋ฉด, ํด๋น ํธ๋์ญ์ ์ ์ปค๋ฐ์ ์ํ๋์ง ์์ ๊ฒ์ผ๋ก ํ๋จํด ๋กค๋ฐฑ์ผ๋ก ๋ณต๊ตฌ๋ฅผ ์ฒ๋ฆฌํ๊ฒ ๋๋ค. ๋ฐ๋๋ก ๋๊ธฐํ๊ฐ ์๋ฃ๋์์ง๋ง, ๋ฐ์ดํฐ ํ์ผ์๋ ๋ฐ์๋์ง ์์๋ค๋ฉด ์ปค๋ฐ ์ฑ๊ณต์ผ๋ก ํ๋จํด Redo ๋ก๊ทธ๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฅผ ๋ณต๊ตฌํ๋ค.
Atomicity (์์์ฑ)
์์์ฑ์ ๋ํ์ ์ผ๋ก 3๊ฐ์ง ๋ฐ์ ๊ฐ๋ฅ์ฑ์ด ์กด์ฌํ๋ค.
- ํธ๋์ญ์ ์ปค๋ฐ
- ํธ๋์ญ์ ๋กค๋ฐฑ
- ํธ๋์ญ์ ์งํ ์ค ์ฅ์
์ด ์ค์์ ํธ๋์ญ์ ์ปค๋ฐ ์ํฉ์ ๊ฒฝ์ฐ์๋ ์ ๋ด์ฉ์์ ์ด๋ฏธ ์ด๋์ ๋ ํ์ ํ ์ ์๊ธฐ ๋๋ฌธ์, ๋กค๋ฐฑ๊ณผ ์งํ ์ค ์ฅ์ ์ํฉ์ ๋ํด์๋ง ์๊ธฐํด๋ณด๊ณ ์ ํ๋ค.
ํธ๋์ญ์ ๋กค๋ฐฑ
ํธ๋์ญ์ ๋กค๋ฐฑ์ ๊ฒฝ์ฐ์๋ ์ฌ์ฉ์๊ฐ ๋ช ์์ ์ผ๋ก ROLLBACK์ ํธ์ถํ๊ฑฐ๋, ์ํ ๋์ค ํ๋์ ์ฐ์ฐ์ด ์คํจํ ๊ฒฝ์ฐ๊ฐ ์์ ์ ์๋ค. ์ด๋ฐ ๊ฒฝ์ฐ์๋ ์์คํ ์์ฒด๋ ์ ์์ ์ผ๋ก ๋์ํ๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ํด๋น ํธ๋์ญ์ ์ ๋ฒํธ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก Undo ๋ก๊ทธ๋ฅผ ์ญ๋ฐฉํฅ ํ์ํ์ฌ ๋ฐ์ดํฐ๋ค์ ๋กค๋ฐฑํ๋ค.

๋ฐ์ดํฐ๋ค์ ๋กค๋ฐฑํ๋ฉด์, Undo ์์ ์ ๋ํ ๋ณด์ ๋ก๊ทธ ๋ ์ฝ๋๋ ํจ๊ป Redo ๋ก๊ทธ์ ์ถ๊ฐํ๋ค. ์ด๋ ๋กค๋ฐฑ ์ค ์ฅ์ ๋ก ์ธํด ์๋ฒ๊ฐ ์ข ๋ฃ๋์์ ๋ ์ฌ์๋ํ๋ฉด์ ํ๋ Undo ์์ ์ ๋ค์ ํ์ง ์๊ธฐ ์ํด์์ด๋ค. ์๋ฅผ ๋ค๋ฉด 100๊ฐ์ Undo ์์ ์ ์ํํด์ผ ํ๋ ์ํฉ์์ 50๊ฐ ์ ๋ ์ํํ์ ๋ ์๋ฒ๊ฐ ์ฌ์๋๋๋ฉด ๋ณด์ ๋ก๊ทธ ๋ ์ฝ๋๊ฐ ์๋ ๊ฒฝ์ฐ์ ๋ค์ ์ฒซ ๋ฒ์งธ Undo ์์ ๋ถํฐ ์ฒ๋ฆฌํด๋ฒ๋ฆด ์ ์๋ค. ํ์ง๋ง, ์ด๋ฌํ ๋ณด์ ๋ก๊ทธ ๋ ์ฝ๋๋ฅผ ํตํด์ ์์ ์ ์งํ ์ ๋๋ฅผ ๊ธฐ๋กํ์ฌ ์ค๋ณต Undo ์์ ์ ๋ฐฉ์งํ๋ค.
ํธ๋์ญ์ ์งํ ์ค ์ฅ์
ํด๋น ์ํฉ์์๋ ํธ๋์ญ์ ์ด ์ปค๋ฐ๋์ง ์๊ณ ์ข ๋ฃ๋์๊ธฐ ๋๋ฌธ์ ๋กค๋ฐฑ์ ๊ณผ์ ๊ณผ ๋น์ทํ๊ฒ ์งํ๋๋ค. ๋ค๋ง, ์งํ ๋์ค ๋ฐ์ดํฐ์ ๋ฌผ๋ฆฌ์ ์ธ ๊ตฌ์กฐ(B-Tree ๋ฑ)๊ฐ ์์๋์์ ๊ฐ๋ฅ์ฑ์ด ์๊ธฐ ๋๋ฌธ์, ๋จผ์ Redo ๋ก๊ทธ๋ฅผ ํตํด ์ฅ์ ๋ฐ์ ์ง์ ์ ์ํ๋ก ๋ฌผ๋ฆฌ์ ๋ณต๊ตฌ๋ฅผ ์งํํ ํ์ ๋ ผ๋ฆฌ์ ์ธ ๋กค๋ฐฑ(Undo)์ ์ํํ๋ค.
๋ง์ฝ ๋ก๊ทธ ๋ฒํผ์ ๋ด์ฉ์ด ๋์คํฌ์ ๊ธฐ๋ก๋๊ธฐ๋ ์ ์ ์ฅ์ ๊ฐ ๋ฐ์ํด ์ ์ค๋ ๊ฒฝ์ฐ์๋ ์ด๋ป๊ฒ ๋ ๊น? ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ์ด๋ฅผ '์ฑ๊ณต์ ์ผ๋ก ์ปค๋ฐ๋์ง ์์ ๋ฏธ์์ฑ ํธ๋์ญ์ '์ผ๋ก ๊ฐ์ฃผํ๋ค. ๋ฐ๋ผ์ ์ ์ค๋ ๋ฐ์ดํฐ๋ฅผ ๊ตณ์ด ์ด๋ ค๋ผ ์๋ฌด๊ฐ ์์ผ๋ฉฐ, ์คํ๋ ค ์์์ฑ์ ๋ณด์ฅํ๊ธฐ ์ํด ์์ ์๋ ์ผ๋ก ๋ฌดํจํ ์ฒ๋ฆฌํ๋ ๊ฒ์ด ์ฌ๋ฐ๋ฅธ ๋์์ด๋ค.
Isolation (๋ ๋ฆฝ์ฑ)
๋ ๋ฆฝ์ฑ์ ์์ Undo, Redo ๋ก๊ทธ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ ๋ง์ ์ง์์ ์๊ตฌํ๋ค. ์ฃผ์ ๊ฐ๋ ์ผ๋ก๋ MVCC, ๋ฝ, ๊ฒฉ๋ฆฌ ์์ค, ์ฝ๊ธฐ ํ์ ๋ฑ์ด ์๋ค. ๋จผ์ ํด๋น ๊ฐ๋ ์ ๋ํด์ ์๋ฉด ๋ ๋ฆฝ์ฑ์ ๋ํด์ ์ดํดํ ์ ์๋ค.
Read Phenomena (์ฝ๊ธฐ ํ์)
Dirty Read
์ด๋ ์ปค๋ฐ๋์ง ์์ ๊ฒฐ๊ณผ๋ฅผ ์ฝ๋ ๊ฒ์ผ๋ก, ๊ฐ ํธ๋์ญ์ ์ด ์๋ก ๋ ๋ฆฝ์ ์ด์ง ์์ ๋ฐ์ํ๋ค.

๊ทธ๋ฆผ์์ ๋ณผ ์ ์๋ฏ์ด Tx1์ ์์ง ์ปค๋ฐ๋์ง ์์ Tx2์ ๋ณ๊ฒฝ ์ฌํญ์ ์ฝ๊ธฐ ๋๋ฌธ์ Tx2๊ฐ ๋กค๋ฐฑ ๋์์ ๋ ์ฌ์ค์ ์กด์ฌํ์ง ์์ ๋ณ๊ฒฝ ์ฌํญ์ ์ฝ๊ฒ ๋ ๊ฒ์ด๋ผ ํฐ ๋ฌธ์ ๋ก ์ด์ด์ง ์ ์๋ค.
Non-Repeatable Read
๋ค๋ฅธ ํธ๋์ญ์ ์ด ์ปค๋ฐํ ๋ฐ์ดํฐ๋ก ์ธํด ๊ฐ์ ๋ฐ์ดํฐ ์กฐํ๋ฅผ ์ํํ์์๋ ์๋ก ๋ค๋ฅธ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ด๋ฒ๋ฆด ์ ์๋ ๋ฌธ์ ์ด๋ค. ์ฆ, ๊ฐ์ ํธ๋์ญ์ ์์์ ๋์ผํ ์กฐํ๋ฅผ ๋ ๋ฒ ์ํํ ๊ฒฐ๊ณผ๊ฐ ๋ค๋ฅธ ๊ฒ์ด๋ค.

ํด๋น ํ์์ผ๋ก ์ธํด ํฉ๊ณ๋ฅผ ๊ตฌํ๋ ์กฐํ์ ๊ฒฝ์ฐ ๋ ๊ฐ์ ํฉ๊ณ๊ฐ ์๋ก ๋ค๋ฅด๊ฒ ๋์ค๋ ๊ฒฝ์ฐ๊ฐ ๋ฐ์ํ ์๋ ์๋ค.
Phantom Read
Phantom Read๋ Non-Repeatable Read์ ๋น์ทํ์ง๋ง ๋ ์ฝ๋ ๋จ์๊ฐ ์๋๋ผ ๋ฒ์ ๊ฒ์์ด๋ผ๋ ์ฐจ์ด์ ์ด ์๋ค. ๊ทธ๋์ ๊ธฐ์กด ํ์ด ๋ณ๊ฒฝ๋๋๊ฒ ์๋๋ผ ์๋ก์ด ํ์ด ๋ฐ๊ฒฌ๋๋ ๊ฒ์ด๋ค.

ํธ๋์ญ์ ๊ฒฉ๋ฆฌ ์์ค
SQL ํ์ค์์ ๊ฒฉ๋ฆฌ ์์ค์ 4๋จ๊ณ๋ก ๋๋์ด์ง๋ค.
Read Uncommited
๋ค๋ฅธ ํธ๋์ญ์ ์ ๋ฏธ์ปค๋ฐ ๋ฐ์ดํฐ์ ์ ๊ทผํ ์ ์๋ ๊ฒฉ๋ฆฌ ์์ค์ด๋ค. ๊ฐ์ฅ ๋ฎ์ ๋ ๋ฆฝ์ฑ์ ๊ฐ์ง ๊ฒฉ๋ฆฌ ์์ค์ด๋ฉฐ ์์์ ์๊ธฐํ Dirty Read๋ Non-Repeatable Read, Phantom Read์ ๊ฐ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์๋ค. ๋ฐ์ดํฐ ์ผ๊ด์ฑ์ด ๋ณด์ฅ๋์ง ์๊ธฐ ๋๋ฌธ์ ๊ถ์ฅ๋์ง ์๋๋ค. PostgreSQL์์๋ ๊ณต์์ ์ผ๋ก ํด๋น ๊ฒฉ๋ฆฌ ์์ค์ ์ง์ํ๊ธด ํ๋ ๋ด๋ถ ๊ตฌํ์ Read Commited๋ก ๋์ํ๊ฒ ๋์ด์๋ค.
Read Commited
์ด๋ฆ ๊ทธ๋๋ก ์ปค๋ฐ๋ ๋ฐ์ดํฐ๋ง ์ ๊ทผํ ์ ์๋ ๊ฒฉ๋ฆฌ ์์ค์ด๋ค. Dirty Read ๋ฌธ์ ๋ ๋ง์ ์ ์์ง๋ง, Non-Repeatable Read, Phantom Read ๋ฌธ์ ๋ ๋ง์ง ๋ชปํ๋ค.
Repeatable Read
MySQL์ ๊ธฐ๋ณธ ๊ฒฉ๋ฆฌ ์์ค์ด๋ค. MVCC๋ฅผ ํตํด ์ํ๋๋ ํธ๋์ญ์ ์ ๊ฒฉ๋ฆฌ๋ฅผ ๋ณด์ฅํ๋ค. ํด๋น ๊ฒฉ๋ฆฌ ์์ค์์๋ Dirty Read, Non-Repeatable Read ๋ฌธ์ ๋ฅผ ๋ง์ ์ ์๋ค. Phantom Read๋ ๋ง์ ์ ์๋๋ฐ, MySQL์์๋ MVCC๋ฅผ ํ์ฉํ๊ธฐ์ ํน์ ์ํฉ์์๋ง Phamtom Read๊ฐ ์ผ์ด๋๋ค.
ํน์ ์ํฉ์ด๋ผํจ์ select ... for update์ ๊ฐ์ ์ฐ๊ธฐ ์ ๊ธ์ ๊ฑธ๊ณ ์กฐํ๋ฅผ ์ํํ ๋๋ฅผ ๋งํ๋ค. ์ผ๋ฐ์ ์ผ๋ก ์กฐํํ ๋ MVCC๋ ๊ธฐ๋ณธ์ ์ผ๋ก Undo ๋ก๊ทธ๋ฅผ ํตํด ํด๋น ํธ๋์ญ์ ์ด ๋ฐ๋ผ๋ด์ผ ํ๋ ์์ ์ ๊ณผ๊ฑฐ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์จ๋ค. ํ์ง๋ง for update๋ฅผ ํตํด ์กฐํํ๋ฉด ์กฐํํ๋ ๋ ์ฝ๋์ ๋ฝ์ ๊ฑธ์ด์ผ ํ์ง๋ง ๋ฐฑ์ ๋ฐ์ดํฐ์ธ Undo ๋ก๊ทธ ๋ ์ฝ๋์๋ ๋ฝ์ ๊ฑธ ์๊ฐ ์๋ค.
๋ฐ๋ผ์ ์ด ๊ฒฝ์ฐ์๋ ์ด์ฉ ์ ์์ด Undo ๋ก๊ทธ๊ฐ ์๋ ํ์ฌ ์์ ์ ์ค์ ํ ์ด๋ธ ๋ ์ฝ๋์ ๋ฝ์ ๊ฑธ๊ณ ์กฐํํ๊ธฐ์ Phantom Read๊ฐ ๋ฐ์ํ ์ ์๋ ๊ฒ์ด๋ค.
Serializable
๊ฐ์ฅ ๋จ์ํ ๊ฒฉ๋ฆฌ ์์ค์ด๋ฉด์ ๋์์ ๊ฐ์ฅ ์๊ฒฉํ ๊ฒฉ๋ฆฌ ์์ค์ด๋ค. ํ ํธ๋์ญ์ ์์ ์ฝ๊ณ ์ฐ๋ ๋ฐ์ดํฐ๋ ๋์์ ๋ค๋ฅธ ํธ๋์ญ์ ์์ ์ ๋ ์ ๊ทผํ ์ ์๋ค. ๊ทธ๋งํผ ๋์ ์ฒ๋ฆฌ ์ฑ๋ฅ๋ ๋ฎ์์ง๋ค.
์ด๋ฌํ ๊ฒฉ๋ฆฌ ์์ค์ ๋ช ์ธ์ด๊ธฐ์ ์ด๋ฅผ ๊ตฌํํ๋ ๋ฐฉ๋ฒ์ผ๋ก 'Lock (์ ๊ธ)'์ด๋ผ๋ ๋งค์ปค๋์ฆ์ ํ์ฉํ๋ค.
Lock (์ ๊ธ) ๋งค์ปค๋์ฆ
๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ์์ ์ค๋ช ํ ๊ฒฉ๋ฆฌ ์์ค์ ๋ฌผ๋ฆฌ์ ์ผ๋ก ๊ตฌํํ๊ณ ๋์์ฑ ๋ฌธ์ ๋ฅผ ์ ์ดํ๊ธฐ ์ํด ์ฌ์ฉํ๋ ํต์ฌ ๋ฐฉ๋ฒ์ด ๋ฐ๋ก Lock์ด๋ค. ๋์์ฑ ์ถฉ๋์ ๋ฐ๋ผ๋ณด๋ ๊ด์ ์ ๋ฐ๋ผ ํฌ๊ฒ ๋น๊ด์ ๋์์ฑ ์ ์ด์ ๋๊ด์ ๋์์ฑ ์ ์ด๋ก ๋๋ ์ ์๋ค.
๋น๊ด์ ๋์์ฑ ์ ์ด
ํธ๋์ญ์ ๊ฐ ์ถฉ๋์ด ๋ฐ๋์ ๋ฐ์ํ๋ค๊ณ ๊ฐ์ ํ๊ณ , ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ฑฐ๋ ์ธ ๋ ์์ ์ฒ์๋ถํฐ ์ ๊ธ์ ๊ฑธ์ด์ ํธ๋์ญ์ ์ด ์๋ฃ๋ ๋๊น์ง ์ด๋ฅผ ์ ์งํ์ฌ ๋ค๋ฅธ ํธ๋์ญ์ ์ ์ ๊ทผ์ ๋ฌผ๋ฆฌ์ ์ผ๋ก ๋ง์๋ฒ๋ฆฌ๋ ๋ฐฉ์์ด๋ค. ์ ๊ธ์ ๋จ์๋ ํ ์ ๊ธ๋ถํฐ ํ์ด์ง ์ ๊ธ, ํ ์ด๋ธ ์ ๊ธ๊น์ง ๋ค์ํ๊ฒ ์กด์ฌํ๋ค.
๋๊ด์ ๋์์ฑ ์ ์ด
ํธ๋์ญ์ ๊ฐ ์ถฉ๋์ด ๋๋ฌผ๋ค๊ณ ๊ฐ์ ํ์ฌ, ์ ๊ธ์์ด ์์ ๋กญ๊ฒ ์ฝ๊ณ ์ฐ๋ฉด์ ํธ๋์ญ์ ์ด ์ปค๋ฐ๋๋ ์์ ์ ์ถฉ๋์ด ์์๋์ง ๊ฒ์ฆํ๋ ๋ฐฉ์์ด๋ค. ์ ๊ธ ์ ์ง ๋น์ฉ์ด ์์ผ๋ ๋๊ธฐ ์๊ฐ์ด ์๊ณ ์ฒ๋ฆฌ ์ฑ๋ฅ์ด ๋์์ง๋ค.
๋ค๋ง, ์ปค๋ฐ ์์ ์ ๋ค๋ฅธ ํธ๋์ญ์ ์ด ์์ ํ๋ค๋ ์ถฉ๋์ด ๋ฐ์ํ๋ฉด ๋กค๋ฐฑ๋๋ค.
MVCC (๋ค์ค ๋ฒ์ ๋์์ฑ ์ ์ด)
ํ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ์ ๊ธ ๋งค์ปค๋์ฆ ์ค ํ๋๋ง์ผ๋ก ๊ฒฉ๋ฆฌ ์์ค์ ๊ตฌํํ์ง ์๊ณ , ๋ ๋์์ฑ ์ ์ด๋ฅผ ๊ฒฐํฉํ MVCC๋ฅผ ํ์ฉํ๋ค. ์ด๋ ์๋ณธ์ ๋ฐ์ดํฐ์ ๋ณ๊ฒฝ ์ค์ธ ์ฌ๋ฌ ๋ฐ์ดํฐ๋ฅผ ๋์์ ์ ์งํ๋ ๋ฐฉ์์ผ๋ก ์์ ๋ค๋ฃจ์๋ Undo ๋ก๊ทธ๊ฐ ํต์ฌ์ ์ธ ์ญํ ์ ํ๋ค.
์๋ฅผ ๋ค์ด ํธ๋์ญ์ A๊ฐ a = 10์ธ ๋ ์ฝ๋๋ฅผ a = 11๋ก ๋ณ๊ฒฝํ๋ ์ฐ๊ธฐ ์์ ์ ์งํ ์ค์ด๋ผ๊ณ ๊ฐ์ ํด๋ณด์. ์ด๋ ์ด ๋ ์ฝ๋์๋ ๋น๊ด์ ์ธ ์ฐ๊ธฐ ์ ๊ธ์ด ๊ฑธ๋ฆฐ๋ค. ํ์ง๋ง ์ด์ ๋์์ ํธ๋์ญ์ B๊ฐ ํด๋น ๋ ์ฝ๋๋ฅผ ์กฐํํ ๋, MVCC๋ ํธ๋์ญ์ B๋ฅผ ๋๊ธฐ ์ํค์ง ์๋๋ค. ๋์ Undo ๋ก๊ทธ์ ๋ฐฑ์ ๋ ๋ณ๊ฒฝ ์ ๊ณผ๊ฑฐ ๋ฐ์ดํฐ๋ฅผ ์ฐพ์ ๋ฐํํ๋ค.
Undo ๋ก๊ทธ๊ฐ ๋ ผ๋ฆฌ์ ์ธ ์ ์ด ๋ก๊น ๋ฐฉ์์ผ๋ก ๊ธฐ๋กํ๊ธฐ์ ์ด๋ป๊ฒ ๊ณผ๊ฑฐ ๋ฐ์ดํฐ๋ฅผ ๋ฐํํ๋์ง๊ฐ ๊ถ๊ธํด์ ์ฐพ์๋ณด์๋๋ฐ, ์ด๋ ์ญ์ฐ์ฐ์ ์ด์ฉํด์ ์ฐพ์์จ๋ค.
์ ๋ฆฌํ๋ฉด, ์ฝ๊ธฐ ์์ ์ ๋๊ด์ ํน์ฑ์ ํ์ฉํด ๊ณผ๊ฑฐ์ ์ค๋ ์ท์ ํตํด ๋ฝ ์์ด ์ฒ๋ฆฌํ๊ณ , ์ฐ๊ธฐ ์์ ์ ๋น๊ด์ ํน์ฑ์ ํ์ฉํด ๋ฝ์ ๊ฑธ์ด ์ถฉ๋์ ๋ฐฉ์งํ๋ค. MySQL์ Repeatable Read ๊ฒฉ๋ฆฌ ์์ค์ด ๋ฐ๋ก ์ด MVCC๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋์ํ๋ค.
InnoDB์ ํน๋ณํ ์ ๊ธ: Gap Lock๊ณผ Next-Key Lock
MVCC๋ฅผ ํตํด ๋ฝ ์๋ ์ฝ๊ธฐ๋ฅผ ๋ณด์ฅํ๋๋ผ๋, ์์ ์ค๋ช ํ SELECT ... FOR UPDATE์ ๊ฐ์ด ๋ช ์์ ์ธ ์ฐ๊ธฐ ์ ๊ธ์ ๊ฑธ์ด์ผ ํ๋ ์ํฉ์์๋ ์ด์ฉ ์ ์์ด ์ค์ ํ ์ด๋ธ ๋ ์ฝ๋์ ์ ๊ธ์ ๊ฑธ๊ฒ ๋๋ฉฐ, ์ด๋ก ์ธํด Phantom Read ํ์์ด ๋ฐ์ํ ์ ์๋ค๊ณ ์ธ๊ธํ๋ค.
ํ์ง๋ง MySQL์ ์ด๋ฐ ์ํฉ์์๋ ๋ฐ์ดํฐ ์ ํฉ์ฑ์ ์งํค๊ธฐ ์ํด ๋จ์ํ ํ ๋จ์ ์ ๊ธ(Record Lock)์ ๋์ด์ ํน๋ณํ ๋ฝ ๋ฉ์ปค๋์ฆ์ ์ฌ์ฉํ๋ค.
- ๋ ์ฝ๋ ๋ฝ (Record Lock): ์ธ๋ฑ์ค ๋ ์ฝ๋ ์์ฒด์๋ง ๊ฑฐ๋ ๊ธฐ๋ณธ์ ์ธ ์ ๊ธ์ด๋ค.
- ๊ฐญ ๋ฝ (Gap Lock): ์ค์ ์กด์ฌํ๋ ๋ ์ฝ๋๊ฐ ์๋๋ผ, ์ธ๋ฑ์ค ๋ ์ฝ๋ ์ฌ์ด์ ๋น ๊ณต๊ฐ(Gap)์ ์ ๊ทธ๋ ๊ธฐ์ ์ด๋ค. ์ด ๊ณต๊ฐ์ ๋ค๋ฅธ ํธ๋์ญ์ ์ด ์๋ก์ด ๋ฐ์ดํฐ๋ฅผ INSERTํ๋ ๊ฒ์ ์์ฒ ์ฐจ๋จํ๋ค.
- ๋ฅ์คํธ ํค ๋ฝ (Next-Key Lock): InnoDB๊ฐ Repeatable Read ํ๊ฒฝ์์ ๋ฒ์ ๊ฒ์ ์ ์ฃผ๋ก ์ฌ์ฉํ๋ ์ ๊ธ์ผ๋ก, ๋ ์ฝ๋ ๋ฝ๊ณผ ๊ฐญ ๋ฝ์ ๊ฒฐํฉํ ํํ์ด๋ค. ํน์ ๋ ์ฝ๋๋ฟ๋ง ์๋๋ผ ๊ทธ ๋ ์ฝ๋ ์์ ๊ฐ๊ฒฉ๊น์ง ํจ๊ป ์ ๊ฐ๋ฒ๋ฆฐ๋ค.
๊ฒฐ๋ก ์ ์ผ๋ก, MySQL์ Repeatable Read ๊ฒฉ๋ฆฌ ์์ค์์ ๊ธฐ๋ณธ์ ์ผ๋ก MVCC๋ฅผ ํตํด ๋์ ๋์์ฑ์ ์ ๊ณตํ๋ฉด์๋, ๋ฒ์ ๊ฒ์์ด๋ ๋ฐฐํ์ ๋ฝ์ด ํ์ํ ์๊ฐ์๋ ๋ฅ์คํธ ํค ๋ฝ์ ๋์ํ์ฌ ๋น ๊ณต๊ฐ(Gap)๊น์ง ํ์ด๋ง์์ผ๋ก์จ Phantom Read๋ฅผ ์ต๋ํ ์ต์ ํ๊ณ ๋ฐ์ดํฐ์ ๋ ๋ฆฝ์ฑ(Isolation)์ ์ฒ ์ ํ๊ฒ ์ง์ผ๋ธ๋ค.
Consistency (์ผ๊ด์ฑ)
๋ง์ง๋ง์ผ๋ก ACID์ 'C'์ ํด๋นํ๋ ์ผ๊ด์ฑ(Consistency)์ด๋ค. ์์ ์ดํด๋ณธ ์์์ฑ(A), ๊ณ ๋ฆฝ์ฑ(I), ์ง์์ฑ(D)์ด ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ง(InnoDB์ ๋ก๊ทธ, ๋ฒํผ, ๋ฝ ๋ฑ)์ ์์คํ ์ ์ธ ๋ฉ์ปค๋์ฆ์ ํตํด ๊ฐ์ ์ ์ผ๋ก ๋ณด์ฅ๋๋ค๋ฉด, ์ผ๊ด์ฑ์ ์กฐ๊ธ ๊ฒฐ์ด ๋ค๋ฅด๋ค.
์ผ๊ด์ฑ์ ํธ๋์ญ์ ์ด ์๋ฃ๋ ํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ํ๊ฐ ์ฌ์ ์ ์ ์๋ '๊ท์น'์ ์๋ฐํ์ง ์์์ผ ํจ์ ์๋ฏธํ๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ์ ๊ณตํ๋ ์ ์ฝ์กฐ๊ฑด(Primary Key, Foreign Key, Unique, Not Null ๋ฑ)์ ํตํด ๊ธฐ๋ณธ์ ์ธ ๋ฌด๊ฒฐ์ฑ์ด ์ง์ผ์ง๋ค.
ํ์ง๋ง ์ง์ ํ ์๋ฏธ์ ์ผ๊ด์ฑ์ ์ฌ๊ธฐ์ ๋ํด ์ ํ๋ฆฌ์ผ์ด์ ๋ ๋ฒจ์ ๋น์ฆ๋์ค ๋ก์ง(์: ๊ณ์ข ์ด์ฒด ์ ๋ ๊ณ์ข ์์ก์ ํฉ์ ํญ์ ๊ฐ์์ผ ํ๋ค)์ด ์ฌ๋ฐ๋ฅด๊ฒ ์ค๊ณ๋๊ณ ๊ฒ์ฆ๋์ด์ผ๋ง ์๋ฒฝํ๊ฒ ๋ณด์ฅ๋ ์ ์๋ค. ์ฆ, ์ผ๊ด์ฑ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๊ธฐ๋ฅ๊ณผ ๊ฐ๋ฐ์์ ์ฌ๋ฐ๋ฅธ ์ค๊ณ๊ฐ ํฉ์ณ์ ธ์ ์์ฑ๋๋ ์์ญ์ด๋ค.
๋ง์น๋ฉฐ
์ง๊ธ๊น์ง ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ACID๋ผ๋ ๊ฐ๋ ฅํ ์์น์ ์ด๋ป๊ฒ ๋ด๋ถ์ ์ผ๋ก ๊ตฌํํ๊ณ ๋ณด์ฅํ๋์ง ์ดํด๋ณด์๋ค. ๋จ์ํ ์ถ์์ ์ธ ๊ฐ๋ ์ผ๋ก๋ง ์๊ณ ์๋ ACID๊ฐ, ์ค์ ๋ก๋ InnoDB์ ๋ฒํผ ๊ด๋ฆฌ ์ ์ฑ (Steal/No-Force)์ ๋ฐํ์ผ๋ก Redo/Undo ๋ก๊ทธ๋ผ๋ ์น์ดํ ๋ณต๊ตฌ ๋ฉ์ปค๋์ฆ์ ๊ฑฐ์น๊ณ , MVCC์ ์ ๊ตํ ์ ๊ธ ๋ฉ์ปค๋์ฆ์ ํตํด ์์ฑ๋๋ค๋ ์ฌ์ค์ ์ ์ ์์๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๊น์ ๋ด๋ถ ๋์ ์๋ฆฌ๋ฅผ ์ดํดํ๋ ๊ฒ์, ๋์์ฑ ์ด์๋ ์ฅ์ ์ํฉ์ ์ง๋ฉดํ์ ๋ ๊ทผ๋ณธ์ ์ธ ์์ธ์ ํ์ ํ๊ณ ๋ ์์ ์ ์ธ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ค๊ณํ๋ ๋ ๋ ํ ๋ฐ๊ฑฐ๋ฆ์ด ๋ ๊ฒ์ด๋ค.
'๊ฐ๋ฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| Node.js์ ์ด๋ฒคํธ ๋ฃจํ (0) | 2026.05.19 |
|---|---|
| MySQL๊ณผ MongoDB ๊ณต๊ฐ ์ธ๋ฑ์ค์ ์ฐจ์ด (1) | 2026.04.06 |
| RPC(Remote Procedure Call)๋ ๋ฌด์์ผ๊น? (0) | 2026.03.20 |
| Fielding์ด ๋งํ๋ ์ง์ง REST API (0) | 2026.03.20 |
| 1๊ฐ์ ์ฌ๊ณ ๊ฐ ์์ ๋ ๋์์ 100๋ช ์ ์ฌ์ฉ์๊ฐ ์์ฒญํ๋ฉด? (2) | 2026.03.17 |