๐Ÿ““ 7์žฅ. ๋ถ„์‚ฐ ์‹œ์Šคํ…œ์„ ์œ„ํ•œ ์œ ์ผID ์„ค๊ณ„

onyยท2022๋…„ 11์›” 16์ผ
1

๐Ÿ“š book

๋ชฉ๋ก ๋ณด๊ธฐ
1/10
post-thumbnail

'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) ์ ‘๊ทผ๋ฒ•
  1. ๋‹ค์ค‘ ๋งˆ์Šคํ„ฐ ๋ณต์ œ (multi-master replication)
    [์‚ฌ์ง„์ฒจ๋ถ€]
  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ auto_increment ๊ธฐ๋Šฅ์„ ํ™œ์šฉ. ๋‹ค๋งŒ ๋‹ค์Œ id์˜ ๊ฐ’์„ ๊ตฌํ•  ๋•Œ๋Š” 1๋งŒํผ ์ฆ๊ฐ€์‹œ์ผœ์„œ ์–ป ๊ฒŒ ์•„๋‹ˆ๋ผ, k๋งŒํผ ์ฆ๊ฐ€
    ( k=ํ˜„์žฌ ์‚ฌ์šฉ ์ค‘์ธ ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค ์„œ๋ฒ„์˜ ์ˆ˜ )
  • ๊ทœ๋ชจ ํ™•์žฅ์„ฑ ๋ฌธ์ œ ํ•ด๊ฒฐ ๊ฐ€๋Šฅ. DataBase์˜ ์ˆ˜๋ฅผ ๋Š˜๋ฆฌ๋ฉด ์ดˆ๋‹น ์ƒ์‚ฐ ๊ฐ€๋Šฅ ID ์ˆ˜๋„ ๋Š˜๋ฆด ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ
  • [ ๋‹จ์  1 ] ์—ฌ๋Ÿฌ ๋ฐ์ดํ„ฐ ์„ผํ„ฐ์— ๊ฑธ์น˜ ๊ทœ๋ชจ๋ฅผ ๋Š˜๋ฆฌ๊ธฐ ์–ด๋ ค์›€
    [ ๋‹จ์  2 ] ID์˜ ์œ ์ผ์„ฑ์€ ๋ณด์žฅ๋˜๊ฒ ์ง€๋งŒ ๊ทธ ๊ฐ’์ด ์‹œ๊ฐ„ ํ๋ฆ„์— ๋งž์ถ”์–ด ์ปค์ง€๋„๋ก ๋ณด์žฅํ•  ์ˆ˜๋Š” ์—†์Œ
    [ ๋‹จ์  3 ] ์„œ๋ฒ„๋ฅผ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ์‚ญ์ œํ•  ๋•Œ๋„ ์ž˜ ๋™์ž‘ํ•˜๋„๋ก ๋งŒ๋“ค๊ธฐ ์–ด๋ ค์›€
  1. UUID
  • UUID๋Š” ์ปดํ“จํ„ฐ ์‹œ์Šคํ…œ์— ์ €์žฅ๋˜๋Š” ์ •๋ณด๋ฅผ ์œ ์ผํ•˜๊ฒŒ ์‹๋ณ„ํ•˜๊ธฐ ์œ„ํ•œ 128๋น„ํŠธ์งœ๋ฆฌ ์ˆ˜
  • UUID ๊ฐ’์€ ์ถฉ๋Œ ๊ฐ€๋Šฅ์„ฑ์ด ์ง€๊ทนํžˆ ๋‚ฎ์Œ
    [์‚ฌ์ง„]
  • [ ์žฅ์  1 ] UUID๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์€ ๋‹จ์ˆœํ•จ. ์„œ๋ฒ„ ์‚ฌ์ด์˜ ์กฐ์œจ ๋˜ํ•œ ํ•„์š” ์—†์Œ - ๋™๊ธฐํ™” ์ด์Šˆ ์—†์Œ
  • [ ์žฅ์  2 ] ๊ฐ ์„œ๋ฒ„๊ฐ€ ์ž๊ธฐ๊ฐ€ ์“ธ ID๋ฅผ ์•Œ์•„์„œ ๋งŒ๋“œ๋Š” ๊ตฌ์กฐ๋ผ ๊ทœ๋ชจ ํ™•์žฅ๋„ ์‰ฌ์›€
  • [ ๋‹จ์  ] ID๊ฐ€ 128๋น„ํŠธ๋กœ ๊น€, ID๋ฅผ ์‹œ๊ฐ„์ˆœ์œผ๋กœ ์ •๋ ฌํ•  ์ˆ˜ ์—†์Œ, ID์— ์ˆซ์ž(numeric)๊ฐ€ ์•„๋‹Œ ๊ฐ’์ด ํฌํ•จ๋  ์ˆ˜ ์žˆ์Œ
  1. ํ‹ฐ์ผ“ ์„œ๋ฒ„
    [์‚ฌ์ง„]
  • ํ•ด๋‹น ์•„์ด๋””์–ด์˜ ํ•ต์‹ฌ: auto_increment ๊ธฐ๋Šฅ์„ ๊ฐ–์ถ˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„œ๋ฒ„, ์ฆ‰ ํ‹ฐ์ผ“ ์„œ๋ฒ„๋ฅผ ์ค‘์•™ ์ง‘์ค‘ํ˜•์œผ๋กœ ํ•˜๋‚˜๋งŒ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ
  • [ ์žฅ์  1 ] ์œ ์ผ์„ฑ์ด ๋ณด์žฅ๋˜๋Š” ์˜ค์ง ์ˆซ์ž๋กœ๋งŒ ๊ตฌ์„ฑ๋œ ID ์‰ฝ๊ฒŒ ์ƒ์„ฑ ๊ฐ€๋Šฅ
  • [ ์žฅ์  2 ] ๊ตฌํ˜„ํ•˜๊ธฐ ์‰ฝ๊ณ , ์ค‘์†Œ ๊ทœ๋ชจ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ ํ•ฉ
  • [ ๋‹จ์  ] ํ‹ฐ์ผ“ ์„œ๋ฒ„๊ฐ€ SPOF(Single-Point-of-Failure)๊ฐ€ ๋จ. ์ด ์„œ๋ฒ„์— ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด, ๋ชจ๋“  ์‹œ์Šคํ…œ์ด ์˜ํ–ฅ์„ ๋ฐ›์Œ
  1. ํŠธ์œ„ํ„ฐ ์Šค๋…ธํ”Œ๋ ˆ์ดํฌ ์ ‘๊ทผ๋ฒ•
  • ์ƒ์„ฑํ•ด์•ผ ํ•˜๋Š” 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 ์ƒ์„ฑ๊ธฐ๋Š” ํ•„์ˆ˜ ๋ถˆ๊ฐ€๊ฒฐ ์ปดํฌ๋„ŒํŠธ ์ด๋ฏ€๋กœ ์•„์ฃผ ๋†’์€ ๊ณ ๊ฐ€์šฉ์„ฑ์„ ์ œ๊ณตํ•ด์•ผ ํ•จ.
profile
ํŒŒ์ด(ฯ€)ํ˜• ๊ฐœ๋ฐœ์ž ๐ŸŽ๐ŸŒฟ๐Ÿค

0๊ฐœ์˜ ๋Œ“๊ธ€