'auto_increment ์์ฑ์ด ์ค์ ๋ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๊ธฐ๋ณธ ํค๋ฅผ ์ฐ๋ฉด ๋์ง ์์๊น?'
-> ๋ถ์ฐ ํ๊ฒฝ์์๋ ์ด ์ ๊ทผ๋ฒ์ด ์ ๋จนํํ
๋ฐ.. DB ํ๋๋ก๋ ์๊ตฌ๋ฅผ ๊ฐ๋นํ ์ ์์
-> ์ฌ๋ฌ DB server๋ฅผ ์ฐ๋ ๊ฒฝ์ฐ์๋ ์ง์ฐ ์๊ฐ(delay)์ ๋ฎ์ถ๊ธฐ๊ฐ ๋ฌด์ฒ ํ๋ค ๊ฒ
1๋จ๊ณ. ๋ฌธ์ ์ดํด ๋ฐ ์ค๊ณ ๋ฒ์ ํ์
* ID๋ ์ ์ผํด์ผ ํ๋ค.
* ID๋ ์ซ์๋ก๋ง ๊ตฌ์ฑ๋์ด์ผ ํ๋ค.
* ID๋ 64๋นํธ๋ก ํํ๋ ์ ์๋ ๊ฐ์ด์ด์ผ ํ๋ค.
* ID๋ ๋ฐ๊ธ ๋ ์ง์ ๋ฐ๋ผ ์ ๋ ฌ ๊ฐ๋ฅํด์ผ ํ๋ค.
* ์ด๋น 10,000๊ฐ์ ID๋ฅผ ๋ง๋ค ์ ์์ด์ผ ํ๋ค.
2๋จ๊ณ. ๊ฐ๋ต์ ์ค๊ณ์ ์ ์ ๋ฐ ๋์ ๊ตฌํ๊ธฐ
๋ถ์ฐ ์์คํ ์์ ์ ์ผ์ฑ์ด ๋ณด์ฅ๋๋ ID๋ฅผ ๋ง๋๋ ์ฌ๋ฌ ๊ฐ์ง ๋ฐฉ๋ฒ
* ๋ค์ค ๋ง์คํฐ ๋ณต์ (multi-master replication)
* UUID(University Unique Identifier)
* ํฐ์ผ ์๋ฒ(ticket server)
* ํธ์ํฐ ์ค๋
ธํ๋ ์ดํฌ(twitter snowflack) ์ ๊ทผ๋ฒ
- ๋ค์ค ๋ง์คํฐ ๋ณต์ (multi-master replication)
[์ฌ์ง์ฒจ๋ถ]
- ๋ฐ์ดํฐ๋ฒ ์ด์ค์ auto_increment ๊ธฐ๋ฅ์ ํ์ฉ. ๋ค๋ง ๋ค์ id์ ๊ฐ์ ๊ตฌํ ๋๋ 1๋งํผ ์ฆ๊ฐ์์ผ์ ์ป ๊ฒ ์๋๋ผ, k๋งํผ ์ฆ๊ฐ
( k=ํ์ฌ ์ฌ์ฉ ์ค์ธ ๋ฐ์ดํฐ ๋ฒ ์ด์ค ์๋ฒ์ ์ ) - ๊ท๋ชจ ํ์ฅ์ฑ ๋ฌธ์ ํด๊ฒฐ ๊ฐ๋ฅ. DataBase์ ์๋ฅผ ๋๋ฆฌ๋ฉด ์ด๋น ์์ฐ ๊ฐ๋ฅ ID ์๋ ๋๋ฆด ์ ์๊ธฐ ๋๋ฌธ
- [ ๋จ์ 1 ] ์ฌ๋ฌ ๋ฐ์ดํฐ ์ผํฐ์ ๊ฑธ์น ๊ท๋ชจ๋ฅผ ๋๋ฆฌ๊ธฐ ์ด๋ ค์
[ ๋จ์ 2 ] ID์ ์ ์ผ์ฑ์ ๋ณด์ฅ๋๊ฒ ์ง๋ง ๊ทธ ๊ฐ์ด ์๊ฐ ํ๋ฆ์ ๋ง์ถ์ด ์ปค์ง๋๋ก ๋ณด์ฅํ ์๋ ์์
[ ๋จ์ 3 ] ์๋ฒ๋ฅผ ์ถ๊ฐํ๊ฑฐ๋ ์ญ์ ํ ๋๋ ์ ๋์ํ๋๋ก ๋ง๋ค๊ธฐ ์ด๋ ค์
- UUID
- UUID๋ ์ปดํจํฐ ์์คํ ์ ์ ์ฅ๋๋ ์ ๋ณด๋ฅผ ์ ์ผํ๊ฒ ์๋ณํ๊ธฐ ์ํ 128๋นํธ์ง๋ฆฌ ์
- UUID ๊ฐ์ ์ถฉ๋ ๊ฐ๋ฅ์ฑ์ด ์ง๊ทนํ ๋ฎ์
[์ฌ์ง] - [ ์ฅ์ 1 ] UUID๋ฅผ ๋ง๋๋ ๊ฒ์ ๋จ์ํจ. ์๋ฒ ์ฌ์ด์ ์กฐ์จ ๋ํ ํ์ ์์ - ๋๊ธฐํ ์ด์ ์์
- [ ์ฅ์ 2 ] ๊ฐ ์๋ฒ๊ฐ ์๊ธฐ๊ฐ ์ธ ID๋ฅผ ์์์ ๋ง๋๋ ๊ตฌ์กฐ๋ผ ๊ท๋ชจ ํ์ฅ๋ ์ฌ์
- [ ๋จ์ ] ID๊ฐ 128๋นํธ๋ก ๊น, ID๋ฅผ ์๊ฐ์์ผ๋ก ์ ๋ ฌํ ์ ์์, ID์ ์ซ์(numeric)๊ฐ ์๋ ๊ฐ์ด ํฌํจ๋ ์ ์์
- ํฐ์ผ ์๋ฒ
[์ฌ์ง]
- ํด๋น ์์ด๋์ด์ ํต์ฌ: auto_increment ๊ธฐ๋ฅ์ ๊ฐ์ถ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์๋ฒ, ์ฆ ํฐ์ผ ์๋ฒ๋ฅผ ์ค์ ์ง์คํ์ผ๋ก ํ๋๋ง ์ฌ์ฉํ๋ ๊ฒ
- [ ์ฅ์ 1 ] ์ ์ผ์ฑ์ด ๋ณด์ฅ๋๋ ์ค์ง ์ซ์๋ก๋ง ๊ตฌ์ฑ๋ ID ์ฝ๊ฒ ์์ฑ ๊ฐ๋ฅ
- [ ์ฅ์ 2 ] ๊ตฌํํ๊ธฐ ์ฝ๊ณ , ์ค์ ๊ท๋ชจ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ํฉ
- [ ๋จ์ ] ํฐ์ผ ์๋ฒ๊ฐ SPOF(Single-Point-of-Failure)๊ฐ ๋จ. ์ด ์๋ฒ์ ์ฅ์ ๊ฐ ๋ฐ์ํ๋ฉด, ๋ชจ๋ ์์คํ ์ด ์ํฅ์ ๋ฐ์
- ํธ์ํฐ ์ค๋ ธํ๋ ์ดํฌ ์ ๊ทผ๋ฒ
- ์์ฑํด์ผ ํ๋ ID์ ๊ตฌ์กฐ๋ฅผ ์ฌ๋ฌ ์ (section)๋ก ๋ถํ ํ๋ ๊ฒ
[์ฌ์ง]
* ์ฌ์ธ(sign) ๋นํธ: 1๋นํธ ํ ๋น. ์์ ์์ ๊ตฌ๋ณํ๋ ๊ณณ์ ์ฌ์ฉ
* ํ์์คํฌํ(timestamp): 41๋นํธ ํ ๋น. ๊ธฐ์ ์๊ฐ(epoch) ์ดํ๋ก ๋ช ๋ฐ๋ฆฌ์ด๊ฐ ๊ฒฝ๊ณผํ๋์ง๋ฅผ ๋ํ๋ด๋ ๊ฐ.
* ๋ฐ์ดํฐ ์ผํฐ ID: 5๋นํธ ํ ๋น. ๋ฐ์ดํฐ์ผํฐ๋น 32๊ฐ์ ์๋ฒ ์ฌ์ฉ ๊ฐ๋ฅ.
* ์๋ฒ ID: 5๋นํธ ํ ๋น. ๋ฐ์ดํฐ ์ผํฐ๋น 32๊ฐ์ ์๋ฒ ์ฌ์ฉ ๊ฐ๋ฅ
* ์ผ๋ จ๋ฒํธ: 12๋นํธ ํ ๋น. ๊ฐ ์๋ฒ์์๋ ID๋ฅผ ์์ฑํ ๋๋ง๋ค ์ด ์ผ๋ จ๋ฒํธ๋ฅผ 1์ฉ ์ฆ๊ฐ. ์ด ๊ฐ์ 1๋ฐ๋ฆฌ์ด ๊ฒฝ๊ณผ ๋ง๋ค 0์ผ๋ก ์ด๊ธฐํ(reset)
3. ์์ธ ์ค๊ณ
[์ฌ์ง]
๋ฐ์ดํฐ์ผํฐ ID์ ์๋ฒ ID๋ ์์คํ
์ด ์์๋ ๋ ๊ฒฐ์ . ์ผ๋ฐ์ ์ผ๋ก ์์คํ
์ด์ ์ค์๋ ๋ฐ๋์ง ์์.
ํ์์คํฌํ๋ ์ผ๋ จ๋ฒํธ๋ ID ์์ฑ๊ธฐ๊ฐ ๋๊ณ ์๋ ์ค์ ๋ง๋ค์ด์ง๋ ๊ฐ
ํ์์คํฌํ
[์ฌ์ง]
41๋นํธ๋ก ํํํ ์ ์๋ ํ์์คํฌํ์ ์ต๋๊ฐ์ ๋๋ต 69๋
์ ํด๋น
-> ID์์ฑ๊ธฐ๋ 69๋
๋์๋ง ์ ์ ๋์ : ์ดํ์๋ ๊ธฐ์ ์๊ฐ์ ๋ฐ๊พธ๊ฑฐ๋, ID ์ฒด๊ณ๋ฅผ ๋ค๋ฅธ ๊ฒ์ผ๋ก ์ด์ (migration)ํด์ฃผ์ด์ผ ํจ
4. ๋ง๋ฌด๋ฆฌ
์ถ๊ฐ ๋ ผ์ point
์๊ณ ๋๊ธฐํ(clock synchronization)
- ID ์์ฑ ์๋ฒ๋ค์ด ์ ๋ถ ๋ค๋ฅธ ์๊ณ๋ฅผ ์ฌ์ฉํ๋ค๊ณ ๊ฐ์ ํ ์..
- ํ๋์ ์๋ฒ๋ ์ฌ๋ฌ ์ฝ์ด์์ ์คํ๋ ๊ฒฝ์ฐ
- ์ฌ๋ฌ ์๋ฒ๊ฐ ๋ฌผ๋ฆฌ์ ์ผ๋ก ๋
๋ฆฝ๋ ์ฌ๋ฌ ์ฅ๋น์์ ์คํ๋๋ ๊ฒฝ์ฐ
- NTP(Network Time Protocol)์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๊ฐ์ฅ ๋ณดํธ์ ๋ฐฉ๋ฒ
๊ฐ ์ (section)์ ๊ธธ์ด ์ต์ ํ
- ๋์์ฑ์ด ๋ฎ๊ณ ์๋ช
์ด ๊ธด ์ฑ ๊ฐ์ ๊ฒฝ์ฐ ์ผ๋ จ๋ฒํธ ์ ๊ธธ์ด ์ค์ด๊ณ
ํ์์คํฌํ ๊ธธ์ด ๋๋ฆฌ๋ ๊ฒ์ด ํจ๊ณผ์
๊ณ ๊ฐ์ฉ์ฑ(high availability)
ID ์์ฑ๊ธฐ๋ ํ์ ๋ถ๊ฐ๊ฒฐ ์ปดํฌ๋ํธ ์ด๋ฏ๋ก ์์ฃผ ๋์ ๊ณ ๊ฐ์ฉ์ฑ์ ์ ๊ณตํด์ผ ํจ.