๋ฉ๋ชจ. ๋ฒ์ญ: Jaana Dogan์ Google์ ์๋ จ๋ ์์ง๋์ด๋ก ํ์ฌ Go๋ก ์์ฑ๋ ํ์ฌ ํ๋ก๋์ ์๋น์ค์ ๊ด์ฐฐ ๊ฐ๋ฅ์ฑ์ ์ฐ๊ตฌํ๊ณ ์์ต๋๋ค. ์์ด๊ถ ์ฒญ์ค๋ค ์ฌ์ด์์ ํฐ ์ธ๊ธฐ๋ฅผ ์ป์ ์ด ๊ธฐ์ฌ์์ ๊ทธ๋ ๋ ๋๊ท๋ชจ/์๊ตฌ์ ์ธ ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ์๊ฐ ๊ณ ๋ คํ๋ ๋ฐ ์ ์ฉํ DBMS(๋๋ก๋ ์ผ๋ฐ์ ์ผ๋ก ๋ถ์ฐ ์์คํ )์ ๊ดํ ์ค์ํ ๊ธฐ์ ์ธ๋ถ ์ฌํญ์ 17๊ฐ์ง ํญ๋ชฉ์ผ๋ก ์์งํ์ต๋๋ค.
๋๋ค์์ ์ปดํจํฐ ์์คํ
์ ์ํ๋ฅผ ์ถ์ ํ๋ฏ๋ก ์ผ์ข
์ ๋ฐ์ดํฐ ์ ์ฅ ์์คํ
์ด ํ์ํฉ๋๋ค. ์ ๋ ์ค๋ ์๊ฐ ๋์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ํ ์ง์์ ์ถ์ ํ์ผ๋ฉฐ, ์ค๊ณ ์ค์๋ก ์ธํด ๋ฐ์ดํฐ ์์ค๊ณผ ์ค๋จ์ด ๋ฐ์ํ์ต๋๋ค. ๋์ฉ๋ ์ ๋ณด๋ฅผ ์ฒ๋ฆฌํ๋ ์์คํ
์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ์์คํ
์ํคํ
์ฒ์ ์ค์ฌ์ ์์ผ๋ฉฐ ์ต์ ์ ์๋ฃจ์
์ ์ ํํ๋ ํต์ฌ ์์๋ก ์์ฉํฉ๋๋ค. ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์
์ ์ธ์ฌํ ์ฃผ์๋ฅผ ๊ธฐ์ธ์ธ๋ค๋ ์ฌ์ค์๋ ๋ถ๊ตฌํ๊ณ ์ ํ๋ฆฌ์ผ์ด์
๊ฐ๋ฐ์๊ฐ ์์ํ๋ ค๊ณ ํ๋ ๋ฌธ์ ๋ ์ข
์ข
๋น์ฐ์ ์ผ๊ฐ์ ๋ถ๊ณผํฉ๋๋ค. ์ด ๊ธฐ์ฌ ์๋ฆฌ์ฆ์์๋ ์ด ๋ถ์ผ์ ์ ๋ฌธ ์ง์์ด ์๋ ๊ฐ๋ฐ์์๊ฒ ์ ์ฉํ ๋ช ๊ฐ์ง ์์ด๋์ด๋ฅผ ๊ณต์ ํฉ๋๋ค.
- 99,999%์ ์๊ฐ ๋์ ๋คํธ์ํฌ๊ฐ ๋ฌธ์ ๋ฅผ ์ผ์ผํค์ง ์๋๋ค๋ฉด ์ด์ด ์ข์ต๋๋ค.
- ACID๋ ๋ค์ํ ์๋ฏธ๋ฅผ ๊ฐ์ต๋๋ค.
- ๊ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค์๋ ์ผ๊ด์ฑ๊ณผ ๊ฒฉ๋ฆฌ๋ฅผ ๋ณด์ฅํ๊ธฐ ์ํ ์์ฒด ๋ฉ์ปค๋์ฆ์ด ์์ต๋๋ค.
- ์ผ๋ฐ์ ์ธ ์ฐจ๋จ์ ์ ์งํ๊ธฐ ์ด๋ ค์ธ ๋ ๋๊ด์ ์ฐจ๋จ์ด ๋์์ด ๋ฉ๋๋ค.
- ๋ํฐ ์ฝ๊ธฐ(Dirty Read) ๋ฐ ๋ฐ์ดํฐ ์์ค ์ธ์๋ ๋ค๋ฅธ ์์ธ ์ฌํญ์ด ์์ต๋๋ค.
- ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฌ์ฉ์๊ฐ ํ๋ ๊ณผ์ ์ ํญ์ ๋์ํ๋ ๊ฒ์ ์๋๋๋ค.
- ์ ํ๋ฆฌ์ผ์ด์ ์์ค ์ค๋ฉ์ ์ ํ๋ฆฌ์ผ์ด์ ์ธ๋ถ๋ก ์ด๋ํ ์ ์์ต๋๋ค.
- ์๋ ์ฆ๊ฐ๋ ์ํํ ์ ์์ต๋๋ค.
- ์ค๋๋ ๋ฐ์ดํฐ๋ ์ ์ฉํ ์ ์์ผ๋ฉฐ ์ ๊ธ ํ์๊ฐ ์์ต๋๋ค.
- ์๊ณก์ ๋ชจ๋ ์๊ฐ ์์ค์์ ์ผ๋ฐ์ ์ ๋๋ค.
- ์ง์ฐ์๋ ๋ง์ ์๋ฏธ๊ฐ ์์ต๋๋ค.
- ํน์ ํธ๋์ญ์ ์ ๋ํ ์ฑ๋ฅ ์๊ตฌ ์ฌํญ์ ํ๊ฐํด์ผ ํฉ๋๋ค.
- ์ค์ฒฉ๋ ํธ๋์ญ์ ์ ์ํํ ์ ์์ต๋๋ค.
- ํธ๋์ญ์ ์ ์ ํ๋ฆฌ์ผ์ด์ ์ํ์ ์ฐ๊ฒฐ๋์ด์๋ ์ ๋ฉ๋๋ค.
- ์ฟผ๋ฆฌ ํ๋๋๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ํด ๋ง์ ๊ฒ์ ์๋ ค์ค ์ ์์ต๋๋ค.
- ์จ๋ผ์ธ ๋ง์ด๊ทธ๋ ์ด์ ์ ์ด๋ ต์ง๋ง ๊ฐ๋ฅํฉ๋๋ค.
- ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ํฌ๊ฒ ์ฆ๊ฐํ๋ฉด ์์ธก ๋ถ๊ฐ๋ฅ์ฑ์ด ์ฆ๊ฐํฉ๋๋ค.
์ด ๊ธฐ์ฌ์ ์ด์ ๋ฒ์ ์ ๋ํ ํผ๋๋ฐฑ์ ์ฃผ์ Emmanuel Odeke, Rein Henrichs ๋ฐ ๊ธฐํ ๋ถ๋ค๊ป ๊ฐ์ฌ์ ๋ง์์ ์ ํ๊ณ ์ถ์ต๋๋ค.
99,999%์ ์๊ฐ ๋์ ๋คํธ์ํฌ๊ฐ ๋ฌธ์ ๋ฅผ ์ผ์ผํค์ง ์๋๋ค๋ฉด ์ด์ด ์ข์ต๋๋ค.
ํ๋ ๋คํธ์ํฌ ๊ธฐ์ ์ด ์ผ๋ง๋ ์ ๋ขฐํ ์ ์๋์ง, ๊ทธ๋ฆฌ๊ณ ๋คํธ์ํฌ ์ค๋ฅ๋ก ์ธํด ์์คํ ์ด ์ผ๋ง๋ ์์ฃผ ๋ค์ด๋๋์ง์ ๋ํ ์๋ฌธ์ด ๋จ์ ์์ต๋๋ค. ์ด ๋ฌธ์ ์ ๋ํ ์ ๋ณด๋ ๋ถ์กฑํ๋ฉฐ ์ ๋ฌธ ๋คํธ์ํฌ, ์ฅ๋น ๋ฐ ์ธ๋ ฅ์ ๊ฐ์ถ ๋๊ท๋ชจ ์กฐ์ง์ด ์ฐ๊ตฌ๋ฅผ ์ฃผ๋ํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค.
Spanner(Google์ ์ ์ธ๊ณ์ ์ผ๋ก ๋ถ์ฐ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค)์ ๊ฐ์ฉ์ฑ ๋น์จ์ด 99,999%๋ก Google์ ๋ค์๊ณผ ๊ฐ์ด ์ฃผ์ฅํฉ๋๋ค.
๋ ๋์ ์ธํฐ๋ท์ ๋์์ผ๋ก ๊ฑฐ๋ ๊ธฐ์ ์ธ๋ถ์์ ์ํ๋๋ ํฌ๊ด์ ์ธ ์ฐ๊ตฌ๋ ์กด์ฌํ์ง ์์ต๋๋ค. ๋ํ ๊ณ ๊ฐ ๋ฌธ์ ์ ๋ช ํผ์ผํธ๊ฐ ๋คํธ์ํฌ์ ๊ด๋ จ๋์ด ์๋์ง์ ๋ํ ์ฃผ์ ์ ์ฒด์ ๋ฐ์ดํฐ๊ฐ ์ถฉ๋ถํ์ง ์์ต๋๋ค. ์ฐ๋ฆฌ๋ ๋๊ท๋ชจ ํด๋ผ์ฐ๋ ์ ๊ณต์ ์ฒด์ ๋คํธ์ํฌ ์คํ ์ค๋จ์ผ๋ก ์ธํด ์ธํฐ๋ท ์ ์ฒด๊ฐ ๋ช ์๊ฐ ๋์ ์ค๋จ๋ ์ ์๋ค๋ ์ฌ์ค์ ์ ์๊ณ ์์ต๋๋ค. ์ด๋ ๋จ์ํ ๋ง์ ์ฌ๋๊ณผ ํ์ฌ์ ์ํฅ์ ๋ฏธ์น๋ ์ค๋ํ ์ฌ๊ฑด์ด๊ธฐ ๋๋ฌธ์ ๋๋ค. ๋คํธ์ํฌ ์ค๋จ์ ๋ชจ๋ ์ฌ๋ก๊ฐ ์ฃผ๋ชฉ์ ๋ฐ๋ ๊ฒ์ ์๋๋๋ผ๋ ๋ ๋ง์ ๊ฒฝ์ฐ์ ๋ฌธ์ ๋ฅผ ์ผ์ผํฌ ์ ์์ต๋๋ค. ํด๋ผ์ฐ๋ ์๋น์ค ํด๋ผ์ด์ธํธ๋ ๋ฌธ์ ์ ์์ธ์ ๋ํด ์๋ฌด๊ฒ๋ ๋ชจ๋ฆ ๋๋ค. ์ฅ์ ๊ฐ ๋ฐ์ํ ๊ฒฝ์ฐ ์๋น์ค ์ ๊ณต์ ์ธก์์๋ ์ด๋ฅผ ๋คํธ์ํฌ ์ค๋ฅ๋ก ๊ฐ์ฃผํ๋ ๊ฒ์ด ๊ฑฐ์ ๋ถ๊ฐ๋ฅํฉ๋๋ค. ์ด๋ค์๊ฒ ํ์ฌ ์๋น์ค๋ ๋ธ๋๋ฐ์ค์ ๋๋ค. ๋๊ท๋ชจ ์๋น์ค ์ ๊ณต์๊ฐ ์๋๋ฉด์ ๊ทธ ์ํฅ์ ํ๊ฐํ๋ ๊ฒ์ ๋ถ๊ฐ๋ฅํฉ๋๋ค.
๋ํ ์
์ฒด๋ค์ด ์์ฌ ์์คํ
์ ๋ํด ๋ณด๊ณ ํ ๋ด์ฉ์ ๊ณ ๋ คํ๋ฉด ๋คํธ์ํฌ ๋ฌธ์ ๊ฐ ์ ์ฌ์ ๊ฐ๋ ์ค์ง ์๊ฐ ๋ฌธ์ ์ ๊ทนํ ์ผ๋ถ๋ง์ ์ค๋ช
ํ๋ค๋ฉด ์ด์ด ์ข๋ค๊ณ ๋งํ ์ ์์ต๋๋ค. ๋คํธ์ํฌ ํต์ ์ ์ฌ์ ํ โโํ๋์จ์ด ์ค๋ฅ, ํ ํด๋ก์ง ๋ณ๊ฒฝ, ๊ด๋ฆฌ ๊ตฌ์ฑ ๋ณ๊ฒฝ, ์ ์ ๋ฑ ์ผ์์ ์ธ ๋ฌธ์ ๋ก ์ธํด ์ด๋ ค์์ ๊ฒช๊ณ ์์ต๋๋ค. ์ต๊ทผ์ ๋ฐ์ํ ์ ์๋ ๋ฌธ์ ๋ชฉ๋ก์ด ์ถ๊ฐ๋ ๊ฒ์ ์๊ณ ๋๋์ต๋๋ค.
ACID๋ ๋ค์ํ ์๋ฏธ๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค.
ACID๋ผ๋ ์ฝ์ด๋ ์์์ฑ(Atomicity), ์ผ๊ด์ฑ(Consistency), ๊ฒฉ๋ฆฌ์ฑ(Isolation), ์ ๋ขฐ์ฑ(Reliability)์ ์๋ฏธํฉ๋๋ค. ์ด๋ฌํ ํธ๋์ญ์ ์์ฑ์ ์ฅ์ , ์ค๋ฅ, ํ๋์จ์ด ์ค๋ฅ ๋ฑ์ด ๋ฐ์ํ ๊ฒฝ์ฐ ์ ํจ์ฑ์ ๋ณด์ฅํ๊ธฐ ์ํ ๊ฒ์ ๋๋ค. ACID ๋๋ ์ ์ฌํ ์ฒด๊ณ๊ฐ ์์ผ๋ฉด ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ์๊ฐ ์์ ์ด ๋ด๋นํ๋ ๊ฒ๊ณผ ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ๋ด๋นํ๋ ๊ฒ์ ๊ตฌ๋ณํ๊ธฐ ์ด๋ ค์ธ ๊ฒ์ ๋๋ค. ๋๋ถ๋ถ์ ๊ด๊ณํ ํธ๋์ญ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ACID๋ฅผ ์ค์ํ๋ ค๊ณ ๋ ธ๋ ฅํ์ง๋ง NoSQL๊ณผ ๊ฐ์ ์๋ก์ด ์ ๊ทผ ๋ฐฉ์์ ๊ตฌํ ๋น์ฉ์ด ๋ง์ด ๋ค๊ธฐ ๋๋ฌธ์ ACID ํธ๋์ญ์ ์ด ์๋ ๋ง์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ํ์์์ผฐ์ต๋๋ค.
์ ๊ฐ ์ ๊ณ์ ์ฒ์ ์ ๋ฌธํ์ ๋ ๊ธฐ์ ์ฑ ์์๋ ACID ๊ฐ๋ ์ด ์ผ๋ง๋ ๊ด๋ จ์ฑ์ด ์๋์ง์ ๋ํด ์ด์ผ๊ธฐํ์ต๋๋ค. ๊ณตํํ๊ฒ ๋งํ๋ฉด ACID๋ ์๊ฒฉํ ๊ตฌํ ํ์ค์ด ์๋๋ผ ๋๋ต์ ์ธ ์ค๋ช ์ผ๋ก ๊ฐ์ฃผ๋ฉ๋๋ค. ์ค๋๋ ๋๋ ๊ทธ๊ฒ์ด ํน์ ๋ฒ์ฃผ์ ๋ฌธ์ ๋ฅผ ์ ๊ธฐํ๊ณ ๋ค์ํ ๊ฐ๋ฅํ ํด๊ฒฐ์ฑ ์ ์ ์ํ๊ธฐ ๋๋ฌธ์ ๊ฐ์ฅ ์ ์ฉํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
๋ชจ๋ DBMS๊ฐ ACID๋ฅผ ์ค์ํ๋ ๊ฒ์ ์๋๋๋ค. ๋์์ ACID๋ฅผ ์ง์ํ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ตฌํ์ ์๊ตฌ ์ฌํญ ์งํฉ์ ๋ค๋ฅด๊ฒ ์ดํดํฉ๋๋ค. ACID ๊ตฌํ์ด ๊ณ ๋ฅด์ง ๋ชปํ ์ด์ ์ค ํ๋๋ ACID ์๊ตฌ ์ฌํญ์ ๊ตฌํํ๊ธฐ ์ํด ์ด๋ฃจ์ด์ ธ์ผ ํ๋ ๋ง์ ์ ์ถฉ์ ๋๋ฌธ์ ๋๋ค. ์ ์์๋ ์์ ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ACID ๊ท๊ฒฉ์ผ๋ก ์ ์ํ ์ ์์ง๋ง "๊ฐ๋ฅ์ฑ์ด ์๋" ์ด๋ฒคํธ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฉ์ปค๋์ฆ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ๊ทน๋จ์ ์ธ ๊ฒฝ์ฐ์ ํด์๋ ํฌ๊ฒ ๋ค๋ฅผ ์ ์์ต๋๋ค. ์ต์ํ ๊ฐ๋ฐ์๋ ๊ธฐ๋ณธ ๊ตฌํ์ ๋ณต์ก์ฑ์ ๋์ ์์ค์ผ๋ก ์ดํดํ์ฌ ํน์ํ ๋์๊ณผ ์ค๊ณ ์ฅ๋จ์ ์ ์ ์ ํ๊ฒ ์ดํดํ ์ ์์ต๋๋ค.
MongoDB๊ฐ ACID ์๊ตฌ ์ฌํญ์ ์ค์ํ๋์ง ์ฌ๋ถ์ ๋ํ ๋
ผ์์ ๋ฒ์ 4 ์ถ์ ์ดํ์๋ ๊ณ์๋ฉ๋๋ค. MongoDB๋ ์ค๋ซ๋์ ์ง์๋์ง ์์์ต๋๋ค
์๋๋ฆฌ์ค๋ฅผ ๋ณด์ฌ์ฃผ๋ ๋ค์ด์ด๊ทธ๋จ. MongoDB๊ฐ ๋์คํฌ์ ๋ฐ์ดํฐ๋ฅผ ์ฐ๊ธฐ ์ ์ ์ถฉ๋์ด ๋ฐ์ํจ
๋์คํฌ์ ์ปค๋ฐํ๋ ๊ฒ์ ๋น์ฉ์ด ๋ง์ด ๋๋ ํ๋ก์ธ์ค์ ๋๋ค. ๋น๋ฒํ ์ปค๋ฐ์ ํผํจ์ผ๋ก์จ ๊ฐ๋ฐ์๋ ์์ ์ฑ์ ํฌ์ํ๋ฉด์ ๋ น์ ์ฑ๋ฅ์ ํฅ์์ํต๋๋ค. MongoDB๋ ํ์ฌ ๋ก๊น ์ ์ง์ํ์ง๋ง ๋ก๊ทธ๋ ๊ธฐ๋ณธ์ ์ผ๋ก 100ms๋ง๋ค ์บก์ฒ๋๋ฏ๋ก ๋ํฐ ์ฐ๊ธฐ๋ ์ฌ์ ํ ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ์ ์ํฅ์ ๋ฏธ์น ์ ์์ต๋๋ค. ์ฆ, ์ํ์ ํจ์ฌ ๋ฎ์ง๋ง ๋ก๊ทธ์ ๊ทธ์ ํ์๋ ๋ณ๊ฒฝ ์ฌํญ์ ๋ํด ์ ์ฌํ ์๋๋ฆฌ์ค๊ฐ ์ฌ์ ํ ๊ฐ๋ฅํฉ๋๋ค.
๊ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค์๋ ๊ณ ์ ํ ์ผ๊ด์ฑ ๋ฐ ๊ฒฉ๋ฆฌ ๋ฉ์ปค๋์ฆ์ด ์์ต๋๋ค.
ACID ์๊ตฌ ์ฌํญ ์ค ์ผ๊ด์ฑ๊ณผ ๊ฒฉ๋ฆฌ๋ ์ ์ถฉ ๋ฒ์๊ฐ ๋ ๋๊ธฐ ๋๋ฌธ์ ๊ฐ์ฅ ๋ง์ ์์ ๊ตฌํ์ ์๋ํฉ๋๋ค. ์ผ๊ด์ฑ๊ณผ ๊ฒฉ๋ฆฌ๋ ์๋นํ ๋น์ฉ์ด ๋ง์ด ๋๋ ๊ธฐ๋ฅ์ด๋ผ๊ณ ํ ์ ์์ต๋๋ค. ๋ฐ์ดํฐ ์ผ๊ด์ฑ์ ์ํด ์กฐ์ ์ด ํ์ํ๊ณ ๊ฒฝ์์ด ์ฌํ๋ฉ๋๋ค. ์ฌ๋ฌ ๋ฐ์ดํฐ ์ผํฐ์ ๊ฑธ์ณ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ํ์ ์ผ๋ก ํ์ฅํด์ผ ํ๋ ๊ฒฝ์ฐ(ํนํ ์๋ก ๋ค๋ฅธ ์ง๋ฆฌ์ ์ง์ญ์ ์์นํ ๊ฒฝ์ฐ) ๋ฌธ์ ์ ๋ณต์ก์ฑ์ด ํฌ๊ฒ ์ฆ๊ฐํฉ๋๋ค. ๋์ ์์ค์ ์ผ๊ด์ฑ์ ๋ฌ์ฑํ๋ ๊ฒ์ ๊ฐ์ฉ์ฑ์ ๊ฐ์์ํค๊ณ ๋คํธ์ํฌ ๋ถํ ์ ์ฆ๊ฐ์ํค๊ธฐ ๋๋ฌธ์ ๋งค์ฐ ์ด๋ ต์ต๋๋ค. ์ด ํ์์ ๋ํ ๋ณด๋ค ์ผ๋ฐ์ ์ธ ์ค๋ช
์ ๋ณด๋ ค๋ฉด ๋ค์์ ์ฐธ์กฐํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
DBMS๋ ์ข ์ข ๋ค์ํ ์์ค์ ๊ฒฉ๋ฆฌ๋ฅผ ์ ๊ณตํฉ๋๋ค. ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ์๋ ์์ ์ ์ ํธ๋์ ๋ฐ๋ผ ๊ฐ์ฅ ํจ๊ณผ์ ์ธ ๊ฒ์ ์ ํํ ์ ์์ต๋๋ค. ๊ฒฉ๋ฆฌ ์์ค์ด ๋ฎ์ผ๋ฉด ์๋๊ฐ ๋นจ๋ผ์ง์ง๋ง ๋ฐ์ดํฐ ๊ฒฝํฉ์ ์ํ๋ ๋์์ง๋๋ค. ์ ์ฐ์ฑ์ด ๋์ผ๋ฉด ์ด๋ฌํ ํ๋ฅ ์ด ์ค์ด๋ค์ง๋ง ์์ ์๋๊ฐ ๋๋ ค์ง๊ณ ๊ฒฝ์์ด ๋ฐ์ํ ์ ์์ผ๋ฉฐ, ์ด๋ก ์ธํด ๋ฒ ์ด์ค์ ๋ธ๋ ์ดํฌ๊ฐ ๋ฐ์ํ์ฌ ๊ณ ์ฅ์ด ์์๋ ์ ์์ต๋๋ค.
๊ธฐ์กด ๋์์ฑ ๋ชจ๋ธ ๋ฐ ์ด๋ค ๊ฐ์ ๊ด๊ณ ๊ฒํ
SQL ํ์ค์ XNUMX๊ฐ์ง ๊ฒฉ๋ฆฌ ์์ค๋ง ์ ์ํ์ง๋ง ์ด๋ก ์ ์ผ๋ก๋ ์ค์ ์ ์ผ๋ก๋ ๋ ๋ง์ ๊ฒฉ๋ฆฌ ์์ค์ด ์์ต๋๋ค.
SQL ํ์ค์์๋ ๋ค์๊ณผ ๊ฐ์ ๊ฒฉ๋ฆฌ ์์ค์ ์ธ๊ธํฉ๋๋ค.
- ์ง๋ ฌํ ๊ฐ๋ฅ (๊ฐ์ฅ ์๊ฒฉํ๊ณ ๋น์ฉ์ด ๋ง์ด ๋ญ๋๋ค): ์ง๋ ฌํ ๊ฐ๋ฅ ์คํ์ ์ผ๋ถ ์์ฐจ ํธ๋์ญ์ ์คํ๊ณผ ๋์ผํ ํจ๊ณผ๋ฅผ ๊ฐ์ต๋๋ค. ์์ฐจ์ ์คํ์ ๊ฐ ํ์ ํธ๋์ญ์ ์ด ์ด์ ํธ๋์ญ์ ์ด ์๋ฃ๋ ํ์๋ง ์์๋จ์ ์๋ฏธํฉ๋๋ค. ์์ค์ด๋ผ๋ ์ ์ ์ ์ํด์ผ ํ๋ค. ์ง๋ ฌํ ๊ฐ๋ฅ ์ค๋ ์ท ๊ฒฉ๋ฆฌ ์์ฒด๋ SQL ํ์ค์ ํ์๋์ง ์์ง๋ง ํด์์ ์ฐจ์ด๋ก ์ธํด ์์ ์ค๋ ์ท ๊ฒฉ๋ฆฌ(์: Oracle)๋ก ๊ตฌํ๋๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค.
- ๋ฐ๋ณต ๊ฐ๋ฅํ ์ฝ๊ธฐ: ํ์ฌ ํธ๋์ญ์
์ ์ปค๋ฐ๋์ง ์์ ๋ ์ฝ๋๋ ํ์ฌ ํธ๋์ญ์
์์ ์ฌ์ฉํ ์ ์์ง๋ง ๋ค๋ฅธ ํธ๋์ญ์
(์: ์ ํ)์ ์ํด ๋ณ๊ฒฝ๋ ๋ด์ฉ์
๋ณด์ด์ง ์๋ . - ์ปค๋ฐ๋ ์ฝ๊ธฐ: ์ปค๋ฐ๋์ง ์์ ๋ฐ์ดํฐ๋ ํธ๋์ญ์ ์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ด ๊ฒฝ์ฐ ํธ๋์ญ์ ์ ์ปค๋ฐ๋ ๋ฐ์ดํฐ๋ง ๋ณผ ์ ์์ผ๋ฉฐ ๊ฐ์ ์ฝ๊ธฐ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค. ํธ๋์ญ์ ์ด ์ ํ์ ์ฝ์ ํ๊ณ ์ปค๋ฐํ๋ ๊ฒฝ์ฐ ํ์ฌ ํธ๋์ญ์ ์ ์ฟผ๋ฆฌ ์ ํด๋น ํ์ ๋ณผ ์ ์์ต๋๋ค.
- ์ปค๋ฐ๋์ง ์์ ์ฝ๊ธฐ (๊ฐ์ฅ ๋ ์๊ฒฉํ๊ณ ๋น์ฉ์ด ๋ง์ด ๋๋ ์์ค): ๋ํฐ ์ฝ๊ธฐ๊ฐ ํ์ฉ๋๋ฉฐ, ํธ๋์ญ์
์ ๋ค๋ฅธ ํธ๋์ญ์
์์ ์ปค๋ฐ๋์ง ์์ ๋ณ๊ฒฝ ์ฌํญ์ ๋ณผ ์ ์์ต๋๋ค. ์ค์ ๋ก ์ด ์์ค์ ์ฟผ๋ฆฌ์ ๊ฐ์ ๋๋ต์ ์ธ ์ถ์ ์ ์ ์ฉํ ์ ์์ต๋๋ค.
COUNT(*)
์ฑ ์ ์์.
์ํ ์ง๋ ฌํ ๊ฐ๋ฅ ๋ฐ์ดํฐ ๊ฒฝํฉ์ ์ํ์ ์ต์ํํ๋ ๋์์ ๊ตฌํ ๋น์ฉ์ด ๊ฐ์ฅ ๋ง์ด ๋ค๊ณ ์์คํ ์์ ๊ฐ์ฅ ๋์ ๊ฒฝ์ ๋ถํ๋ฅผ ์ด๋ํฉ๋๋ค. ๋ค๋ฅธ ๊ฒฉ๋ฆฌ ์์ค์ ๊ตฌํํ๊ธฐ ์ฝ์ง๋ง ๋ฐ์ดํฐ ๊ฒฝํฉ ๊ฐ๋ฅ์ฑ์ด ๋์์ง๋๋ค. ์ผ๋ถ DBMS์์๋ ์ฌ์ฉ์ ์ ์ ๊ฒฉ๋ฆฌ ์์ค์ ์ค์ ํ ์ ์์ง๋ง ๋ค๋ฅธ DBMS์์๋ ๊ฐ๋ ฅํ ์ ํธ๋๋ฅผ ๊ฐ๊ณ ์์ผ๋ฉฐ ๋ชจ๋ ์์ค์ด ์ง์๋๋ ๊ฒ์ ์๋๋๋ค.
๊ฒฉ๋ฆฌ ์์ค์ ๋ํ ์ง์์ ์ข ์ข ํน์ DBMS์์ ๊ด๊ณ ๋์ง๋ง ํด๋น ๋์์ ์ฃผ์ ๊น๊ฒ ์ฐ๊ตฌํด์ผ๋ง ์ค์ ๋ก ๋ฌด์จ ์ผ์ด ์ผ์ด๋๊ณ ์๋์ง ์ ์ ์์ต๋๋ค.
๋ค์ํ DBMS์ ๋ํ ๋ค์ํ ๊ฒฉ๋ฆฌ ์์ค์ ๋์์ฑ ์ด์ ๊ฒํ
๊ทธ์ ํ๋ก์ ํธ์์ ๋งํด ํด๋ ํ๋ง
์ผ๋ฐ์ ์ธ ์ฐจ๋จ์ ์ ์งํ๊ธฐ ์ด๋ ค์ธ ๋ ๋๊ด์ ์ฐจ๋จ์ด ๋์์ด ๋ฉ๋๋ค.
์ฐจ๋จ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ฒฝ์์ ์ฆ๊ฐ์ํฌ ๋ฟ๋ง ์๋๋ผ ์ ํ๋ฆฌ์ผ์ด์ ์๋ฒ๊ฐ ์ง์์ ์ผ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฐ๊ฒฐํด์ผ ํ๊ธฐ ๋๋ฌธ์ ๋น์ฉ์ด ๋งค์ฐ ๋ง์ด ๋ค ์ ์์ต๋๋ค. ๋คํธ์ํฌ ๋ถํ ์ ๋ฐฐํ์ ์ ๊ธ ์ํฉ์ ์ ํ์ํค๊ณ ์๋ณ ๋ฐ ํด๊ฒฐ์ด ์ด๋ ค์ด ๊ต์ฐฉ ์ํ๋ฅผ ์ด๋ํ ์ ์์ต๋๋ค. ๋ฐฐํ์ ์ ๊ธ์ด ์ ํฉํ์ง ์์ ๊ฒฝ์ฐ ๋๊ด์ ์ ๊ธ์ด ๋์์ด ๋ฉ๋๋ค.
UPDATE products
SET name = 'Telegraph receiver', version = 2
WHERE id = 1 AND version = 1
์ด ๊ฒฝ์ฐ ํ
์ด๋ธ์ ์
๋ฐ์ดํธํฉ๋๋ค. products
๋ค๋ฅธ ์์
์ด ์ด์ ์ ์ด ํ์ ๋ณ๊ฒฝํ ๊ฒฝ์ฐ์๋ ์ํ๋์ง ์์ต๋๋ค. ์ด ํ์ ๋ํด ๋ค๋ฅธ ์์
์ด ์ํ๋์ง ์์ ๊ฒฝ์ฐ ํ ํ์ ๋ํ ๋ณ๊ฒฝ์ด ๋ฐ์ํ๋ฉฐ ์
๋ฐ์ดํธ๊ฐ ์ฑ๊ณตํ๋ค๊ณ ๋งํ ์ ์์ต๋๋ค.
๋ํฐ ์ฝ๊ธฐ(Dirty Read) ๋ฐ ๋ฐ์ดํฐ ์์ค ์ธ์ ๋ค๋ฅธ ์์ธ ์ฌํญ์ด ์์ต๋๋ค.
๋ฐ์ดํฐ ์ผ๊ด์ฑ๊ณผ ๊ด๋ จํ์ฌ ๋ํฐ ์ฝ๊ธฐ ๋ฐ ๋ฐ์ดํฐ ์์ค๋ก ์ด์ด์ง ์ ์๋ ๊ฒฝ์ ์กฐ๊ฑด์ ๊ฐ๋ฅ์ฑ์ ์ค์ ์ ๋ก๋๋ค. ๊ทธ๋ฌ๋ ๋ฐ์ดํฐ ์ด์ ํ์์ ์ฌ๊ธฐ์ ๋๋์ง ์์ต๋๋ค.
์ด๋ฌํ ์ด์ ํ์์ ํ ๊ฐ์ง ์๋ ์๊ณก์ ๊ธฐ๋กํ๋ ๊ฒ์ ๋๋ค. (๋นํ์ด ์ฐ๊ธฐ). ์๊ณก์ ์ผ๋ฐ์ ์ผ๋ก ์ ๊ทน์ ์ผ๋ก ๊ฒ์๋์ง ์๊ธฐ ๋๋ฌธ์ ๊ฐ์งํ๊ธฐ ์ด๋ ต์ต๋๋ค. ๋ํฐ ์ฝ๊ธฐ๋ ๋ฐ์ดํฐ ์์ค๋ก ์ธํ ๊ฒ์ด ์๋๋ผ ๋ฐ์ดํฐ์ ๋ํ ๋ ผ๋ฆฌ์ ์ ์ฝ ์กฐ๊ฑด ์๋ฐ์ผ๋ก ์ธํด ๋ฐ์ํฉ๋๋ค.
์๋ฅผ ๋ค์ด, ํ ๋ช ์ ์ด์์๊ฐ ํญ์ ํตํ ์ค์ด์ด์ผ ํ๋ ๋ชจ๋ํฐ๋ง ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ณ ๋ คํด ๋ณด๊ฒ ์ต๋๋ค.
BEGIN tx1; BEGIN tx2;
SELECT COUNT(*)
FROM operators
WHERE oncall = true;
0 SELECT COUNT(*)
FROM operators
WHERE oncall = TRUE;
0
UPDATE operators UPDATE operators
SET oncall = TRUE SET oncall = TRUE
WHERE userId = 4; WHERE userId = 2;
COMMIT tx1; COMMIT tx2;
์ ์ํฉ์์ ๋ ํธ๋์ญ์ ์ด ๋ชจ๋ ์ฑ๊ณต์ ์ผ๋ก ์ปค๋ฐ๋๋ฉด ๋ ์ฝ๋ ์์์ด ๋ฐ์ํฉ๋๋ค. ๋ํฐ ์ฝ๊ธฐ๋ ๋ฐ์ดํฐ ์์ค์ ์์์ง๋ง ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ์ด ์์๋์์ต๋๋ค. ์ด์ ๋ ์ฌ๋์ด ๋์์ ํตํ ์ค์ธ ๊ฒ์ผ๋ก ๊ฐ์ฃผ๋ฉ๋๋ค.
์ง๋ ฌํ ๊ฐ๋ฅ ๊ฒฉ๋ฆฌ, ์คํค๋ง ๋์์ธ ๋๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ ์ฝ ์กฐ๊ฑด์ ์ฐ๊ธฐ ์์์ ์ ๊ฑฐํ๋ ๋ฐ ๋์์ด ๋ ์ ์์ต๋๋ค. ๊ฐ๋ฐ์๋ ํ๋ก๋์ ํ๊ฒฝ์์ ์ด๋ฌํ ์ด์ ํ์์ ๋ฐฉ์งํ๊ธฐ ์ํด ๊ฐ๋ฐ ์ค์ ์ด๋ฌํ ์ด์ ํ์์ ์๋ณํ ์ ์์ด์ผ ํฉ๋๋ค. ๋์์ ๋ น์ ์๊ณก์ ์ฝ๋ ๋ฒ ์ด์ค์์ ์ฐพ๊ธฐ๊ฐ ๋งค์ฐ ์ด๋ ต์ต๋๋ค. ํนํ ๋๊ท๋ชจ ์์คํ ์์ ์๋ก ๋ค๋ฅธ ๊ฐ๋ฐ ํ์ด ๋์ผํ ํ ์ด๋ธ์ ๊ธฐ๋ฐ์ผ๋ก ๊ธฐ๋ฅ ๊ตฌํ์ ๋ด๋นํ๊ณ ๋ฐ์ดํฐ ์ก์ธ์ค์ ์ธ๋ถ ์ฌํญ์ ๋์ํ์ง ์๋ ๊ฒฝ์ฐ.
๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฌ์ฉ์๊ฐ ๋ฌด์์ ํด์ผ ํ ์ง์ ๋ํด ํญ์ ๋์ํ๋ ๊ฒ์ ์๋๋๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฃผ์ ๊ธฐ๋ฅ ์ค ํ๋๋ ์คํ ์์๋ฅผ ๋ณด์ฅํ๋ ๊ฒ์ด์ง๋ง ์ด ์์ ์์ฒด๋ ์ํํธ์จ์ด ๊ฐ๋ฐ์์๊ฒ ํฌ๋ช ํ์ง ์์ ์ ์์ต๋๋ค. ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ํ๋ก๊ทธ๋๋จธ๊ฐ ์๋ํ ์์๊ฐ ์๋ ์์ ๋ ์์๋๋ก ํธ๋์ญ์ ์ ์คํํฉ๋๋ค. ํนํ ๋ถํ๊ฐ ๋์ ๋ณ๋ ฌ ์์คํ ์์๋ ํธ๋์ญ์ ์์๋ฅผ ์์ธกํ๊ธฐ ์ด๋ ต์ต๋๋ค.
๊ฐ๋ฐ ์ค์, ํนํ ๋น์ฐจ๋จ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ์์ ํ ๋ ์๋ชป๋ ์คํ์ผ๊ณผ ๋ฎ์ ๊ฐ๋ ์ฑ์ผ๋ก ์ธํด ์ฌ์ฉ์๋ ํธ๋์ญ์ ์ด ์์ฐจ์ ์ผ๋ก ์คํ๋๋ค๊ณ ๋ฏฟ๊ฒ ๋ ์ ์์ต๋๋ค. ์ค์ ๋ก ํธ๋์ญ์ ์ ์ด๋ค ์์๋ก๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋์ฐฉํ ์ ์์ต๋๋ค.
์ผํ ๋ณด๋ฉด ์๋ ํ๋ก๊ทธ๋จ์์๋ T1๊ณผ T2๊ฐ ์์ฐจ์ ์ผ๋ก ํธ์ถ๋๋๋ฐ, ์ด ํจ์๋ค์ด ๋
ผ๋ธ๋กํน์ด๋ผ๋ฉด ์ฆ์ ๊ฒฐ๊ณผ๋ฅผ ๋ค์๊ณผ ๊ฐ์ ํ์์ผ๋ก ๋ฐํํ๋ค.
result1 = T1() // ์ค์ ๊ฒฐ๊ณผ๋ ์ฝ์์
๋๋ค.
๊ฒฐ๊ณผ2 = T2()
์์์ฑ์ด ํ์ํ๊ณ (์ฆ, ๋ชจ๋ ์์ ์ ์๋ฃํ๊ฑฐ๋ ์ค๋จํด์ผ ํจ) ์์๊ฐ ์ค์ํ ๊ฒฝ์ฐ ์์ T1 ๋ฐ T2๋ ๋จ์ผ ํธ๋์ญ์ ๋ด์์ ์ํ๋์ด์ผ ํฉ๋๋ค.
์ ํ๋ฆฌ์ผ์ด์ ์์ค ์ค๋ฉ์ ์ ํ๋ฆฌ์ผ์ด์ ์ธ๋ถ๋ก ์ด๋ํ ์ ์์ต๋๋ค.
์ค๋ฉ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ํ์ผ๋ก ๋ถํ ํ๋ ๋ฐฉ๋ฒ์ ๋๋ค. ์ผ๋ถ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ์๋์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ํ์ผ๋ก ๋ถํ ํ ์ ์๋ ๋ฐ๋ฉด ๋ค๋ฅธ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ๋ถํ ํ ์ ์๊ฑฐ๋ ๊ทธ๋ค์ง ๋ฅ์ํ์ง ์์ต๋๋ค. ๋ฐ์ดํฐ ์ค๊ณ์/๊ฐ๋ฐ์๊ฐ ๋ฐ์ดํฐ์ ์ก์ธ์คํ๋ ๋ฐฉ๋ฒ์ ์ ํํ๊ฒ ์์ธกํ ์ ์์ผ๋ฉด ์ด ์์ ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์์ํ๋ ๋์ ์ฌ์ฉ์ ๊ณต๊ฐ์ ์ํ ํํฐ์ ์ ๋ง๋ค ์ ์์ต๋๋ค. ์ด ํ๋ก์ธ์ค๋ฅผ "์ ํ๋ฆฌ์ผ์ด์ ์์ค ์ค๋ฉ"์ด๋ผ๊ณ ํฉ๋๋ค. (์ ํ๋ฆฌ์ผ์ด์ ์์ค ์ค๋ฉ).
๋ถํํ๊ฒ๋ ์ด ์ด๋ฆ์ ์ข ์ข ์ค๋ฉ์ด ์ ํ๋ฆฌ์ผ์ด์ ์๋น์ค์ ์กด์ฌํ๋ค๋ ์คํด๋ฅผ ๋ถ๋ฌ์ผ์ผํต๋๋ค. ์ค์ ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ ๋ณ๋์ ๋ ์ด์ด๋ก ๊ตฌํ๋ ์๋ ์์ต๋๋ค. ๋ฐ์ดํฐ ์ฆ๊ฐ ๋ฐ ์คํค๋ง ๋ฐ๋ณต์ ๋ฐ๋ผ ์ค๋ฉ ์๊ตฌ ์ฌํญ์ด ์๋นํ ๋ณต์กํด์ง ์ ์์ต๋๋ค. ์ผ๋ถ ์ ๋ต์์๋ ์ ํ๋ฆฌ์ผ์ด์ ์๋ฒ๋ฅผ ์ฌ๋ฐฐํฌํ์ง ์๊ณ ๋ ๋ฐ๋ณตํ๋ ๊ธฐ๋ฅ์ ํตํด ์ด์ ์ ์ป์ ์ ์์ต๋๋ค.
์ค๋ฉ ์๋น์ค์ ์ ํ๋ฆฌ์ผ์ด์
์๋ฒ๊ฐ ๋ถ๋ฆฌ๋ ์ํคํ
์ฒ์ ์
์ค๋ฉ์ ๋ณ๋์ ์๋น์ค๋ก ์ด๋ํ๋ฉด ์ ํ๋ฆฌ์ผ์ด์
์ ์ฌ๋ฐฐํฌํ ํ์ ์์ด ๋ค์ํ ์ค๋ฉ ์ ๋ต์ ์ฌ์ฉํ ์ ์๋ ๊ธฐ๋ฅ์ด ํ์ฅ๋ฉ๋๋ค.
์๋ ์ฆ๊ฐ๋ ์ํํ ์ ์์ต๋๋ค.
AUTOINCREMENT๋ ๊ธฐ๋ณธ ํค๋ฅผ ์์ฑํ๋ ์ผ๋ฐ์ ์ธ ๋ฐฉ๋ฒ์ ๋๋ค. ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ID ์์ฑ๊ธฐ๋ก ์ฌ์ฉ๋๊ณ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์๋ณ์๋ฅผ ์์ฑํ๋๋ก ์ค๊ณ๋ ํ ์ด๋ธ์ด ํฌํจ๋์ด ์๋ ๊ฒฝ์ฐ๊ฐ ์ข ์ข ์์ต๋๋ค. ์๋ ์ฆ๊ฐ๋ฅผ ์ฌ์ฉํ์ฌ ๊ธฐ๋ณธ ํค๋ฅผ ์์ฑํ๋ ๊ฒ์ด ์ด์์ ์ด์ง ์์ ๋ฐ์๋ ๋ช ๊ฐ์ง ์ด์ ๊ฐ ์์ต๋๋ค.
- ๋ถ์ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์๋ ์ฆ๊ฐ๋ ์ฌ๊ฐํ ๋ฌธ์ ์ ๋๋ค. ID๋ฅผ ์์ฑํ๋ ค๋ฉด ์ ์ญ ์ ๊ธ์ด ํ์ํฉ๋๋ค. ๋์ UUID๋ฅผ ์์ฑํ ์ ์์ต๋๋ค. ์ด๋ ์๋ก ๋ค๋ฅธ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ ธ๋ ๊ฐ์ ์ํธ ์์ฉ์ด ํ์ํ์ง ์์ต๋๋ค. ์ ๊ธ์ ์ฌ์ฉํ ์๋ ์ฆ๊ฐ๋ ๊ฒฝํฉ์ ์ผ๊ธฐํ๊ณ ๋ถ์ฐ ์ํฉ์์ ์ฝ์ ์ฑ๋ฅ์ ํฌ๊ฒ ์ ํ์ํฌ ์ ์์ต๋๋ค. ์ผ๋ถ DBMS(์: MySQL)๋ ๋ง์คํฐ-๋ง์คํฐ ๋ณต์ ๋ฅผ ์ ์ ํ๊ฒ ๊ตฌ์ฑํ๊ธฐ ์ํด ํน๋ณํ ๊ตฌ์ฑ๊ณผ ๋ ์ธ์ฌํ ์ฃผ์๊ฐ ํ์ํ ์ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ตฌ์ฑ ์ ์ค์๋ฅผ ์ ์ง๋ฅด๊ธฐ ์ฝ๊ณ ์ด๋ก ์ธํด ๋ น์์ด ์คํจํ๊ฒ ๋ฉ๋๋ค.
- ์ผ๋ถ ๋ฐ์ดํฐ๋ฒ ์ด์ค์๋ ๊ธฐ๋ณธ ํค๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋ ๋ถํ ์๊ณ ๋ฆฌ์ฆ์ด ์์ต๋๋ค. ์ฐ์ ID๋ก ์ธํด ์์ธกํ ์ ์๋ ํซ์คํ์ด ๋ฐ์ํ๊ณ ์ผ๋ถ ํํฐ์ ์์๋ ๋ก๋๊ฐ ์ฆ๊ฐํ๋ ๋ฐ๋ฉด ๋ค๋ฅธ ํํฐ์ ์ ์ ํด ์ํ๋ก ์ ์ง๋ ์ ์์ต๋๋ค.
- ๊ธฐ๋ณธ ํค๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํ์ ์ก์ธ์คํ๋ ๊ฐ์ฅ ๋น ๋ฅธ ๋ฐฉ๋ฒ์ ๋๋ค. ๋ ์ฝ๋๋ฅผ ์๋ณํ๋ ๋ ๋์ ๋ฐฉ๋ฒ์ ํตํด ์์ฐจ ID๋ ํ ์ด๋ธ์์ ๊ฐ์ฅ ์ค์ํ ์ด์ ์๋ฏธ ์๋ ๊ฐ์ผ๋ก ์ฑ์์ง ์ธ๋ชจ ์๋ ์ด๋ก ๋ฐ๊ฟ ์ ์์ต๋๋ค. ๋ฐ๋ผ์ ๊ฐ๋ฅํ๋ค๋ฉด ์ ์ญ์ ์ผ๋ก ๊ณ ์ ํ๊ณ ์์ฐ์ค๋ฌ์ด ๊ธฐ๋ณธ ํค(์: ์ฌ์ฉ์ ์ด๋ฆ)๋ฅผ ์ ํํ์ญ์์ค.
์ ๊ทผ ๋ฐฉ์์ ๊ฒฐ์ ํ๊ธฐ ์ ์ ์๋ ์ฆ๊ฐ ID ๋ฐ UUID๊ฐ ์ธ๋ฑ์ฑ, ํํฐ์ ๋ ๋ฐ ์ค๋ฉ์ ๋ฏธ์น๋ ์ํฅ์ ๊ณ ๋ คํ์ธ์.
์ค๋๋ ๋ฐ์ดํฐ๋ ์ ์ฉํ ์ ์์ผ๋ฉฐ ์ ๊ธ์ด ํ์ํ์ง ์์ต๋๋ค.
MVCC(๋ค์ค ๋ฒ์ ๋์์ฑ ์ ์ด)๋ ์์์ ๊ฐ๋ตํ๊ฒ ์ค๋ช ํ ๋ง์ ์ผ๊ด์ฑ ์๊ตฌ ์ฌํญ์ ๊ตฌํํฉ๋๋ค. ์ผ๋ถ ๋ฐ์ดํฐ๋ฒ ์ด์ค(์: Postgres, Spanner)๋ MVCC๋ฅผ ์ฌ์ฉํ์ฌ ํธ๋์ญ์ ์ ์ค๋ ์ท(์ด์ ๋ฒ์ ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค)์ "๊ณต๊ธ"ํฉ๋๋ค. ์ผ๊ด์ฑ์ ๋ณด์ฅํ๊ธฐ ์ํด ์ค๋ ์ท ํธ๋์ญ์ ์ ์ง๋ ฌํํ ์๋ ์์ต๋๋ค. ์ด์ ์ค๋ ์ท์์ ์ฝ์ ๋ ์ค๋๋ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ต๋๋ค.
์๋ฅผ ๋ค์ด ๋ฐ์ดํฐ์์ ๋ถ์์ ์์ฑํ๊ฑฐ๋ ๋๋ต์ ์ธ ์ง๊ณ ๊ฐ์ ๊ณ์ฐํ ๋ ์ฝ๊ฐ ์ค๋๋ ๋ฐ์ดํฐ๋ฅผ ์ฝ๋ ๊ฒ์ด ์ ์ฉํ ์ ์์ต๋๋ค.
๋ ๊ฑฐ์ ๋ฐ์ดํฐ ์์ ์ ์ฒซ ๋ฒ์งธ ์ด์ ์ ๋๊ธฐ ์๊ฐ์ด ์งง๋ค๋ ๊ฒ์ ๋๋ค(ํนํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ์ฌ๋ฌ ์ง์ญ์ ๋ถ์ฐ๋์ด ์๋ ๊ฒฝ์ฐ). ๋ ๋ฒ์งธ๋ ์ฝ๊ธฐ ์ ์ฉ ํธ๋์ญ์ ์๋ ์ ๊ธ์ด ์๋ค๋ ๊ฒ์ ๋๋ค. ์ด๋ ์ค๋๋ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ ์ ์๋ ํ ๋ง์ด ์ฝ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ค์ํ ์ด์ ์ ๋๋ค.
์ ํ๋ฆฌ์ผ์ด์
์๋ฒ๋ ํํ์ ๋ฐ๋ํธ์ ์ต์ ๋ฒ์ ์ด ์์ด๋ 5์ด ์ ์ ๋ก์ปฌ ๋ณต์ ๋ณธ์์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ต๋๋ค.
DBMS๋ ์ด์ ๋ฒ์ ์ ์๋์ผ๋ก ์ ๊ฑฐํ๋ฉฐ ๊ฒฝ์ฐ์ ๋ฐ๋ผ ์์ฒญ ์ ์ด๋ฅผ ์ํํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด Postgres๋ฅผ ์ฌ์ฉํ๋ฉด ์ฌ์ฉ์๋ ๋ค์์ ์ํํ ์ ์์ต๋๋ค. VACUUM
์์ฒญ ์ ์๋์ผ๋ก ์ด ์์
์ ์ฃผ๊ธฐ์ ์ผ๋ก ์ํํฉ๋๋ค. Spanner๋ ๊ฐ๋น์ง ์์ง๊ธฐ๋ฅผ ์คํํ์ฌ XNUMX์๊ฐ๋ณด๋ค ์ค๋๋ ์ค๋
์ท์ ์ ๊ฑฐํฉ๋๋ค.
๋ชจ๋ ์๊ฐ ์์ค๋ ์๊ณก๋ ์ ์์ต๋๋ค.
์ปดํจํฐ ๊ณผํ์์ ๊ฐ์ฅ ์ ์ง์ผ์ง๋ ๋น๋ฐ์ ๋ชจ๋ ํ์ด๋ฐ API๊ฐ ๊ฑฐ์ง๋ง์ ํ๋ค๋ ๊ฒ์ ๋๋ค. ์ฌ์ค ์ฐ๋ฆฌ ๊ธฐ๊ณ๋ ์ ํํ ํ์ฌ ์๊ฐ์ ์์ง ๋ชปํฉ๋๋ค. ์ปดํจํฐ์๋ ์๊ฐ์ ์ ์งํ๋ ๋ฐ ์ฌ์ฉ๋๋ ์ง๋์ ์์ฑํ๋ ์์ ํฌ๋ฆฌ์คํธ์ด ํฌํจ๋์ด ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ด๋ ์ถฉ๋ถํ ์ ํํ์ง ์์ผ๋ฉฐ ์ ํํ ์๊ฐ๋ณด๋ค ์์๊ฑฐ๋ ๋ค์ฒ์ง ์ ์์ต๋๋ค. ๊ต๋๋ ํ๋ฃจ์ 20์ด์ ๋ฌํ ์ ์์ต๋๋ค. ๋ฐ๋ผ์ ์ปดํจํฐ์ ์๊ฐ์ ์ฃผ๊ธฐ์ ์ผ๋ก ๋คํธ์ํฌ ์๊ฐ๊ณผ ๋๊ธฐํ๋์ด์ผ ํฉ๋๋ค.
NTP ์๋ฒ๋ ๋๊ธฐํ์ ์ฌ์ฉ๋์ง๋ง ๋๊ธฐํ ํ๋ก์ธ์ค ์์ฒด์๋ ๋คํธ์ํฌ ์ง์ฐ์ด ๋ฐ์ํ ์ ์์ต๋๋ค. ๋์ผํ ๋ฐ์ดํฐ ์ผํฐ์ ์๋ NTP ์๋ฒ์ ๋๊ธฐํํ๋ ๊ฒฝ์ฐ์๋ ์๊ฐ์ด ๊ฑธ๋ฆฝ๋๋ค. ๊ณต์ฉ NTP ์๋ฒ๋ก ์์ ํ๋ฉด ํจ์ฌ ๋ ํฐ ์๊ณก์ด ๋ฐ์ํ ์ ์๋ค๋ ๊ฒ์ ๋ถ๋ช ํฉ๋๋ค.
์์์๊ณ์ GPS ์๊ณ๋ ํ์ฌ ์๊ฐ์ ํ์ธํ๋ ๋ฐ ๋ ์ ํฉํ์ง๋ง ๋น์ฉ์ด ๋ง์ด ๋ค๊ณ ๋ณต์กํ ์ค์ ์ด ํ์ํ๋ฏ๋ก ๋ชจ๋ ์๋์ฐจ์ ์ค์นํ ์๋ ์์ต๋๋ค. ์ด ๋๋ฌธ์ ๋ฐ์ดํฐ ์ผํฐ์์๋ ๊ณ์ธตํ ์ ๊ทผ ๋ฐฉ์์ ์ฌ์ฉํฉ๋๋ค. ์์ ๋ฐ/๋๋ GPS ์๊ณ๋ ์ ํํ ์๊ฐ์ ํ์ํ ํ ๋ณด์กฐ ์๋ฒ๋ฅผ ํตํด ๋ค๋ฅธ ์์คํ ์ผ๋ก ๋ฐฉ์ก๋ฉ๋๋ค. ์ด๋ ๊ฐ ์์คํ ์ด ์ ํํ ์๊ฐ์์ ํน์ ์คํ์ ์ ๊ฒฝํํ๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค.
์ ํ๋ฆฌ์ผ์ด์ ๊ณผ ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ์๋ก ๋ค๋ฅธ ์์คํ (๋ค๋ฅธ ๋ฐ์ดํฐ ์ผํฐ๊ฐ ์๋ ๊ฒฝ์ฐ)์ ์์นํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง๊ธฐ ๋๋ฌธ์ ์ํฉ์ ๋์ฑ ์ ํ๋ฉ๋๋ค. ๋ฐ๋ผ์ ์๊ฐ์ ์๋ก ๋ค๋ฅธ ์์คํ ์ ๋ถ์ฐ๋ DB ๋ ธ๋์์๋ง ๋ฌ๋ผ์ง๋ ๊ฒ์ด ์๋๋๋ค. ์์ฉ ํ๋ก๊ทธ๋จ ์๋ฒ์์๋ ๋ค๋ฆ ๋๋ค.
Google TrueTime์ ์์ ํ ๋ค๋ฅธ ์ ๊ทผ ๋ฐฉ์์ ์ทจํฉ๋๋ค. ๋๋ถ๋ถ์ ์ฌ๋๋ค์ ์ด ๋ฐฉํฅ์ผ๋ก์ Google์ ๋ฐ์ ์ด ์์ ์๊ณ์ GPS ์๊ณ๋ก์ ์ง๋ถํ ์ ํ์ผ๋ก ์ค๋ช ๋๋ค๊ณ ๋ฏฟ์ง๋ง ์ด๋ ํฐ ๊ทธ๋ฆผ์ ์ผ๋ถ์ผ๋ฟ์ ๋๋ค. TrueTime์ ์๋ ๋ฐฉ์์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- TrueTime์ GPS์ ์์ ์๊ณ๋ผ๋ ๋ ๊ฐ์ง ์์ค๋ฅผ ์ฌ์ฉํฉ๋๋ค. ์ด ์๊ณ์๋ ์๊ด ๊ด๊ณ๊ฐ ์๋ ์ค๋ฅ ๋ชจ๋๊ฐ ์์ต๋๋ค. [์์ธํ ๋ด์ฉ์ 5ํ์ด์ง๋ฅผ ์ฐธ์กฐํ์ธ์.
์ฌ๊ธฐ์ - ๋๋ต. ๋ฒ์ญ), ๋ฐ๋ผ์ ๊ณต๋ ์ฌ์ฉ์ผ๋ก ์ ๋ขฐ์ฑ์ด ๋์์ง๋๋ค. - TrueTime์๋ ํน์ดํ API๊ฐ ์์ต๋๋ค. ์ธก์ ์ค๋ฅ์ ๋ถํ์ค์ฑ์ด ๋ด์ฅ๋ ๊ฐ๊ฒฉ์ผ๋ก ์๊ฐ์ ๋ฐํํฉ๋๋ค. ์ค์ ์๊ฐ์ ๊ฐ๊ฒฉ์ ์ํ ๊ฒฝ๊ณ์ ํํ ๊ฒฝ๊ณ ์ฌ์ด์ ์ด๋๊ฐ์ ์์ต๋๋ค. Google์ ๋ถ์ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ธ Spanner๋ ํ์ฌ ์๊ฐ์ด ๋ฒ์๋ฅผ ๋ฒ์ด๋ฌ๋ค๊ณ ์์ ํ๊ฒ ๋งํ ๋๊น์ง ๊ธฐ๋ค๋ฆฝ๋๋ค. ์ด ๋ฐฉ๋ฒ์ ํนํ ๋ง์คํฐ์ ๋ถํ์ค์ฑ์ด ๋์ ๊ฒฝ์ฐ ์์คํ ์ ์ฝ๊ฐ์ ๋๊ธฐ ์๊ฐ์ ๋ฐ์์ํค์ง๋ง ์ ์ญ์ ์ผ๋ก ๋ถ์ฐ๋ ์ํฉ์์๋ ์ ํ์ฑ์ ๋ณด์ฅํฉ๋๋ค.
Spanner ๊ตฌ์ฑ์์๋ TT.now()๊ฐ ๊ฐ๊ฒฉ์ ๋ฐํํ๋ TrueTime์ ์ฌ์ฉํ๋ฏ๋ก Spanner๋ ํ์ฌ ์๊ฐ์ด ํน์ ์ง์ ์ ์ง๋ฌ๋ค๊ณ ํ์ ํ ์ ์๋ ์ง์ ๊น์ง ๋จ์ํ ์ ์ ๋ชจ๋๋ก ์ ์ง๋ฉ๋๋ค.
ํ์ฌ ์๊ฐ์ ํ๋จํ๋ ์ ํ๋๊ฐ ๋จ์ด์ง๋ฉด Spanner ์์ ๊ธฐ๊ฐ์ด ๋์ด๋๊ณ ์ฑ๋ฅ์ด ์ ํ๋ฉ๋๋ค. ์ด๊ฒ์ด ๋ฐ๋ก ์์ ํ ์ ํํ ์๊ณ๋ฅผ ์ป๋ ๊ฒ์ด ๋ถ๊ฐ๋ฅํ๋๋ผ๋ ๊ฐ๋ฅํ ํ ์ต๊ณ ์ ์ ํ๋๋ฅผ ์ ์งํ๋ ๊ฒ์ด ์ค์ํ ์ด์ ์ ๋๋ค.
์ง์ฐ์๋ ๋ง์ ์๋ฏธ๊ฐ ์์ต๋๋ค.
์ง์ฐ์ด ๋ฌด์์ธ์ง ์์ญ ๋ช ์ ์ ๋ฌธ๊ฐ์๊ฒ ๋ฌผ์ด๋ณด๋ฉด ์๋ง๋ ๋ค๋ฅธ ๋๋ต์ ๋ค์ ์ ์์ ๊ฒ์ ๋๋ค. DBMS์์ ๋๊ธฐ ์๊ฐ์ ์ข ์ข "๋ฐ์ดํฐ๋ฒ ์ด์ค ๋๊ธฐ ์๊ฐ"์ด๋ผ๊ณ ๋ถ๋ฆฌ๋ฉฐ ํด๋ผ์ด์ธํธ๊ฐ ์ธ์ํ๋ ๊ฒ๊ณผ ๋ค๋ฆ ๋๋ค. ์ฌ์ค ํด๋ผ์ด์ธํธ๋ ๋คํธ์ํฌ ์ง์ฐ๊ณผ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ง์ฐ์ ํฉ์ ๊ด์ฐฐํฉ๋๋ค. ์ฆ๊ฐํ๋ ๋ฌธ์ ๋ฅผ ๋๋ฒ๊น ํ ๋ ๋๊ธฐ ์๊ฐ ์ ํ์ ๋ถ๋ฆฌํ๋ ๊ธฐ๋ฅ์ ๋งค์ฐ ์ค์ํฉ๋๋ค. ์ธก์ ํญ๋ชฉ์ ์์งํ๊ณ ํ์ํ ๋ ํญ์ ๋ ๊ฐ์ง ์ ํ์ ๋ชจ๋ ์ฃผ์ ๊น๊ฒ ์ดํด๋ณด์ธ์.
ํน์ ํธ๋์ญ์ ์ ๋ํ ์ฑ๋ฅ ์๊ตฌ ์ฌํญ์ ํ๊ฐํด์ผ ํฉ๋๋ค.
๋๋ก๋ DBMS์ ์ฑ๋ฅ ํน์ฑ๊ณผ ์ ํ ์ฌํญ์ด ์ฐ๊ธฐ/์ฝ๊ธฐ ์ฒ๋ฆฌ๋ ๋ฐ ๋๊ธฐ ์๊ฐ ์ธก๋ฉด์์ ์ง์ ๋ฉ๋๋ค. ์ด๋ ์ฃผ์ ์์คํ ๋งค๊ฐ๋ณ์์ ๋ํ ์ผ๋ฐ์ ์ธ ๊ฐ์๋ฅผ ์ ๊ณตํ์ง๋ง, ์๋ก์ด DBMS์ ์ฑ๋ฅ์ ํ๊ฐํ ๋ ํจ์ฌ ๋ ํฌ๊ด์ ์ธ ์ ๊ทผ ๋ฐฉ์์ ์ค์ํ ์์ (๊ฐ ์ฟผ๋ฆฌ ๋ฐ/๋๋ ํธ๋์ญ์ ์ ๋ํด)์ ๋ณ๋๋ก ํ๊ฐํ๋ ๊ฒ์ ๋๋ค. ์:
- ๊ด๋ จ ํ ์ด๋ธ์ ์ง์ ๋ ์ ์ฝ ์กฐ๊ฑด๊ณผ ํ ํจ๋ฉ์ ์ฌ์ฉํ์ฌ ํ ์ด๋ธ X(50์ฒ๋ง ํ ํฌํจ)์ ์ ํ์ ์ฝ์ ํ ๋์ ์ฐ๊ธฐ ์ฒ๋ฆฌ๋ ๋ฐ ๋๊ธฐ ์๊ฐ์ ๋๋ค.
- ํ๊ท ์น๊ตฌ ์๊ฐ 500๋ช ์ผ ๋ ํน์ ์ฌ์ฉ์์ ์น๊ตฌ์ ์น๊ตฌ ํ์๊ฐ ์ง์ฐ๋ฉ๋๋ค.
- ์ฌ์ฉ์๊ฐ ์๊ฐ๋น X ํญ๋ชฉ์ผ๋ก 100๋ช ์ ๋ค๋ฅธ ์ฌ์ฉ์๋ฅผ ํ๋ก์ฐํ ๋ ์ฌ์ฉ์ ๊ธฐ๋ก์์ ์์ 500๊ฐ ํญ๋ชฉ์ ๊ฒ์ํ๋ ๋ฐ ์ง์ฐ์ด ๋ฐ์ํฉ๋๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ์ฑ๋ฅ ์๊ตฌ ์ฌํญ์ ์ถฉ์กฑํ๋ค๊ณ ํ์ ํ ๋๊น์ง ํ๊ฐ ๋ฐ ์คํ์๋ ์ด๋ฌํ ์ค์ํ ์ฌ๋ก๊ฐ ํฌํจ๋ ์ ์์ต๋๋ค. ๋น์ทํ ๊ฒฝํ ๋ฒ์น์ ๋ฐ๋ผ ์ง์ฐ ์๊ฐ ์ธก์ ํญ๋ชฉ์ ์์งํ๊ณ SLO๋ฅผ ๊ฒฐ์ ํ ๋ ์ด๋ฌํ ๋ถ์๋ ๊ณ ๋ ค๋ฉ๋๋ค.
๊ฐ ์์
์ ๋ํ ์งํ๋ฅผ ์์งํ ๋ ๋์ ์นด๋๋๋ฆฌํฐ์ ์ ์ํ์ธ์. ๋ก๊ทธ, ์ด๋ฒคํธ ์์ง ๋๋ ๋ถ์ฐ ์ถ์ ์ ์ฌ์ฉํ์ฌ ๊ณ ์ฑ๋ฅ ๋๋ฒ๊น
๋ฐ์ดํฐ๋ฅผ ์ป์ต๋๋ค. ๊ธฐ์ฌ์์ "
์ค์ฒฉ๋ ํธ๋์ญ์ ์ ์ํํ ์ ์์ต๋๋ค.
๋ชจ๋ DBMS๊ฐ ์ค์ฒฉ ํธ๋์ญ์ ์ ์ง์ํ๋ ๊ฒ์ ์๋์ง๋ง ์ง์ํ๋ ๊ฒฝ์ฐ ์ด๋ฌํ ํธ๋์ญ์ ์ ํญ์ ๊ฐ์งํ๊ธฐ ์ฝ์ง ์์ ์๊ธฐ์น ์์ ์ค๋ฅ๋ฅผ ์ด๋ํ ์ ์์ต๋๋ค(์ฆ, ์ด๋ค ์ข ๋ฅ์ ์ด์์ด ์์์ด ๋ถ๋ช ํด์ผ ํฉ๋๋ค).
์ค์ฒฉ ํธ๋์ญ์ ์ ๊ฐ์งํ๊ณ ์ฐํํ ์ ์๋ ํด๋ผ์ด์ธํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ฉด ์ค์ฒฉ ํธ๋์ญ์ ์ฌ์ฉ์ ํผํ ์ ์์ต๋๋ค. ์ค์ฒฉ๋ ํธ๋์ญ์ ์ ์ค๋จํ ์ ์๋ ๊ฒฝ์ฐ ์๋ฃ๋ ํธ๋์ญ์ ์ด ์ค์ฒฉ๋ ํธ๋์ญ์ ์ผ๋ก ์ธํด ์ค์๋ก ์ค๋จ๋๋ ์์์น ๋ชปํ ์ํฉ์ ๋ฐฉ์งํ๊ธฐ ์ํด ๊ตฌํ ์ ํน๋ณํ ์ฃผ์๋ฅผ ๊ธฐ์ธ์ด์ญ์์ค.
์๋ก ๋ค๋ฅธ ๊ณ์ธต์์ ํธ๋์ญ์ ์ ์บก์ํํ๋ฉด ์์์น ๋ชปํ ์ค์ฒฉ ํธ๋์ญ์ ์ด ๋ฐ์ํ ์ ์์ผ๋ฉฐ ์ฝ๋ ๊ฐ๋ ์ฑ ์ธก๋ฉด์์ ์์ฑ์์ ์๋๋ฅผ ์ดํดํ๊ธฐ ์ด๋ ค์ธ ์ ์์ต๋๋ค. ๋ค์ ํ๋ก๊ทธ๋จ์ ์ดํด๋ณด์ญ์์ค.
with newTransaction():
Accounts.create("609-543-222")
with newTransaction():
Accounts.create("775-988-322")
throw Rollback();
์ ์ฝ๋์ ์ถ๋ ฅ์ ๋ฌด์์ ๋๊น? ๋ ํธ๋์ญ์ ์ ๋ชจ๋ ๋กค๋ฐฑํฉ๋๊น, ์๋๋ฉด ๋ด๋ถ ํธ๋์ญ์ ๋ง ๋กค๋ฐฑํฉ๋๊น? ํธ๋์ญ์ ์์ฑ์ ์บก์ํํ๋ ์ฌ๋ฌ ๊ณ์ธต์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์์กดํ๋ฉด ์ด๋ป๊ฒ ๋ ๊น์? ์ด๋ฌํ ์ฌ๋ก๋ฅผ ํ์ ํ๊ณ ๊ฐ์ ํ ์ ์์๊น์?
์ฌ๋ฌ ์์
์ด ํฌํจ๋ ๋ฐ์ดํฐ ๋ ์ด์ด๋ฅผ ์์ํด ๋ณด์ธ์(์: newAccount
)์ ์ด๋ฏธ ์์ฒด ํธ๋์ญ์
์์ ๊ตฌํ๋์์ต๋๋ค. ์์ฒด ํธ๋์ญ์
๋ด์์ ์คํ๋๋ ์์ ์์ค ๋น์ฆ๋์ค ๋ก์ง์ ์ผ๋ถ๋ก ์ด๋ฅผ ์คํํ๋ฉด ์ด๋ป๊ฒ ๋๋์? ์ด ๊ฒฝ์ฐ ๊ฒฉ๋ฆฌ์ฑ๊ณผ ์ผ๊ด์ฑ์ ์ด๋ป๊ฒ ๋ ๊น์?
function newAccount(id string) {
with newTransaction():
Accounts.create(id)
}
์ด๋ ๊ฒ ๋์๋ ์ง๋ฌธ์ ๋ํ ๋ต์ ์ฐพ๋ ๊ฒ๋ณด๋ค ์ค์ฒฉ๋ ํธ๋์ญ์ ์ ํผํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ๊ฒฐ๊ตญ ๋ฐ์ดํฐ ๊ณ์ธต์ ์์ฒด ํธ๋์ญ์ ์ ์์ฑํ์ง ์๊ณ ๋ ์ฝ๊ฒ ๋์ ์์ค์ ์์ ์ ์ํํ ์ ์์ต๋๋ค. ๋ํ ๋น์ฆ๋์ค ๋ก์ง ์์ฒด๋ ํธ๋์ญ์ ์ ์์ํ๊ณ , ์ด์ ๋ํ ์์ ์ ์ํํ๊ณ , ํธ๋์ญ์ ์ ์ปค๋ฐํ๊ฑฐ๋ ์ค๋จํ ์ ์์ต๋๋ค.
function newAccount(id string) {
Accounts.create(id)
}
// In main application:
with newTransaction():
// Read some data from database for configuration.
// Generate an ID from the ID service.
Accounts.create(id)
Uploads.create(id) // create upload queue for the user.
ํธ๋์ญ์ ์ ์ ํ๋ฆฌ์ผ์ด์ ์ํ์ ์ฐ๊ฒฐ๋์ด์๋ ์ ๋ฉ๋๋ค.
๋๋ก๋ ํธ๋์ญ์ ์์ ์ ํ๋ฆฌ์ผ์ด์ ์ํ๋ฅผ ์ฌ์ฉํ์ฌ ํน์ ๊ฐ์ ๋ณ๊ฒฝํ๊ฑฐ๋ ์ฟผ๋ฆฌ ๋งค๊ฐ๋ณ์๋ฅผ ์กฐ์ ํ๊ณ ์ถ์ ์ ํน์ด ์์ ์ ์์ต๋๋ค. ๊ณ ๋ คํด์ผ ํ ์ค์ํ ์ฐจ์ด๋ ์ฌ๋ฐ๋ฅธ ์ ์ฉ ๋ฒ์์ ๋๋ค. ํด๋ผ์ด์ธํธ๋ ๋คํธ์ํฌ ๋ฌธ์ ๊ฐ ์์ ๋ ์ข ์ข ํธ๋์ญ์ ์ ๋ค์ ์์ํฉ๋๋ค. ํธ๋์ญ์ ์ด ๋ค๋ฅธ ํ๋ก์ธ์ค์ ์ํด ๋ณ๊ฒฝ๋๋ ์ํ์ ์์กดํ๋ ๊ฒฝ์ฐ ๋ฐ์ดํฐ ๊ฒฝํฉ ๊ฐ๋ฅ์ฑ์ ๋ฐ๋ผ ์๋ชป๋ ๊ฐ์ ์ ํํ ์ ์์ต๋๋ค. ํธ๋์ญ์ ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฐ์ดํฐ ๊ฒฝํฉ ์กฐ๊ฑด ์ํ์ ๊ณ ๋ คํด์ผ ํฉ๋๋ค.
var seq int64
with newTransaction():
newSeq := atomic.Increment(&seq)
Entries.query(newSeq)
// Other operations...
์์ ํธ๋์ญ์ ์ ์ต์ข ๊ฒฐ๊ณผ์ ๊ด๊ณ์์ด ์คํ๋ ๋๋ง๋ค ์ํ์ค ๋ฒํธ๋ฅผ ์ฆ๊ฐ์ํต๋๋ค. ๋คํธ์ํฌ ๋ฌธ์ ๋ก ์ธํด ์ปค๋ฐ์ด ์คํจํ ๊ฒฝ์ฐ ๋ค์ ์๋ํ๋ฉด ๋ค๋ฅธ ์ํ์ค ๋ฒํธ๋ก ์์ฒญ์ด ์คํ๋ฉ๋๋ค.
์ฟผ๋ฆฌ ํ๋๋๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ํด ๋ง์ ์ ๋ณด๋ฅผ ์ ๊ณตํ ์ ์์ต๋๋ค.
์ฟผ๋ฆฌ ํ๋๋๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ฟผ๋ฆฌ๊ฐ ์คํ๋๋ ๋ฐฉ๋ฒ์ ๊ฒฐ์ ํฉ๋๋ค. ๋ํ ์์ฒญ์ ๋ณด๋ด๊ธฐ ์ ์ ๋ถ์ํ๊ณ ์ต์ ํํฉ๋๋ค. ๊ณํ์๋ ์์ ์ด ์ฒ๋ถํ ์ ์๋ ์ ํธ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ผ๋ถ ๊ฐ๋ฅํ ์ถ์ ์น๋ง ์ ๊ณตํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ๋ค์ ์ฟผ๋ฆฌ์ ๋ํ ๊ฐ์ฅ ์ข์ ๊ฒ์ ๋ฐฉ๋ฒ์ ๋ฌด์์ ๋๊น?
SELECT * FROM articles where author = "rakyll" order by title;
๊ฒฐ๊ณผ๋ ๋ ๊ฐ์ง ๋ฐฉ๋ฒ์ผ๋ก ๊ฒ์ํ ์ ์์ต๋๋ค.
- ์ ์ฒด ํ ์ด๋ธ ์ค์บ: ํ์ ๊ฐ ํญ๋ชฉ์ ๋ณด๊ณ ์์ฑ์ ์ด๋ฆ์ด ์ผ์นํ๋ ๊ธฐ์ฌ๋ฅผ ๋ฐํํ ํ ์ฃผ๋ฌธํ ์ ์์ต๋๋ค.
- ์ธ๋ฑ์ค ์ค์บ: ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ์ฌ ์ผ์นํ๋ ID๋ฅผ ์ฐพ๊ณ ํด๋น ํ์ ๊ฐ์ ธ์จ ๋ค์ ์์๋ฅผ ์ง์ ํ ์ ์์ต๋๋ค.
์ฟผ๋ฆฌ ํ๋๋์ ์๋ฌด๋ ์ด๋ค ์ ๋ต์ด ๊ฐ์ฅ ์ข์์ง ๊ฒฐ์ ํ๋ ๊ฒ์ ๋๋ค. ์ฟผ๋ฆฌ ํ๋๋์ ์์ธก ๊ธฐ๋ฅ์ ์ ํ์ ์ด๋ผ๋ ์ ์ ๊ณ ๋ คํด ๋ณผ ๊ฐ์น๊ฐ ์์ต๋๋ค. ์ด๋ ์๋ชป๋ ๊ฒฐ์ ์ผ๋ก ์ด์ด์ง ์ ์์ต๋๋ค. DBA ๋๋ ๊ฐ๋ฐ์๋ ์ด๋ฅผ ์ฌ์ฉํ์ฌ ์ฑ๋ฅ์ด ์ ํ๋ ์ฟผ๋ฆฌ๋ฅผ ์ง๋จํ๊ณ ์ธ๋ถ ์กฐ์ ํ ์ ์์ต๋๋ค. ์ ๋ฒ์ ์ DBMS๋ ์ฟผ๋ฆฌ ํ๋๋๋ฅผ ๊ตฌ์ฑํ ์ ์์ผ๋ฉฐ, ์ ๋ฒ์ ์ผ๋ก ์ธํด ์ฑ๋ฅ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ๊ฒฝ์ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ ๋ฐ์ดํธํ ๋ ์๊ฐ ์ง๋จ์ด ๋์์ด ๋ ์ ์์ต๋๋ค. ๋๋ฆฐ ์ฟผ๋ฆฌ ๋ก๊ทธ, ๋๊ธฐ ์๊ฐ ๋ฌธ์ ๋ณด๊ณ ์ ๋๋ ์คํ ์๊ฐ ํต๊ณ๋ ์ต์ ํ๊ฐ ํ์ํ ์ฟผ๋ฆฌ๋ฅผ ์๋ณํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค.
์ฟผ๋ฆฌ ํ๋๋๊ฐ ์ ๊ณตํ๋ ์ผ๋ถ ์ธก์ ํญ๋ชฉ์๋ ๋ ธ์ด์ฆ๊ฐ ์์ ์ ์์ต๋๋ค(ํนํ ๋๊ธฐ ์๊ฐ์ด๋ CPU ์๊ฐ์ ์ถ์ ํ ๋). ์ค์ผ์ค๋ฌ์ ์ถ๊ฐ๋๋ ์ข์ ๊ธฐ๋ฅ์ ์คํ ๊ฒฝ๋ก๋ฅผ ์ถ์ ํ๋ ๋๊ตฌ์ ๋๋ค. ์ด๋ฌํ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ๋ฉด ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ์ง๋จํ ์ ์์ต๋๋ค(์์ฝ๊ฒ๋ ๋ชจ๋ DBMS๊ฐ ์ด๋ฌํ ๋๊ตฌ๋ฅผ ์ ๊ณตํ๋ ๊ฒ์ ์๋๋๋ค).
์จ๋ผ์ธ ๋ง์ด๊ทธ๋ ์ด์ ์ ์ด๋ ต์ง๋ง ๊ฐ๋ฅํฉ๋๋ค.
์จ๋ผ์ธ ๋ง์ด๊ทธ๋ ์ด์ , ์ค์๊ฐ ๋ง์ด๊ทธ๋ ์ด์ ๋๋ ์ค์๊ฐ ๋ง์ด๊ทธ๋ ์ด์ ์ ๊ฐ๋ ์ค์ง ์๊ฐ์ด๋ ๋ฐ์ดํฐ ์์ ์์ด ํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๋ค๋ฅธ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ก ์ด๋ํ๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. ๋์ผํ DBMS/์์ง ๋ด์์ ์ ํ์ด ๋ฐ์ํ๋ฉด ์ค์๊ฐ ๋ง์ด๊ทธ๋ ์ด์ ์ ์ํํ๊ธฐ๊ฐ ๋ ์ฝ์ต๋๋ค. ์ฑ๋ฅ๊ณผ ์คํค๋ง ์๊ตฌ ์ฌํญ์ด ์๋ก ๋ค๋ฅธ ์๋ก์ด DBMS๋ก ์ด๋ํด์ผ ํ๋ ๊ฒฝ์ฐ ์ํฉ์ ๋์ฑ ๋ณต์กํด์ง๋๋ค.
๋ค์ํ ์จ๋ผ์ธ ๋ง์ด๊ทธ๋ ์ด์ ๋ชจ๋ธ์ด ์์ต๋๋ค. ๋ค์์ ๊ทธ์ค ํ๋์ ๋๋ค.
- ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ชจ๋์์ ์ด์ค ์ ๋ ฅ์ ํ์ฑํํฉ๋๋ค. ์ด ๋จ๊ณ์ ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์๋ ๋ชจ๋ ๋ฐ์ดํฐ๊ฐ ํฌํจ๋์ง ์๊ณ ์ต์ ๋ฐ์ดํฐ๋ง ํ์ฉ๋ฉ๋๋ค. ์ด๊ฒ์ ํ์ ํ๋ฉด ๋ค์ ๋จ๊ณ๋ก ๋์ด๊ฐ ์ ์์ต๋๋ค.
- ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ชจ๋์์ ์ฝ๊ธฐ๋ฅผ ํ์ฑํํฉ๋๋ค.
- ์ฝ๊ธฐ์ ์ฐ๊ธฐ๊ฐ ์ฃผ๋ก ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ํ๋๋๋ก ์์คํ ์ ๊ตฌ์ฑํฉ๋๋ค.
- ์ด์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๋ฐ์ดํฐ๋ฅผ ๊ณ์ ์ฝ๋ ๋์ ์ด์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ํ ์ฐ๊ธฐ๋ฅผ ์ค์งํฉ๋๋ค. ์ด ๋จ๊ณ์์ ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์๋ ์ฌ์ ํ ์ผ๋ถ ๋ฐ์ดํฐ๊ฐ ์์ต๋๋ค. ์ด์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๋ณต์ฌํด์ผ ํฉ๋๋ค.
- ์ด์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ์ฝ๊ธฐ ์ ์ฉ์ ๋๋ค. ์ด์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๋๋ฝ๋ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ก ๋ณต์ฌํฉ๋๋ค. ๋ง์ด๊ทธ๋ ์ด์ ์ด ์๋ฃ๋๋ฉด ๊ฒฝ๋ก๋ฅผ ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ก ์ ํํ๊ณ ์ด์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ค์งํ๊ณ ์์คํ ์์ ์ญ์ ํฉ๋๋ค.
์ถ๊ฐ ์ ๋ณด๋ฅผ ์ํ์๋ฉด ๋ฌธ์ํ์๊ธฐ ๋ฐ๋๋๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ํฌ๊ฒ ์ฆ๊ฐํ๋ฉด ์์ธก ๋ถ๊ฐ๋ฅ์ฑ์ด ์ฆ๊ฐํฉ๋๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฆ๊ฐ๋ก ์ธํด ๊ท๋ชจ์ ๊ด๋ จ๋ ์์ธกํ ์ ์๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํฉ๋๋ค. ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ด๋ถ ๊ตฌ์กฐ์ ๋ํด ๋ ๋ง์ด ์์๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํ์ฅ ๋ฐฉ์์ ๋ ์ ์์ธกํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ด๋ค ์๊ฐ์ ์์ง ์์ธก์ด ๋ถ๊ฐ๋ฅํฉ๋๋ค.
๊ธฐ๋ฐ์ด ์ฑ์ฅํจ์ ๋ฐ๋ผ ๋ฐ์ดํฐ ๋ณผ๋ฅจ ๋ฐ ๋คํธ์ํฌ ๋์ญํญ ์๊ตฌ ์ฌํญ์ ๋ํ ์ด์ ๊ฐ์ ๊ณผ ๊ธฐ๋๋ ์๋์ ๋ค๋จ์ด์ง๊ฒ ๋ ์ ์์ต๋๋ค. ์ด๋ ์ ์ฌ์ ์ธ ๋ฌธ์ ๋ฅผ ํผํ๊ธฐ ์ํด ๋๋์ ์ธ ์ค๊ณ ์ ๋ฐ ๊ฒ์ฌ, ๋๊ท๋ชจ ์ด์ ๊ฐ์ , ๋ฐฐํฌ ์ฌ๊ณ ๋๋ ๋ค๋ฅธ DBMS๋ก์ ๋ง์ด๊ทธ๋ ์ด์
์ ๋ํ ์๋ฌธ์ด ์ ๊ธฐ๋๋ ๋์
๋๋ค.
๊ทธ๋ฌ๋ ๊ธฐ์กด ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ด๋ถ ๊ตฌ์กฐ์ ๋ํ ๋ฐ์ด๋ ์ง์๋ง์ด ํ์ํ๋ค๊ณ ์๊ฐํ์ง ๋ง์ญ์์ค. ์๋ก์ด ์ ์ธ์ ์๋ก์ด ๋ฏธ์ง์ ๊ฒ์ ๊ฐ์ ธ์ฌ ๊ฒ์ ๋๋ค. ์์ธกํ ์ ์๋ ๋ฌธ์ ์ , ๊ณ ๋ฅด์ง ๋ชปํ ๋ฐ์ดํฐ ๋ถํฌ, ์์์น ๋ชปํ ๋์ญํญ ๋ฐ ํ๋์จ์ด ๋ฌธ์ , ๊ณ์ ์ฆ๊ฐํ๋ ํธ๋ํฝ ๋ฐ ์๋ก์ด ๋คํธ์ํฌ ์ธ๊ทธ๋จผํธ๋ก ์ธํด ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ ๊ทผ ๋ฐฉ์, ๋ฐ์ดํฐ ๋ชจ๋ธ, ๋ฐฐํฌ ๋ชจ๋ธ ๋ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค ํฌ๊ธฐ๋ฅผ ๋ค์ ์๊ฐํ๊ฒ ๋ฉ๋๋ค.
...
์ด ๊ธฐ์ฌ๋ฅผ ๊ฒ์ํ๋ ค๊ณ ์๊ฐํ๊ธฐ ์์ํ์ ๋ ์๋ ๋ชฉ๋ก์๋ ์ด๋ฏธ XNUMX๊ฐ ํญ๋ชฉ์ด ๋ ์์์ต๋๋ค. ๊ทธ๋ฌ๋ค๊ฐ ์์ฒญ๋ ์ซ์๊ฐ ๋์์ด
PS
๋ธ๋ก๊ทธ์์๋ ์ฝ์ด๋ณด์ธ์.
- ยซ
๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฐ Kubernetes(๊ฐ์ ๋ฐ ๋์์ ๋ณด๊ณ ์) "; - ยซ
๋ถ์ฐ ์ถ์ : ์ฐ๋ฆฌ๊ฐ ๋ชจ๋ ์๋ชปํ์ต๋๋ค "; - ยซ
Service Mesh: ์ต์ ๊ธฐ์ ์ ๋ํด ๋ชจ๋ ์ํํธ์จ์ด ์์ง๋์ด๊ฐ ์์์ผ ํ ์ฌํญ ".
์ถ์ฒ : habr.com