May 01, 2021
ํธ๋์ญ์ ์ด๋ ๋ฐ์ดํฐ๋ฅผ ์ฌ๋ฐ๋ฅด๊ฒ ๋ณด์ฅํ๊ธฐ ์ํด ๊ณ ์๋ ๋ฐฉ๋ฒ์ด๋ค.
ํธ๋์ญ์ ์ด๋ก ์ ๊ด๊ณํ ๋ชจ๋ธ๊ณผ๋ ๋ค๋ฅธ ์ด๋ก ์ด๋ค. ํธ๋์ญ์ ๊ณผ ๊ด๊ณํ ๋ชจ๋ธ์์ ์ ๊ทํ ์ด๋ก ์ ๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ฌ๋ฐ๋ฅด๊ฒ ๋ณด์ฅํ๋ ๊ฒ์ ๋ชฉ์ ์ด์ง๋ง, ์ฐฉ์์ ์ด ๋ค๋ฅด๋ค
์ค์ ์์ฉํ๋ก๊ทธ๋จ ๊ฐ๋ฐ์์๋ ์์ชฝ ๋ชจ๋ ํ์ํ๋ฉฐ ์ํธ ๋ณด์์ ์ธ ๊ด๊ณ๋ผ๊ณ ํ ์ ์๋ค. ํธ๋์ญ์ ๊ณผ ๊ด๊ณํ ๋ชจ๋ธ ๋ ๊ฐ์ง๋ฅผ ๋์์ ๊ตฌํํด์ผ ๋น๋ก์ ๋ฐ์ดํฐ์ ์ ํฉ์ฑ์ ๋ณด์ฅํ ์ ์๋ค.
ํธ๋์ญ์ ์ด ์๊ตฌ๋๋ ๋ฐฐ๊ฒฝ์๋ DB ์๋ฒ์ ์ฌ๋ฌ ๊ฐ์ ํด๋ผ์ด์ธํธ๋ก๋ถํฐ ๋์์ ์์ธ์ค๊ฐ ๋ฐ์ํ๋ ์ํฉ์ด๋ DB ์๋ฒ ๋๋ ์์ฉํ๋ก๊ทธ๋จ์ด ๊ฐฑ์ ์ ์ฒ๋ฆฌํ๋ ๋์ค์ ์ค๋จ๋๋ ์ฌํ์์ ๋ฐ์ดํฐ์ ๋ถ์ ํฉ์ ๋ฐฉ์งํ๊ณ ์ ํ๋ ์๊ตฌ๊ฐ ์๋ค.
๊ฐ์ฅ ์ ๋ช ํ ์์๋ ์ํ์ ๊ณ์ข๋ฅผ ๋ณ๋ ฌ ์ฒ๋ฆฌํ๋ ์๋ค.
ํธ๋์ญ์ 1 | ํธ๋์ญ์ 2 | ๊ณ์ข์์ก |
---|---|---|
(์์) ์์ก์ ์ฝ์: 1,000,000 | 1,000,000 | |
(์์) ์์ก์ ์ฝ์: 1,000,000 | ||
(์ ๊ธ) +300,000 | ||
์์ก ๊ธฐ๋ก: 1,300,000 (์ปค๋ฐ) | 1,300,000 | |
(์ธ์ถ) -200,000 | ||
์์ก ๊ธฐ๋ก: 800,000 (์ปค๋ฐ) | 800,000 |
๋ ๊ฐ์ ์ฒ๋ฆฌ๊ฐ ๋์์ ์คํ๋๋ฉฐ ํธ๋์ญ์ 1์ด ์์ก์ ์์ฑํ๊ธฐ ์ ์ ํธ๋์ญ์ 2๊ฐ ์์ก์ ์ฝ๊ธฐ ๋๋ฌธ์ ๋ฐ๋ ์์ก์ด ์์ด์ง๋ค. ์ค ์์ก์ 1,100,000์ ์ด์ด์ผ ํ์ง๋ง 800,000์๋ง ๋จ๋๋ค.
๋์์ ์์ธ์ค๋ฅผ ํจ์ผ๋ก์จ ๋ฐ์ํ๋ ๋ฐ์ดํฐ์ ๋ถ์ ํฉ์ ๋ง๋ ๋์ ์คํ ์ ํ์ด ํธ๋์ญ์ ์ ์ฒซ ๋ฒ์งธ ๊ธฐ๋ฅ์ด๋ค.
์์ํ์ง ๋ชปํ ์ฌํ๊ฐ ์๊ฒผ์ ๋ ์ด๋ป๊ฒ ํด์ผ ๋ฐ์ดํฐ๋ฅผ ์ฌ๋ฐ๋ฅด๊ฒ ์ ์งํด์ผ ํ ๊น?
๋ง์ฝ ํธ๋์ญ์ 2๊ฐ ์์ก์ ๊ธฐ๋กํ๊ธฐ ์ ์ ์์คํ ์ด ํฌ๋์ ๋๋๋ฉด ์ด๋ฒ์๋ ๋์ ์ฐพ์์ผ๋ฏ๋ก ๊ณ์ข์ ์์ก์ด ์ฆ๊ฐํ๊ฒ ๋๋ค.
๋ํ, ํธ๋์ญ์ ์ด ์๋ค๋ฉด ์์คํ ์ด ํฌ๋์๋๊ธฐ ์ง์ ์ ์ด๋๊น์ง ์ฒ๋ฆฌ๋ฅผ ์คํํ๋์ง ์ด๋ป๊ฒ ์ถ์ ํ ์ ์์๊น?
์์ฉํ๋ก๊ทธ๋จ์์ ์ฒ๋ฆฌ๊ฐ ์ด๋๊น์ง ์คํ๋๋์ง ๊ฐ์งํ๊ณ ํ์ํ ๋ณต๊ตฌ ์์ ์ ์ฒ๋ฆฌํ๊ธฐ ์ํ ๊ธฐ๋ฅ์ ๊ตฌํํ์ง ์์ผ๋ฉด ์ ๋๋ค.
๊ทธ๋ฌ๋ ํธ๋์ญ์ ์ด ์๋ค๋ฉด ๋น์ ์์ ์ผ๋ก ์ค๋จ๋ ์ฒ๋ฆฌ๋ ๋กค๋ฐฑ๋๋ฉฐ ์์คํ ์ด๋ DB ์๋ฒ๊ฐ ํฌ๋์๋ผ๋ ์ฌ๊ธฐ๋ํ๋ฉด ์๋์ผ๋ก ํ์ํ ๋ณต๊ตฌ ์์ ์ ์ํํ๋ค.
ํธ๋์ญ์ ์ผ๋ก ์ ๊ณต๋๋ ๊ธฐ๋ฅ์ ๋ณธ์ง์ ์ผ๋ก ๋์ ์คํ ์ ์ด์ ํฌ๋์ ๋ณต๊ตฌ ๋ ๊ฐ์ง๋ค.
๋ถ์ ํฉ์ ์ผ์ผํค์ง ์๋ ๊ฐ์ฅ ์ฌ์ด ํด๊ฒฐ๋ฒ์ ์ฌ๋ฌ ๊ฐ์ ํด๋ผ์ด์ธํธ๋ก๋ถํฐ ์ฒ๋ฆฌ๋ฅผ ๋ณ๋ ฌ๋ก ํ์ง ์๋ ๊ฒ์ด๋ค. ์ฆ, ํ๋ก์ธ์ค๋ฅผ ํ๋์ฉ ์ฐจ๋ก๋๋ก ์ํํ๋ฉด ๋์ ์คํํ๋ ๋ฐ์ํ๋ ๋ถ์ ํฉ์ ์ผ์ด๋์ง ์๋๋ค.
ํ์ง๋ง ๋ณ๋ ฌํ ํ์ง ์๋ ๊ตฌ์กฐ๋ ์ฒ๋ฆฌ ํจ์จ์ด ๋ฎ์์ ธ ์ฑ๋ฅ์ ๋ฐํํ์ง ๋ชปํ๋ฏ๋ก ํ์ค์ ์ธ ๋์ฑ ์ด๋ผ ํ ์ ์๋ค.
์ค์ DB์์๋ ์๋ฐฑ, ๋์ ๋ฐ๋ผ์๋ ์์ฒ ๊ฐ์ ํธ๋์ญ์ ์ด ๋์์ ์ํ๋๋ ๊ฒ๋ ๋๋ฌธ ์ผ์ด ์๋๋ค.
ํธ๋์ญ์ ์ ์ผ๋ จ์ ์์ ์ ์ ๋ฆฌํ ๊ฒ์ด๋ค. ํธ๋์ญ์ ์ ์ฌ๋ฌ ๊ฐ์ ๋ฐ์ดํฐ ํญ๋ชฉ์ ์กฐ์์ผ๋ก ๋ถํดํ ์ ์๋ค.
โ ์ฒ๋ฆฌ์ ๋จ์๋ ๊ฐ ๋ฐ์ดํฐ ํญ๋ชฉ์ ๋ํด ์ฝ๊ธฐ๋ ์ฐ๊ธฐ์ ๊ฐ์ ์กฐ์์ด๋ค.
ํธ๋์ญ์ ์ ๋ณ๋ ฌ๋ก ๋์ ์คํํ๋ ๊ฒ์ ๊ฐ๋ณ ๋ฐ์ดํฐ ํญ๋ชฉ์ ์กฐ์์ ๋์์ ์คํํ๋ ๊ฒ๊ณผ ๊ฐ๋ค. ๊ทธ๋ฌ๋ ์ฒ๋ฆฌ ๋ด์ฉ์ ๋ฐ๋ผ์๋ ๋ค๋ฅธ ํธ๋์ญ์ ์ ์ํฅ์ ๋ฏธ์น๋ ๊ฒ์ด ์๋ค.
ํธ๋์ญ์ ์ฌ์ด์์ ์๋ก์ ๊ฒฐ๊ณผ์ ์ํฅ์ ์ฃผ์ง ์๋๋ก ์ค์ผ์ค๋งํ ์ ์๋ค๋ฉด ์ด ํธ๋์ญ์ ์ ๋ณ๋ ฌ๋ก ์คํํ ์ ์๋ค
ํธ๋์ญ์ ์ ๋ฐ์ดํฐ๋ฅผ ์ฌ๋ฐ๋ฅด๊ฒ ์ ์งํ๋ ๋ฐฉ๋ฒ์ด๋ค.
๋ฐ์ดํฐ๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ์ ์ง๋๋ ์ํ๋ ๊ฐ๋ณ ํธ๋์ญ์ ์ ํ ๊ฐ์ฉ ์ฐจ๋ก๋ก ์คํํ ๋์ ๊ฐ์ ๊ฒฐ๊ณผ๊ฐ ๋ ๊ฒ์ด๋ค.
ํ ๊ฐ์ฉ ์ฐจ๋ก๋๋ก ์คํํ๋ ์ค์ผ์ค์ ์ง๋ ฌํ๋ ์ค์ผ์ค์ด๋ผ ํ๋ค. ๊ฐ๋ณ ํธ๋์ญ์ ์ ์ง๋ ฌ๋ก ์คํํ ๋์ ๊ฐ์ ๊ฒฐ๊ณผ๊ฐ ๋์ค๋ ์ค์ผ์ค์ด๋ผ๋ฉด ์ฒ๋ฆฌ๋ฅผ ๋ณ๋ ฌ๋ก ์คํํด๋ ์ํฅ์ด ์๋ค๋ ๊ฒ์ด๋ฏ๋ก ํธ๋์ญ์ ์ ์คํํ ํ์ ๋ฐ์ดํฐ๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ์ ์ง๋๋ค๊ณ ํ ์ ์๋ค.
โ ์ฌ๋ฐ๋ฅธ ๊ฒฐ๊ณผ๊ฐ ๋์ค๋ ์ค์ผ์ค์ ์ง๋ ฌํ๋ ์ค์ผ์ค๊ณผ ๊ฐ์ ๊ฒฐ๊ณผ๊ฐ ๋์ค๋ ์ค์ผ์ค์ ๋งํ๋ค.
์ค์ผ์ค๋ฌ์ ์ฑ๋ฅ์์ ์ค์ํ ์ ์ ๋๊ฐ์ง๋ค.
RDB์์๋ ์ ๊ธ ์ค์ผ์ค๋ฌ๋ผ๋ ๋ก์ง์ ์ผ๋ฐ์ ์ผ๋ก ๋๋ฆฌ ์ฌ์ฉํ๋ค. ์ ๊ธ ์ค์ผ์ค๋ฌ๋ ๊ตฌํ์ด ๋น๊ต์ ์ฌ์ด ํธ์ด๋ฉฐ ์ผ๋ฐ์ ์ผ๋ก ์ถฉ๋ถํ ์ฑ๋ฅ์ ๋ผ ์ ์๋ค๊ณ ์๋ ค์ก๋ค.
ํธ๋์ญ์ ์ ํฌํจ๋ ๋ชจ๋ ์์ ์ด ์ฑ๊ณต(Commit) ๋๋ ์คํจ(Abort)ํ๋ ์ฑ์ง์ ์์์ฑ์ด๋ผ๊ณ ํ๋ค.
์คํจํ ๊ฒฝ์ฐ๋ฅผ SQL์์๋ ๋กค๋ฐฑ(ROLLBACK)์ด๋ผ๊ณ ํ๊ณ ํธ๋์ญ์ ์ด๋ก ์์ Abort๋ผ๊ณ ํ๋ค.
์์์ฑ์ ๋ค๋ฅธ ๋ง๋ก ํธ๋์ญ์ ์ด ์ด์ค๊ฐํ ์ํ๊ฐ ๋์ง ์๊ฒ ํ๋ ์ฑ์ง์ด๋ค.
โ ์์ฉํ๋ก๊ทธ๋จ์ ํธ๋์ญ์ ์ ์คํํ ํ์ ๋ ๊ฐ์ ์ํ๋ง ๊ณ ๋ คํ๋ฉด ๋๋ค.
์ด๋ก ์ธํด ์๋ฌ์ฒ๋ฆฌ๊ฐ ๋งค์ฐ ๋จ์ํด์ง๋ค๋ ์ฅ์ ์ด ์๋ค. Abort ๋๋ฉด ํธ๋์ญ์ ์ ์ฒ์์ผ๋ก ๋ค์ ํ๋ฉด ๋๋ค.
์ด์ฒ๋ผ ํธ๋ฆฌํ ์์์ฑ์ด์ง๋ง ํธ๋์ญ์ ์ด Abort ๋ ๊ฐ๋ฅ์ฑ์ด 0์ด ๋ ์๋ ์๋ค. ํธ๋์ญ์ ์ ๋ค์ํ ์ด์ ๋ก ์คํจํ ๊ฐ๋ฅ์ฑ์ด ์๋ค. ๋ณด์ฅ๋๋ ๊ฒ์ ์คํ ํ์ ์ํ๊ฐ ์ฑ๊ณต์ธ์ง ์คํจ์ธ์ง ๋ ๊ฐ์ง๊ฐ ๋๋ค๋ ๊ฒ๋ฟ์ด๋ค.
Abort ํ ๊ฐ๋ฅ์ฑ์ด 0์ด ๋ ์ ์์ผ๋ฏ๋ก ์์ฉํ๋ก๊ทธ๋จ์ Abort๊ฐ ๋ฐ์ํ์ ๋์ ์ค๋ฅ์ฒ๋ฆฌ๋ง์ ๋ฐ๋์ ๊ตฌํํด์ผ ํ๋ค. ์ผ๋ฐ์ ์ผ๋ก ์๋ฌ ์ฒ๋ฆฌ๋ก ์คํํด์ผ ํ ๊ฒ์ ํธ๋์ญ์ ์ ๋ฆฌํธ๋ผ์ด(์ฌ์คํ)๋ค.
ํธ๋์ญ์ ์ ๋ฐ๋์ ์ฑ๊ณตํ๋ค๊ณ ๋ณด์ฅํ๋ ๊ฒ์ด ์๋๋ผ ์คํจํ๋ฉด ์ทจ์๋๋ค๋ ๊ฒ์ ๋ณด์ฅํ๋ ๊ฒ์ ์ง๋์ง ์๋๋ค.
์์์ฑ์ ํธ๋์ญ์ ์ด ์คํจํ์ ๋ ๋กค๋ฐฑํ ์ ์๋ค๋ ๊ฒ์ด๋ค.
Abort ํ ๊ฒ์ ์์ํ์ง ์์ ์์ฉํ๋ก๊ทธ๋จ, ์ฆ ์ค๋ฅ ์ฒ๋ฆฌ(๋ฆฌํธ๋ผ์ด)๋ฅผ ๊ตฌํํ์ง ์์ ์์ฉํ๋ก๊ทธ๋จ์ ๊ทผ๋ณธ์ ์ผ๋ก ํธ๋์ญ์ ์ ์ฌ์ฉ๋ฒ ์์ฒด๊ฐ ํ๋ ธ๋ค๊ณ ํ ์ ์๋ค.
์ผ๊ด์ฑ์ด๋ ํธ๋์ญ์ ์ ์ค์ํ ์ ํ์๋ ๋ฐ์ดํฐ์ ์ผ๊ด์ฑ์ด ์์๋์ง ์์์ผ ํ๋ค๋ ์ฑ์ง์ด๋ค.
์๋ฅผ ๋ค์ด RDB์์ ํธ๋์ญ์ ์คํ ์ ์ DB์ ์ํ๋ ์ผ๊ด์ฑ์ด ์๋ ๊ฒ(๋ฐ์ดํฐ์ ๋ถ์ ํฉ์ด ์์)์ด๋ฉฐ,
ํธ๋์ญ์ ์คํ ํ์ ๋ฐ์ดํฐ์ ๋ณ๊ฒฝ์ ์์ง๋ง, ์ผ๊ด์ฑ์ด ์ ์ง๋๊ณ ์๋ค. โ ํธ๋์ญ์ ์ ์คํํ๋ฉด DB๋ ์ผ๊ด์ฑ์ด ์๋ ์ํ์์ ๋ค๋ฅธ ์ผ๊ด์ฑ์ด ์๋ ์ํ๋ก ์ ํํ๋ค๊ณ ํ ์ ์๋ค.
์ด๋ค ์ํ๊ฐ ์ผ๊ด์ฑ์ด ์๋๊ฐ๋ฅผ ๊ฒฐ์ ํ๋ ๊ฒ์ DB๊ฐ ์๋๋ฉฐ, ๋ฐ์ดํฐ์ ์๋ฏธ๋ฅผ ์ดํดํ๊ณ ์์ง ์๋ค.
๋ฐ์ดํฐ์ ์๋ฏธ๋ฅผ ๋ถ์ฌํ๋ ๊ฒ์ ์์ฉํ๋ก๊ทธ๋จ์ ์ญํ ์ด๋ฉฐ ์ผ๊ด์ฑ์ด ์๋์ง ํ๋จํ๋ ๊ฒ์ ์์ฉํ๋ก๊ทธ๋จ๋ฐ์ ํ ์ ์๋ค. โ ํธ๋์ญ์ ์ ๊ธฐ๋ฅ๋ง์ผ๋ก ์ผ๊ด์ฑ์ ๋ณด์ฅํ ์ ์๋ค.
๊ฒฉ๋ฆฌ์ฑ์ด๋ ๋์์ ์คํํ๋ ์ฌ๋ฌ ๊ฐ์ ํธ๋์ญ์ ์ด ์๋ก ์ํฅ์ ์ฃผ์ง ์๋ ์ฑ์ง์ด๋ค.
๊ฒฉ๋ฆฌ์ฑ์ ํด์น๋ ์ค์ผ์ค์ ์ค์ผ์ค๋ฌ๊ฐ ์ฌ์ ์ ์ ๊ฑฐํ์ง๋ง, ๋ฌธ์ ๋ฅผ ๊ฐ์งํ์ ๋ ๋กค๋ฐฑ ๋ ์๋ ์๋ค. ๊ฒฉ๋ฆฌ์ฑ์ ํธ๋์ญ์ ์ ๋์ ์คํ ์ ์ด์ ๊ดํ ์ฑ์ง์ ๊ฐ์ฅ ์ ๋ํ๋ธ ๊ฒ์ด๋ผ๊ณ ํ ์ ์๋ค.
์์์ฑ์ด๋ ์ผ๋จ ์ปค๋ฐ์ด ์๋ฃ๋ ํธ๋์ญ์ ์ด ์์๋์ง ์๋ ์ฑ์ง์ด๋ค.
ํ์ ๋ ํธ๋์ญ์ ์ ์ทจ์ํ ์ ์๊ฒ ๋ก์ง์ ๊ตฌํํ๋ ๊ฒ์ ๋ฌผ๋ก ์ด๊ณ , ์์คํ ์ด ํฌ๋์ ๋์ ๋๋ ์ฌ๊ธฐ๋ํ ๋ค์์ ๋ณต๊ตฌํ์ฌ ๋ฐ์ดํฐ๋ฅผ ํฌ๋์ ์ ์ ์ํ๋ก ๋ณต์ํ ์ ์๋ค๋ ์ ์ด ์ค์ํ๋ค.
ํฌ๋์ ๋ณต๊ตฌ ํ์๋ ํฌ๋์ ์ ์ ์ปค๋ฐํ ๋ฐ์ดํฐ๋ง ๋จ๊ฒ ๋๋ค. ์ปค๋ฐ์ด ์๋ฃ๋ ์์ ์๋ DB์ ์ผ๊ด์ฑ์ด ๋ณด์ฅ๋ผ ์์ผ๋ฏ๋ก ํฌ๋์ ๋ณต๊ตฌ๊ฐ ์๋ฃ๋๋ฉด ์ผ๊ด์ฑ์ ๋ํด์ ๊ฑฑ์ ํ ํ์ ์๋ค.
ACID๋ ํธ๋์ญ์ ์ด ๊ฐ์ ธ์ผ ํ ์ฑ์ง์ด๋ค. ์ด๋ฒ์๋ ํธ๋์ญ์ ์์ ์์ด์๋ ์ ๋๋ ์ํ์ ๊ดํด ์ค๋ช ํ๋ค.
ํธ๋์ญ์ 1 | ํธ๋์ญ์ 2 | ๊ณ์ข์์ก |
---|---|---|
(์์) ์์ก์ ์ฝ์: 1,000,000 | 1,000,000 | |
(์์) ์์ก์ ์ฝ์: 1,000,000 | ||
(์ ๊ธ) +300,000 | ||
์์ก ๊ธฐ๋ก: 1,300,000 (์ปค๋ฐ) | 1,300,000 | |
(์ธ์ถ) -200,000 | ||
์์ก ๊ธฐ๋ก: 800,000 (์ปค๋ฐ) | 800,000 |
๋ง์ฝ ํธ๋์ญ์ 2๊ฐ ํธ๋์ญ์ 1์ด ๊ฐฑ์ ํ๊ธฐ ์ ์ ๋ฐ์ดํฐ๋ฅผ ๊ธฐ์ค์ผ๋ก ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ๊ฐฑ์ ํ๋ค๋ฉด ํธ๋์ญ์ 1๋ก ๋ฐ์ํ ๊ฐฑ์ ์ ์ ์ค๋ ๊ฒ์ด๋ค. โ ๊ฐฑ์ ๋ถ์ค
์ ๊ทธ๋ฆผ์ ์ ํ์ ์ธ ๊ฐฑ์ ๋ถ์ค์ ์๋ค.
์ด๋ค ํธ๋์ญ์ ์ ์คํ ๊ฒฐ๊ณผ๊ฐ ๋ค๋ฅธ ํธ๋์ญ์ ์ ์คํ ๊ฒฐ๊ณผ์ ์ํฅ์ ์ฃผ๋ฉด ํธ๋์ญ์ ์ด ์ฝ์ ๋ฐ์ดํฐ์ ์ ํฉ์ฑ์ ๋ณด์ฅ๋์ง ์๋๋ค. โ ๋ชจ์์ ํ๋ (Inconsistent read)
ํธ๋์ญ์ 1 | ํธ๋์ญ์ 2 | X ๊ณ์ข์์ก | Y ๊ณ์ข์์ก |
---|---|---|---|
(์์) ์์ก์ ์ฝ์: 1,000,000 | 1,000,000 | 1,000,000 | |
(์ธ์ถ) -100,000 | |||
์์ก ๊ธฐ๋ก: 900,000 | 900,000 | ||
(์์) ์์ก X ์ฝ์: 900,000 // ์์ก Y ์ฝ์: 1,000,000 | 1,300,000 | ||
์์ก ํฉ๊ณ ๊ณ์ฐ: 1,900,000 (์ปค๋ฐ) | |||
์์ก Y ์ฝ์: 1,000,000 | |||
(์ ๊ธ) +100,000 | |||
์์ก Y ๊ธฐ๋ก: 1,100,000(์ปค๋ฐ) | 1,100,000 |
ํธ๋์ญ์ 1์ ์ํด ๊ณ์ข X์ ๊ณ์ข Y์ ์์ก์ ๊ฐ๊ฐ ๊ฐ์ก, ์ฆ์กํ์ง๋ง, ํฉ๊ณ๋ ๋ณํ์ง ์๋๋ค. ๊ทธ๋ฐ๋ฐ ํธ๋์ญ์ 2๊ฐ ์ฝ์ ๊ธ์ก์ ์๋ ์์ด์ผ ํ ๋๋ณด๋ค 10๋ง์์ด ์ ๋ค.
๋ํฐ ๋ฆฌ๋๋ ์์ง ์ปค๋ฐ๋์ง ์์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์์ผ๋ก์จ ๋ฐ์ํ๋ ๋น์ ์ ์ํ๋ค.
ํธ๋์ญ์ 1 | ํธ๋์ญ์ 2 | ๊ณ์ข์์ก |
---|---|---|
(์์) ์์ก์ ์ฝ์: 1,000,000 | 1,000,000 | |
(์ ๊ธ) +300,000 | ||
์์ก ๊ธฐ๋ก: 1,300,000 (์ปค๋ฐ) | 1,300,000 | |
(์์) ์์ก์ ์ฝ์: 1,300,000 | ||
ROLLBACK | ||
(์ธ์ถ) -200,000 | ||
์์ก ๊ธฐ๋ก: 1,100,000 (์ปค๋ฐ) | 1,100,000 |
ํธ๋์ญ์ 1์ด ์ด๋ค ์ด์ ๋ก Abort(ROLLBACK)ํ ๊ฒฝ์ฐ ํธ๋์ญ์ 2๊ฐ ์ฝ์ ๋ฐ์ดํฐ๋ ์ฌ๋ฐ๋ฅด์ง ์์ ๋ฐ์ดํฐ๊ฐ ๋๋ค.
ํธ๋์ญ์ 2๋ 20๋ง์์ ์ฐพ๋ ์์ ์ด์ง๋ง ํธ๋์ญ์ 1์ ์ํด ๋ํฐ ๋ฆฌ๋๋ ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ณ ์์ด์ ๊ณ์ข์ ์์ก์ด ์๋ ์์ด์ผํ ๊ธ์ก๋ณด๋ค 30๋ง์์ด ๋์๋ค.
๋ ผ ๋ฆฌํผํฐ๋ธ ๋ฆฌ๋๋ ํ ๊ฐ์ ํธ๋์ญ์ ์ ๊ฐ์ ๋ฐ์ดํฐ ํญ๋ชฉ์ ์ฌ๋ฌ ๋ฒ ์ฝ์ ๋ ๊ทธ ํธ๋์ญ์ ์ด ์ฐ๊ธฐ๋ฅผ ํ์ง ์๋๋ฐ๋ ๊ฐ์ ๋ฐ๊พธ์ด ๋ฒ๋ฆฌ๋ ํ์์ด๋ค
ํธ๋์ญ์ 1 | ํธ๋์ญ์ 2 | ๊ณ์ข์์ก |
---|---|---|
(์์) ์์ก์ ์ฝ์: 1,000,000 | 1,000,000 | |
(์์) ์์ก์ ์ฝ์: 1,000,000 | ||
(์ธ์ถ) -200,000 | ||
์์ก ๊ธฐ๋ก: 800,000 (์ปค๋ฐ) | ||
์์ก์ ์ฝ์: 800,000(์ปค๋ฐ) |
ํธ๋์ญ์ 1์ ์ง๊ณ์ฒ๋ฆฌ๋ค. ํธ๋์ญ์ 1์ด ์ข ๋ฃ๋์ง ์์ ์ฌ์ด์ ํธ๋์ญ์ 1์ ์ด๋ฏธ ์ฐธ์กฐํ ๋ฐ์ดํฐ๋ ํธ๋์ญ์ 2์ ์ํด ๋ฐ๋๋ค. โ ๋ ๋ฒ์งธ๋ก ๊ฐ์ ๊ณ์ข์ ์์ก์ ์ฝ์ ๋๋ ์์ก์ด ์ค๊ฒ ๋๋ค.
๋ ผ ๋ฆฌํผํฐ๋ธ ๋ฆฌ๋๋ ๊ฐ์ ๋ฐ์ดํฐ ํญ๋ชฉ์ ์ฌ๋ฌ ๋ฒ ์ฝ์ ๋ ์ด์ ๊ณผ ๋ค๋ฅธ ๊ฒฐ๊ณผ๊ฐ ๋์ค๋ ๋ฌธ์ ๋ค.
โ ์๊ฐ ์ถ์ ๋ฐ๋ผ์ ์ ํฉ์ฑ์ด ๋ณด์ฅ๋์ง ์๋ ๋ฌธ์ ๋ค.
ํฌํ ๋ฆฌ๋๋ SQL๊ณผ ๊ฐ์ ๋ฒ์ ๊ฒ์์ด ์๋ ์์คํ ์์ ์ฃผ๋ก ์ผ์ด๋๋ ๋ฌธ์ ๋ค. ๊ธฐ์กด์ ๋ฐ์ดํฐ ํญ๋ชฉ ๊ฐ์ ์ด์์ ์ผ์ผํค๋ ๊ฒ์ด ์๋๋ผ ๊ณผ๊ฑฐ์ ์์๋ ๋ฐ์ดํฐ๊ฐ ๋์ค๋ ๊ฒ์ด๋ค.
ํธ๋์ญ์ 1 | ํธ๋์ญ์ 2 | ๊ณ์ข์์ก |
---|---|---|
(์ค๋น) | ||
CREATE TABLE t (id INT UNSIGNED NOT NULL, PRIMARY KEY(ID)); | ||
INSERT INTO t VALUES(1) COMMIT | ||
(์์) SELECT * FROM t; (๊ฒฐ๊ณผ) 1 | ||
(์์) INSERT INTO t VALUES(2); COMMIT | ||
SELECT * FROM t; โ (๊ฒฐ๊ณผ) 1, 2 COMMIT |
ํธ๋์ญ์ 1์ ์๋ 1ํ๋ง ์ฝ์ด์ผ ํ๋ ํธ๋์ญ์ 2์ ์ํด ์๋ก์ด ํ์ด ์ฝ์ ๋ ๋ค์์๋ ๊ทธ ํ๋ ์ฝ์ด๋ฒ๋ฆฌ๊ฒ ๋๋ค.
๋น์ ์ ์ํ๋ ๋ชจ๋ ๋์์ฑ ๋ฌธ์ ๋ค. ๊ฐ ์ฒ๋ฆฌ๋ฅผ ์์๋๋ก ์ํํ๋ฉด ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ง ์๋๋ค. ์ค์ผ์ค์ด๋ผ๋ ๊ด์ ์์ ๋ณด๋ฉด ์์์ ์ธ๊ธํ ๋น์ ์ ์ํ๊ฐ ๋ฐ์ํ๋ ์ค์ผ์ค์ ์๋ ์คํํ๋ฉด ์ ๋๋ ๊ฒ์ด๋ค. ๋ฐ๋ผ์ ๊ทธ๋ฐ ์ค์ผ์ค์ด ๋ฐ์ํ์ง ์๋๋ก ํธ๋์ญ์ ์ ์ค์ผ์ค์ ๊ฒฐ์ ํด์ผ ํ๋ค.
RDB์์ ๊ฐ์ฅ ์ผ๋ฐ์ ์ธ ๋ฐฉ๋ฒ์ ์ ๊ธ์ ์ฌ์ฉํด ๋จ๋ ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ์ด๋ค. ์ผ๋ฐ์ ์ผ๋ก ์ ๊ธ์ ์ด์ฉํ ์ค์ผ์ค์ ๋ฝํน์ค์ผ์ค์ด๋ผ๊ณ ํ๋ค. ์ด๋ค ํ(=๋ฐ์ดํฐ ํญ๋ชฉ)์ด ํ์ํ์ง๋ ์ค์ ์ฟผ๋ฆฌ๋ฅผ ์คํํด์ผ ํ๋ฏ๋ก ํธ๋์ญ์ ์ ์คํํ๊ธฐ ์ ๊น์ง๋ ์ค์ผ์ค์ด ๊ฒฐ์ ํ ์ ์๋ค.
โ ์ฟผ๋ฆฌ์ ์คํ์ ๋ฐ๋ผ ํธ๋์ญ์ ๋ด์ ๋ฐ์ดํฐ์ ์ผ๊ด์ฑ์ด ๋ฌด๋์ง์ง ์๋๋ก ์์ ๋์์ด ๋๋ ํ์ ๋ํด ๊ทธ ์์ ์ด ์ํ๋๊ธฐ ์ ์ ์ ๊ธ์ ๊ฑฐ๋ ๋ฐฉ๋ฒ์ ์ฑํํ๊ณ ์๋ค.
์ ๊ธ์ ์ฌ์ฉํ๋ฉด ๋ฐ์ดํฐ์ ์ ํฉ์ฑ์ ํด์น๋ ๊ฐ์ข ๋น์ ์ ์ํ๊ฐ ๋ฐ์ํ์ง ์๋ ์ค์ผ์ค์ด ๋๋๋ก ๊ฒฝํฉํ๋ ๋ฐ์ดํฐ ํญ๋ชฉ์ ์์ธ์ค๋ฅผ ํ์๋ก ํ๋ ํธ๋์ญ์ ์ ์ฐจ๋จํ๊ฒ ๋๋ค.
ํธ๋์ญ์ ์ด ํ์๋ก ํ๋ ๋ฐ์ดํฐ ํญ๋ชฉ์ ์์๋๋ก ์ ๊ทธ๋ ์ํคํ ์ฒ๋ ๊ต์ฐฉ ์ํ๋ผ๋ ๋ฌธ์ ๊ฐ ์๋ค. RDB๋ ํ ์์ฃผ๋์ด ์ ๊ธ ํน์ ํ์ด์ง ์์ค์ ์ ๊ธ์ผ๋ก ๊ตฌํ๋ผ ์์ผ๋ฉฐ ์ด๋ฌํ ํ์์ด ์ผ์ด๋๋ค.
ํธ๋์ญ์ 1 | ํธ๋์ญ์ 2 |
---|---|
๊ณ์ข X ์ ๊ธ | |
๊ณ์ข X ์ฝ์: 1,000,000 | |
(์ธ์ถ) -100,000 | |
์์ก ๊ธฐ๋ก: 900,000 | |
๊ณ์ข Y๋ฅผ ์ ๊ธ | |
๊ณ์ข Y ์ฝ์: 1,000,000 | |
(์ธ์ถ) -100,000 | |
์์ก ๊ธฐ๋ก: 900,000 | |
๊ณ์ข Y ์ ๊ธ | |
์ฐจ๋จ | |
๊ณ์ข X ์ ๊ธ | |
์ฐจ๋จ |
์ ํ์ฒ๋ผ ์์ชฝ์ ํธ๋์ญ์ ์ด ์๋ก ์ฐจ๋จํ๋ ์ํ๊ฐ ๋๋ฉด ์ด๋ ์ชฝ๋ ํธ๋์ญ์ ๋ ์งํํ ์ ์๋ ๋ง๋ค๋ฅธ ๊ธธ์ด ๋์ด ๋ฒ๋ฆฐ๋ค. โ ๊ต์ฐฉ ์ํ
๊ต์ฐฉ ์ํ๊ฐ ๋ฐ์ํ๋ค๋ ๊ฒ์ ๋ง์ฝ์ ์ ๊ธ์ ํ์ง ์๊ณ ๊ทธ๋๋ก ์ฒ๋ฆฌํ๋ค๋ฉด ๋ฐ์ดํฐ์ ๋ถ์ ํฉ์ด ์ผ์ด๋๋ค๋ ์๋ฏธ๋ค. ์ด๋ฐ ์ค์ผ์ค์ ํ์ฉํ ์ ์์ผ๋ฏ๋ก ๊ต์ฐฉ ์ํ์ ๋น ์ง ํธ๋์ญ์ ์ ๋กค๋ฐฑํด์ผ ํ๋ค.
๊ต์ฐฉ ์ํ๋ฅผ ์ด๋ป๊ฒ ํด์ํ๋๊ฐ๋ ๊ตฌํํ๊ธฐ์ ๋ฐ๋ผ ๋ค๋ฅด๋ค. ์๋ฅผ ๋ค์ด ๊ต์ฐฉ์ํ๋ฅผ ๊ฐ์งํ ์ ์๋ค๋ฉด ์์ชฝ ๋ชจ๋ ๋กค๋ฐฑํ๊ฑฐ๋, ํ์ชฝ๋ง ๋กค๋ฐฑํ๊ฑฐ๋ ํ๋๋ง ๋กค๋ฐฑํ๋ค๋ฉด ์ด๋ค ๊ธฐ์ค์ผ๋ก ๋กค๋ฐฑํ๋ ์ชฝ์ ์ ํ ๊ฒ์ธ๊ฐ ๋ฑ์ด๋ค.
๊ต์ฐฉ ์ํ์ ๊ฐ์ง ๊ธฐ๋ฅ์ด ์๋ค๋ฉด ์ ๊ธ์ด ํ์์์๋ ๋๊น์ง ๊ธฐ๋ค๋ ค์ผ ํ ๊ฒ์ด๋ค.
๊ต์ฐฉ ์ํ๋ ์ผ๋ฐ์ ์ผ๋ก ๋ฝํน์ค์ผ์ค๋ฌ๊ฐ ์๋ RDB์์๋ ๋ฐ๋์ ์ผ์ด๋ ์ ์๋ ๋ฌธ์ ๋ค. ๊ทธ ๊ฒฐ๊ณผ ํธ๋์ญ์ ์ Abort ํ๋ฏ๋ก ์ผ๋ฐ์ ์ธ DB ์์ฉํ๋ก๊ทธ๋จ์ ์ค๋ฅ ์ฒ๋ฆฌ๊ฐ ํ์ํ๋ค.
๊ฐ์ฅ ๊ฒฉ๋ฆฌ์ฑ(๋ ๋ฆฝ์ฑ) ๋๊ณ ํธ๋์ญ์ ์ ์คํํ ๊ฒฐ๊ณผ๊ฐ ์ง๋ ฌํ๋ ์ค์ผ์ค๊ณผ ๊ฐ์ ๊ฒฐ๊ณผ๊ฐ ๋๋ ๊ฒ์ ๋ณด์ฅํ๋ค. ์ด๋ฐ ๋ณด์ฅ์ด ๊ฐ๋ฅํ ๊ฒฉ๋ฆฌ ์์ค์ SERIALIZABLE ๋ฟ์ด๋ค. ๋ค๋ฅธ ๊ฒฉ๋ฆฌ ์์ค์ ์์์ ์ด๊ฑฐํ ์ด์ ํ์์ ์์ ํ ๋ง์ ์ ์๋ค.
SERIALIZABLE์ ๋์ ์ ๋ขฐ์ฑ์ ๋๊ฐ๋ก ์ฑ๋ฅ์ด ๋น๊ต์ ๋ฎ์ ๊ฒฝํฅ์ด ์๋ค. ์ฌ๊ธฐ์์ ์ฑ๋ฅ์ด๋ ํธ๋์ญ์ ์ ๋ณ๋ ฌ ์ ๋๋ค. SERIALIZABLE์ ์ ๊ธ์ ๋ง์ด ์ฌ์ฉํ๋ฏ๋ก ๊ต์ฐฉ์ํ(๋ฐ๋๋ฝ)์ ํ๋ฅ ๋ ์ฌ๋ผ๊ฐ๊ณ ์ ๊ธ ๊ฒฝํฉ์ ๋ฐ๋ผ ์ฐจ๋จ๋๋ ๊ฒฝ์ฐ๋ ๋ง๋ค.
SERIALIZABLE ์ด์ธ์๋ ๊ฐ์ข ์ด์ ํ์์ด ์ผ์ด๋ ๊ฐ๋ฅ์ฑ์ด ์๋ค. ๊ทธ๋ฌ๋ ๊ทธ ๋์ ์ ๋ณ๋ ฌ์ฑ ํฅ์์ด๋ผ๋ ์ด์ ์ ๋๋ฆด ์ ์๋ค.
๋ํฐ ๋ฆฌ๋๊ฐ ๋ฐ์ํ๋ ๊ฒฉ๋ฆฌ ์์ค์ผ๋ก ๋ํฐ ๋ฆฌ๋๋ฅผ ํ์ฉํ์ฌ ๋กค๋ฐฑ์ด ๋ฌด๋ฐฉ๋น ์ํ๊ฐ ๋๋ค.
๋ฒ๊ฑฐ๋ก์๊ณผ ๋ฆฌ์คํฌ๋ฅผ ๊ฐ์ํ๋๋ผ๊ณ ์ฑ๋ฅ์ด ํ์ํ ๋ ์ฌ์ฉํ๋ค.
READ-COMMITED: ์ปค๋ฐ๋ ์์ดํ ์ ์ฝ์ ์ ์๋ ๋ชจ๋, ๊ฐ์ ํธ๋์ญ์ ์์๋ ์ต๊ทผ์ ์ค๋ ์ท์ ์ฝ๋๋ค.
REPEATABLE-READ: ์ฒซ ๋ฒ์งธ ์ฝ๊ธฐ์ ์ค๋ ์ท์ ์์ฑ. ์ดํ ๋์ผ ํธ๋์ญ์ ์์๋ ์ค๋ ์ท๋ถํฐ ๊ฐ์ ์ฝ๋๋ค.
ํธ๋์ญ์ ์ ๋ณ๋ ฌ๋๊ฐ ๋์์ง๋ฉด ์ด๋ค ํธ๋์ญ์ ์ด ๊ฐฑ์ ๋๊ณ , ์์ง ์ปค๋ฐ๋์ง ์์ ํ์ ๋ค๋ฅธ ํธ๋์ญ์ ์ด ์ฐธ์กฐํ๋ ๊ฒฝ์ฐ๊ฐ ๋ฐ์ํ ์ ์๋ค. โ ์ด๋ค ์์ ์์ ์ฐธ์กฐ์ ์ผ๊ด์ฑ์ด ์๋ค๋ฉด ์ข๋ค.
๋จ์ํ ์ ๊ธ์ด๋ผ๋ ๊ตฌ์กฐ์ ์์กดํ๋ค๋ฉด ๋ค๋ฅธ ํธ๋์ญ์ ์ ์ ๊ธ์ด ํด์ ๋ ๋๊น์ง ๊ธฐ๋ค๋ฆฐ๋ค.
๋ง์ฝ ์ ๊ธ์ ๊ธฐ๋ค๋ฆฌ๊ณ ์๋ ํธ๋์ญ์ ์ ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆฌ๋ฉด ์ฌ๋ฌ ๊ฐ์ ํธ๋์ญ์ ์ด ์ฐจ๋จ๋ ์ง๋ ๋ชจ๋ฅธ๋ค. ์ด์ ๊ฐ์ ํ์์ ํด๊ฒฐํ๊ณ ๋ณ๋ ฌ์ฑ์ ๋์ด๊ธฐ ์ํด์ ๊ณ ์๋ ๊ตฌ์กฐ๊ฐ MVCC(MultiVersion Concurrency Control)์ด๋ค.
MVCC๋ฅผ ์ฌ์ฉํ๋ฉด ์ด๋ค ํธ๋์ญ์ ์ด ๊ฐฑ์ ํ ๋ฐ์ดํฐ์ ๋ํด ๋ค๋ฅธ ํธ๋์ญ์ ์ ๊ณผ๊ฑฐ์ ์ด์ ๋ฒ์ ์ ์ฐธ์กฐํ ์ ์๋ค.
โ ๋ชจ์์ ํ๋ ์ ๋ง์ผ๋ฉด์ ๋ณ๋ ฌ๋๋ฅผ ๋์ผ ์ ์๋ค.
ํธ๋์ญ์ 1 | ํธ๋์ญ์ 2 | X ๊ณ์ข์์ก(์ต์ ) | X ์์ก (์ด์ ) | Y ๊ณ์ข์์ก |
---|---|---|---|---|
(์์) ์์ก์ ์ฝ์: 1,000,000 | 1,000,000 | 1,000,000 | ||
(์ธ์ถ) -100,000 | ||||
์์ก ๊ธฐ๋ก: 900,000 | 900,000 | 1,000,000 | ||
(์์) ์์ก(์ด์ ) ์ฝ์: 1,000,000 | ||||
์์ก Y ์ฝ์: 1,000,000 | ||||
ํฉ๊ณ: 2,000,000(์ปค๋ฐ) | ||||
์์ก Y ์ฝ์: 1,000,000 | ||||
์ด์ฒด ๊ธ์ก ํฉ๊ณ: 100,000 + 1,000,000 | ||||
์์ก Y ๊ธฐ๋ก: 1,100,000(์ปค๋ฐ) | 1,100,000 |
MVCC๋ฅผ ์ฌ์ฉํ๋ฉด ์ด์ ๋ฒ์ ์ ๋ฐ์ดํฐ๋ฅผ ์ฐธ์กฐํ ์ ์์ผ๋ฏ๋ก ๋ชจ์์ ํ๋ ์ด ๋ฐ์ํ์ง ์๊ณ ์ฌ๋ฐ๋ฅธ ๊ฐ์ด ๋๋ค.
MVCC์์ ์ด์ ๋ฒ์ ์ ๊ฐ์ ๋กค๋ฐฑ ์ธ๊ทธ๋จผํธ๋ผ๋ ์์ญ์ ์ ์ฅ๋๋ค. MVCC๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์ SELECT์ ๊ตฌ๋ฌธ์ ๋ฒ์ ์ ์ ์ฅํ ํ์๋ ์๋ค. ๋ณดํต์ฒ๋ผ SELECT๋ฅผ ์์ฑํ๋ฉด ํธ๋์ญ์ ์ด ์์๋ ์์ ์ ์ด๋ฏธ ์ปค๋ฐ๋ ๋ฐ์ดํฐ๋ง ์๋์ผ๋ก ๋กค๋ฐฑ ์ธ๊ทธ๋จผํธ์์ ์ฐธ์กฐํ๋ค.
SERIALIZABLE ์ด์ธ์ ๊ฒฉ๋ฆฌ ์์ค์ ์ฑ์ฉํ๋ ์ด์ ๋ก MVCC์ ์กด์ฌ๋ ๋งค์ฐ ํฌ๋ค. ํนํ ๊ฐฑ์ ์ ํฌํจํ์ง ์๊ณ ์ฐธ์กฐ๋ง ํ๋ ํธ๋์ญ์ ์ MVCC๋ฅผ ์ฌ์ฉํด ๋ฐ์ดํฐ์ ๋ถ์ ํฉ์ด ๋ฐ์ํ์ง ์๋๋ก ํ๋ฉฐ, ์ฑ๋ฅ์ ํฌ๊ฒ ํฅ์ ์ํฌ ์ ์๋ค.
DB ์๋ฒ ํ๋ก์ธ์ค๊ฐ ๋ฒ๊ทธ ๋ฑ์ ์ํด ๋น์ ์์ ์ผ๋ก ์ข ๋ฃ๋๊ฑฐ๋, ์๋ฒ ์์คํ ์ด ๊ณ ์ฅ๋์ ํฌ๋์๋๋ ๊ฒฝ์ฐ๊ฐ ์๋ค. ์ด์ ๊ฐ์ ์ํฉ์ด ๋ฐ์ํ์ ๋ ์ฆ์ ์๋น์ค๋ฅผ ๋ค์ ์์ํ๋ ค๋ฉด ๋ฐ์ดํฐ๊ฐ ํฌ๋์๋๊ธฐ ์ง์ ์ ์ํ๋ก ์ ์ํ๊ฒ ๋ณต๊ตฌํด์ผ ํ๋ค. ๋ํ, ์ปค๋ฐํ ๋ฐ์ดํฐ๊ฐ ํฌ๋์์ ์ํด์ ์์๋๋ ๊ฒฝ์ฐ๋ ์์ํ ์ ์๋ค.
โ RDB์์๋ ํฌ๋์ ๋ณต๊ตฌ๊ฐ ํ์ ๊ธฐ๋ฅ์ด๋ผ๊ณ ํ ์ ์๋ค.
ํฌ๋์ ๋ณต๊ตฌ๋ ์คํ ์ด๋ธ ๋ก๊ทธ๊ฐ ๋งค์ฐ ์ค์ํ ์ญํ ์ ํ๋ค. ์คํ ์ด๋ธ ๋ก๊ทธ๋ ๋งํ์๋ฉด ์ง๋ ฌํ๋ ํธ๋์ญ์ ์ ์ค์ผ์ค์ด๋ค. ์คํ ์ด๋ธ ๋ก๊ทธ ๊ธฐ๋ก๋๋ ๋ก๊ทธ ํญ๋ชฉ์ ์ฌ์(REDO)ํด DB ์บ์๋ฅผ ์ต์ ์ ์ํ๋ก ๋ณต์ํ๋ค.
๊ทธ๋ค์์ ํฌ๋์ํ ์๊ฐ์ ์์ง ์๋ฃ๋์ง ์์ ํธ๋์ญ์ ์ ์ํ ๊ฐฑ์ ์ ์ทจ์(UNDO)ํ๋ค.
REDO, UNDO ์์ชฝ ๋ชจ๋๋ฅผ ์คํํด ํฌ๋์์ ๋ณต๊ตฌ๋ฅผ ์๋ฃํ๊ฒ ๋๋ค.
ACID์ ์ค๋ช ์์ ํธ๋์ญ์ ์ ์คํํ๋ DB๋ ์ด๋ค ์ผ๊ด์ฑ์ด ์๋ ์ํ์์ ๋ค๋ฅธ ์ผ๊ด์ฑ์ด ์๋ ์ํ๋ก ์ ํํ๋ค. ๊ทธ DB์ ์ผ๊ด์ฑ์ ๋ณด์ฅํ๋ ๊ฒ์ ์์ฉํ๋ก๊ทธ๋จ์ ๋ฌ๋ ค์๋ค.
DB์ ์ผ๊ด์ฑ์ ์๊ฐํ๋๋ฐ ์์ด ๊ฐ์ฅ ์ค์ํ ๊ฒ์ ๋ฐ์ดํฐ๊ฐ ์ด๋ป๊ฒ ํํ๋๊ณ ์๋์ง, ๊ทธ๋ฆฌ๊ณ ๊ทธ ๋ฐ์ดํฐ์ ๊ดํด ์ด๋ค ์ฐ์ฐ์ ์ํํ๋์ง์ ๋ํ ์ดํด, ์ฆ ๋ฐ์ดํฐ ๋ชจ๋ธ์ ๊ดํ ์ดํด๊ฐ ํ์๋ค.
์ผ๊ด์ฑ์ด ์๋์ง ํ๋จํ๊ธฐ ์ํ ๋ก์ง์ ๊ด๊ณํ ๋ชจ๋ธ๋ก ํํ๋๊ธฐ ๋๋ฌธ์ด๋ค.
๊ด๊ณํ ๋ชจ๋ธ์ ๋ฐ์ดํฐ๋ฅผ ์กฐ์ํ๋ ๋จ์๊ฐ ๋ฆด๋ ์ด์ ์ด๋ค. SQL๋ก ๋์ฒดํ๋ฉด ํ ์ด๋ธ์ด ๋ฐ์ดํฐ๋ฅผ ์กฐ์ํ๋ ๋จ์๊ฐ ๋๋ค. ๋ฆด๋ ์ด์ ์ ์ ๋ ฅํ์ฌ ๋ค๋ฅธ ๋ฆด๋ ์ด์ ์ ์ถ๋ ฅํ๋ ๊ฒ์ด ๊ด๊ณํ ๋ชจ๋ธ์ ๊ธฐ๋ณธ์ ์ธ ๊ฐ๋ ์ด๋ค.
ํธ๋์ญ์ ์ ๋ถ์ ํฉ์ผ๋ก ๋ฐ์ํ๋ ๊ฐ์ข ์ด์ ํ์์ ๋ฐ์ดํฐ์ ํฌํจ๋ ๊ฐ ํ์ ๊ฐ์ด ๊ฐ์๊ธฐ ๋ฐ๋๊ฑฐ๋, ํ ์์ฒด๊ฐ ๋์ด๋๊ฑฐ๋ ์ค์ด๋๋ ๊ฒ์ด๋ค. ์ด์ ๊ฐ์ ์ด์ ํ์์ด ์๋ค๋ฉด ์๋ ๋ฆด๋ ์ด์ ์ฐ์ฐ์ ์ ํ์ฑ์ด ๋ณด์ฅํ ์ ์๊ฒ ๋๋ค.
์งํฉ์ ์ฌ์ฉํ ์ฐ์ฐ์ผ๋ก ๋ฐ๋ฅธ ๊ฒฐ๊ณผ๋ฅผ ์ป๋ ๊ฒ์ ์ฐ์ฐ์ ๊ธฐ๋ฐ์ด ๋๋ ์งํฉ์ด ์ฌ๋ฐ๋ฅด์ง ์์ผ๋ฉด ์ ๋๋ค.
โ ๊ด๊ณํ ๋ชจ๋ธ์ ์ ๋๋ก ๊ตฌ์ถํ๊ณ ์งํฉ์ ๊ธฐ๋ฐ์ผ๋ก ํ ์ฐ์ฐ์ ์ฟผ๋ฆฌ๋ก ํํํ๋ ค๋ฉด ์ด์ ํ์ ๋์ฑ ์ ์ฐพ์์ผ ํ๋ค.
ํธ๋์ญ์ ์ ์ด์์ด ์์ผ๋ฉด ๋ฐ์ดํฐ ๋ชจ๋ธ์ด ์ฑ๋ฆฝ๋์ง ์๋๋ค๋ ์ ์ ์ฃผ์ํด์ผ ํ๋ค.
๊ด๊ณํ ๋ชจ๋ธ์์ DB์ ๋ถ์ ํฉ์ ๋ฐฉ์งํ๋ ์๋จ์ด๋ผ๋ฉด ์ ๊ทํ์ ์ง๊ต์ฑ์ด๋ค. ์๋ฌด๋ฆฌ ํธ๋์ญ์ ์ ์ฌ์ฉํด ๋ฌธ์ ๊ฐ ์๋ ์ค์ผ์ค๋ก ๊ฐฑ์ ์ ์ํํ๋๋ผ๋ DB์ ์ค๋ณต์ด ์๊ณ , ๋ชจ์์ด ๋ฐ์ํ๋ค๋ฉด ์์ ์ผ๋ก ๋์๊ฐ๊ฒ ๋๋ค.
๋จผ์ ๋ฆด๋ ์ด์ ์ ์ ๊ทํ์ ์ง๊ต์ฑ์ ๊ตฌํํ์. ํนํ ์ ๊ทํ๋ ์ค์ฅ๊ธฐ๋ก ์ฒด๊ณํํด ์ค์ํ ์ ์๋ค. DB ์ค๊ณ๋ก ์ด์ ์ํ๊ฐ ๋ฐ์ํ์ง ์๊ฒ ๋ณด์ฅํ๊ณ , ACID์ C๋ฅผ ๋ณด์ฅํ๊ธฐ ์ํด์ ๊ณ ๋ คํด์ผ ํ ๊ฒ๋ค์ ์ค์ผ ์ ์๋ค.
๊ด๊ณํ ๋ชจ๋ธ์ ์ด๋๊น์ง๋ ๋ฐ์ดํฐ ๋ชจ๋ธ์ด๋ฉฐ ๋จ์ํ ๋๊ตฌ๋ค. ๊ด๊ณํ ๋ชจ๋ธ์ ๊ตฌํํ๋ค๊ณ ํด์ ์ฌ๋ฐ๋ฅธ ๋ก์ง์ ํญ์ ํํํ ์ ์๋ ๊ฒ์ ์๋๋ค.
์๋ฌด๋ฆฌ ์ ์ธ์ ์ผ๋ก ์์ฑํ๋ค๊ณ ํด๋ ์์ฑํ ๋ด์ฉ๊ณผ ์ฒ๋ฆฌ๊ฐ ์๋ํ ๊ฒ ์ฌ์ด์ ๊ดด๋ฆฌ๊ฐ ๋ฐ์ํ๋ ๊ฒฝ์ฐ๊ฐ ์์ง๋ ์์ ๊ฒ์ด๋ค. ์ฝ๋์ ์ฒ๋ฆฌ์ ์๋์ ๊ดด๋ฝ ์๋ค๋ฉด ์ด ํธ๋์ญ์ ์ ๊ฒฐ๊ณผ๋ ๋ฐ๋ฅด์ง ์๋ค๊ณ ํ ์ ์๋ค.
RDB๋ฅผ ์ ๊ตฌํํ๋ ค๋ฉด ์ฒ๋ฆฌ์ ์์ฑ์ ๋ฌธ์ ๊ฐ ์์์ง๋ ๋ชจ๋ฅธ๋ค๋ ๊ฒ์ ์ ์ ๋ก ๋ฐ์ดํฐ์ ์ ํฉ์ฑ์ ์งํค๊ธฐ ์ํด ๋ ธ๋ ฅํด์ผ ํ๋ค.
๊ทธ๋์ ๋์์ด ๋๋ ๊ฒ์ด ์ ์ฝ(Constraint)๋ค. ์ ์ฝ์ ์ฌ์ฉํ๋ฉด ์ฌ๋ฐ๋ฅธ ๋ฐ์ดํฐ๊ฐ ์ด๋ค์์ผ๋ก ์กด์ฌํด์ผ ํ๋์ง ํํํ ์ ์๋ค.
๊ด๊ณํ ๋ชจ๋ธ์ ์ ๋๋ก ์ดํดํ๊ณ DB ์ค๊ณ๋ฅผ ์ ๋๋ก ์ํํด ์ด์ ํ์์ด ์๊ธธ ๊ฐ๋ฅ์ฑ์ ์ต๋ํ ๋ฐฐ์ ํ ๋ค์์ ์ ์ฝ์ ์ฌ์ฉํด ์ด์ ํ์์ ๋ง๋ ๊ฒ์ด๋ค.
NULL์ด ํฌํจ๋์ง ์๊ฒ ํํํ๋ ค๋ฉด NOT NULL ์ ์ฝ์ ์ฌ์ฉํ๋ค. ์ ๊ทํ๋ฅผ ํ ๋๋ NOT NULL์ ์ฌ์ฉํ์.
ํ ์ด๋ธ์์ ์ด๋ค ์ปฌ๋ผ์ ์กฐํฉ์ ์ค๋ณต์ด ์์์ ๋ณด์ฅํ๋ ค๋ฉด ๊ณ ์ ์ฑ ์ ์ฝ์ ์ฌ์ฉํ๋ค. ํค๋ ๊ด๊ณํ ๋ชจ๋ธ์ ์์ด ๋ฐ๋์ ํ์ํ ๊ฐ๋ ์ด๋ค. ํ๋ณดํค๊ฐ ๋ ์ ์๋ ์ปฌ๋ผ์ ์กฐํฉ ๋ชจ๋์ ๊ธฐ๋ณธํค ๋๋ ์ ๋ํฌ ์ธ๋ฑ์ค๋ฅผ ์์ฑํ์.
SQL์์ ์ข์ ๋ฒ์์ ์งํฉ์ ๋๋ฉ์ธ์ผ๋ก ์ ์ํ๊ฑฐ๋ ๋ฐ์ดํฐ ์ ํ์ ์กฐํฉํ ์๋ก์ด ๋ฐ์ดํฐ ์ ํ์ ์ ์ํ๊ณ ์ถ๋ค๋ฉด CREATE TYPE์ ์ฌ์ฉํ๋ฉด ํธ๋ฆฌํ๋ค. CREATE TYPE์ ์ ํ๋ง๋ค ์ฌ์ฉ๋ฒ์ด ๋ค๋ฅด๋ ์ฃผ์ํด์ผ ํ๋ค.
์ปฌ๋ผ์ด ์ทจํ๋ ๋ฐ์ดํฐ์ ๋ฒ์๋ฅผ ๋์ฑ ์ธ๋ฐํ๊ฒ, ๊ทธ๋ฆฌ๊ณ ํ์์ ์ ํ ์ด๋ธ์ ์ํ์ ๋ง๊ฒ ์ ์ฝ์ ํ๋ ค๋ฉด CHECK ์ ์ฝ์ ์ฌ์ํ๋ฉด ํธ๋ฆฌํ๋ค. ๊ทธ๋ฌ๋ SQL ํ์ค์์ CHECK ์ ์ฝ์ ๋ค์ํ ์ฟผ๋ฆฌ๋ฅผ ํํํ ์ ์๋ค๊ณ ๋์ด ์์ง๋ง RDB ์ ํ๋ง๋ค CHECK ์ ์ฝ์ ์ง์ํ๋ ์ํฉ์ด ๋ค๋ฅด๋ฏ๋ก ์ฃผ์ํด์ผ ํ๋ค.
CHECK ์ ์ฝ์ ๋งค์ฐ ๊ฐ๋ ฅํ๋ค. ๋จ์ผ ์ปฌ๋ผ์ด ์ทจํ๋ ๊ฐ๋ฟ๋ง ์๋๋ผ ์ฌ๋ฌ ๊ฐ์ ์ปฌ๋ผ์ ํฌํจ๋ ๋ฐ์ดํฐ์ ์ ํฉ์ฑ์ ํ์ธํ๋ ๊ฒ์ด ๊ฐ๋ฅํ๋ค.
(MySQL์ CREATE TYPE, CHECK ์ ์ฝ์ ์ง์ํ์ง ์๋๋ค.)
SQL์ ์๋ ํ ์ด๋ธ ์ฌ์ด์ ๋ฐ์ดํฐ์ ์ ํฉ์ฑ์ ํ์ธํ๋ ์ ์ผํ ์๋จ์ด ์ธ๋ถํค๋ค. ์ธ๋ถํค ์ ์ฝ์ ์ฌ์ฉํ๋ฉด ์์ ํ ์ด๋ธ์ ์๋ ํค์ ๊ฐ์ ๊ฐ์ ํค๊ฐ ๋ถ๋ชจ ํ ์ด๋ธ์๋ ์๋ค๋ ์ ์ฝ์ ํํ ํ ์ ์๋ค.
์ ๊ทํ๋ฅผ ์ํํด ๋ฌด์์ค ๋ถํด๋ ๋ ๊ฐ์ ํ ์ด๋ธ ์ฌ์ด์ ๋ฐ์ดํฐ์ ๋ถ์ ํฉ์ด ๋ฐ์ํ์ง ์๊ฒ ์ธ๋ถํค ์ ์ฝ์ ๊ฑธ์ด์ผ ํ ํ์๊ฐ ์๋ค.
์ธ๋ถํค๋ฅผ ์ฌ์ฉํ์ง ์๋ ๊ฒ์ ๊ฒ์ฌ๋ฅผ ์ํ ๋ก์ง์ ์์ฉํ๋ก๊ธ๋งค์์ ๊ตฌํํด์ผํ๋ค. ๊ทธ๋ฆฌ๊ณ ์์ฉํ๋ก๊ทธ๋จ์์ ๊ตฌํํ๋ ๊ฑฐ์จ ์ธ๋ถํค๋ณด๋ค ์ฑ๋ฅ์ด ๋จ์ด์ง ๊ฒ์ด๋ค. ์ธ๋ถํค์ ๊ฐ์์ง ํ์ธํ๋ ค๋ฉด ์๋ ๋์ผํ ๋ฐ์ดํฐ์ ์์ธ์ค ํด์ผ๋ง ํ๋ฏ๋ก DB ์๋ฒ ๋ด๋ถ์์ ๋๋๋ ์ฒ๋ฆฌ์๋ ๋ฌ๋ฆฌ SQL์ ํด์์ด๋ ์ ์ก ๋ฑ์ ์ํด์ ์ค๋ฒํค๋๊ฐ ๋ฐ์ํ๊ธฐ ๋๋ฌธ์ด๋ค.
์ธ๋ถํค๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ๋ํ ์ธ๋ถํค์ ๊ฐ์ด ๋ฐ์ดํฐ์ ์ ํฉ์ฑ์ ๊ฒ์ํ๋ ๋ก์ง๋ ์๋ค๋ฉด ๋ฐ์ดํฐ์ ์ ํฉ์ฑ์ด ๋ณด์ฅ๋ผ ์๋์ง ์๋์ง ๋ชจ๋ฅด๋ ์ํ์ ์๊ฒ ๋๋ค.
๋ฐ์ดํฐ์ ์ ํฉ์ฑ์ ์ฝ๊ฐ์ ์ฑ๋ฅ ์ ํ๋ ์ด์์ ์๊ณ ์ ๋นํ๋ฉด ํจ์ฌ ์ค์ํ๋ค.
์ธ๋ถํค๋ ๋งค์ฐ ํธ๋ฆฌํ์ง๋ง ์ ์ฝ์ผ๋ก์์ ํํ์ ์ถฉ๋ถํ๊ธฐ์ ๋ถ์กฑํ๋ค. ํนํ ์ฌ๋ฌ ๊ฐ์ ํ ์ด๋ธ ์ฌ์ด์ ๋ฐ์ดํฐ์ ์ ํฉ์ฑ์ ๋ด๋ณดํ๊ณ ์ ํ ๋์ ํํ ๋ฐฉ๋ฒ์ผ๋ก๋ SQL์์๋ ์ธ๋ถํค ์ด์ธ์๋ ์กด์ฌํ์ง ์๋ค.
์ธ๋ถํค๋ ํ ์ด๋ธ ์ฌ์ด์ ์ ์ฝ์ ํํํ๋ ์๋จ ์ค ํ๋์ ์ง๋์ง ์๋๋ค.
์ธ๋ถํค๋ก ํํํ ์ ์๋ ์ ์ฝ์ผ๋ก๋ ๋ค์๊ณผ ๊ฐ๋ค.
์ด๋ฌํ ์ ์ฝ์ด ํ์ํ ๊ฒฝ์ฐ๋ ์ํ์ ์ฐจ์ด์ ๋ฐ๋ผ ์ ์ฅํ๋ ํ ์ด๋ธ์ ๋๋ ๋๋ค. ํฉ์งํฉ(UNION) ๋์ด ์๋ ํ ์ด๋ธ์ ๋ฐ๋ก๋ฐ๋ก ๋๋ ์ผ ํ๋ ์ ํ์ง๊ฐ ํ์ํ ๊ฒฝ์ฐ๊ฐ ์ ์ง ์๋ค. ์ด ๊ฒฝ์ฐ ์ธ๋ถํค ์ ์ฝ ์กฐ๊ฑด๋ง์ผ๋ก ๊ฒฝ์ํ ์ ์๋ค.
๊ทธ๋์ ํ์ํ ๊ฒ์ด ํธ๋ฆฌ๊ฑฐ๋ค. SQL์์ ํ ์ด๋ธ ์ฌ์ด์ ๋ณต์กํ ์ ์ฝ์ ํํํ๋ ค๋ฉด ํธ๋ฆฌ๊ฑฐ๊ฐ ๊ฐ์ฅ ์ ํฉํ๋ค. ํธ๋ฆฌ๊ฑฐ๋ ๋ค์ํ ์ ์ฝ์ ํํํ ์ ์์ผ๋ฉฐ CHECK ์ ์ฝ๊ณผ๋ ๋ฌ๋ฆฌ ๋ค์ํ ํํ์ ์ฌ์ฉํ ์ ์๋ค.(์ง๊ณ, ์คํ ์ด๋ ํ๋ก์์ ๋ฅผ ํธ์ถ ๋ฑ๋ฑ)
ํธ๋ฆฌ๊ฑฐ ์์ฒด๋ ์ ์ฐจํ์ ํํ์ด์ง๋ง ์งํฉ๋ก ์์ ํํํ ์ ์๋ ๋ค์ํ ๋ก์ง์ ์์ฑํ ์ ์๋ค.
ํธ๋ฆฌ๊ฑฐ๋ ํ ํ๋ง๋ค ๋ฐ์ดํฐ ์กฐ์์ด ์คํ๋๋ ํ ํธ๋ฆฌ๊ฑฐ์ SQL ๋ฌธ๋ง๋ค ์คํ๋๋ ๋ฌธ์ฅ ํธ๋ฆฌ๊ฑฐ๊ฐ ์๋ค. ๋ ๊ฐ์ ํธ๋ฆฌ๊ฑฐ๊ฐ ์๋ ๊ฒ์ด ์ด์์ ์ด์ง๋ง, ๋ฐ์ดํฐ์ ์ ํฉ์ฑ์ ํ์ธํ๋ ๋ฐ ์์ด์ ์ฃผ๋ก ํ์ํ ์ชฝ์ ํ ํธ๋ฆฌ๊ฑฐ ์ชฝ์ด๋ค. ๋ฌธ์ฅ ํธ๋ฆฌ๊ฑฐ๋ ํ ํธ๋ฆฌ๊ฑฐ์ฒ๋ผ NEW ๋๋ OLD ํค์๋๋ก ์ปฌ๋ผ์ ๊ธฐ์กด ๊ฐ๊ณผ ์๋ก์ด ๊ฐ์ผ๋ก ๊ฐฑ์ ํ ์ ์์ด์ ์ ์ฝ์ ํํํ๊ธฐ์๋ ๊ทธ๋ค์ง ์ ํฉํ์ง ์๋ค.
ํ ํธ๋ฆฌ๊ฑฐ๋ ๊ฐ๋ ฅํ์ง๋ง ๋จ์ ์ด ์๋ค.
ํ๋ง๋๋ก ํ ํ์ฉ ์คํ๋๋ ๊ฒ์ด๋ค. ๋ฐ๋ผ์ ์ฌ๋ฌ ํ์ ๋ฌถ์ด์ ๊ฐ์ ์กฐ์ฌํ๋ ๊ฒ์ ๋ณธ์ง์ ์ผ๋ก ์ ํฉํ์ง ์๋ค. ์ด ๊ฒฝ์ฐ ํธ๋ฆฌ๊ฑฐ๊ฐ ์๋ ์์ฉํ๋ก๊ทธ๋จ์์ ๊ทธ ํธ๋์ญ์ ๋ด์ ๋ฐ์ดํฐ ์ ํฉ์ฑ์ ๋ณด์ฅํ๊ธฐ ์ํ ์ฟผ๋ฆฌ๋ฅผ ์คํํ๋ ๊ฒ์ด ์ข๋ค. ์ด ์ฟผ๋ฆฌ๋ฅผ ์คํํ ๊ฒฐ๊ณผ ์ด์ ์ํ๊ฐ ๋ฐ๊ฒฌ๋๋ฉด DB๋ ํธ๋์ญ์ ์คํ์ ๋ฐ๋ผ ์ ํฉ์ฑ์ด ์๋ ์ํ๋ก ์ ํ๋๊ธฐ๊ฐ ๋ถ๊ฐ๋ฅํ๋ฏ๋ก ๋ช ์์ ์ผ๋ก ํธ๋์ญ์ ์ ๋ก๋ฐฑํด์ผ ํ๋ค.
DB์์ ๋ฐ์ดํฐ์ ์ ํฉ์ฑ์ ๋งค์ฐ ์ค์ํ๋ค. DB์ ์ ํฉ์ฑ์ ์ ์งํ๋ ๊ฒ์ ๊ด๊ณํ ๋ชจ๋ธ, ํธ๋์ญ์ ์ ๊ดํ ์ดํด๋ ํ์์ ์ด๋ค. ๊ฒฉ๋ฆฌ ์์ค, ์ ๊ธ, MVCC, ์ ์ฝ ๋ฑ์ ์ ํ์ฉํด ํธ๋์ญ์ ์ ์ํ ๋ฐ์ดํฐ ์ ํฉ์ฑ์ ์ ์งํ๋ฉด์ ์ต์์ ์ฑ๋ฅ์ ๋ผ ์ ์๋๋ก ์ ๋ฆฌ ํ์.