ํ”ผ๋“œ๋กœ ๋Œ์•„๊ฐ€๊ธฐ
๐Ÿš€ I Built UUIDs That Look Random But Sort Like Timestamps (50% Smaller Indexes!)
Dev.toDev.to
Database

Steganographic UUID ๋„์ž…์„ ํ†ตํ•œ ์ธ๋ฑ์Šค ํฌ๊ธฐ 50% ๊ฐ์†Œ ๋ฐ ํ”„๋ผ์ด๋ฒ„์‹œ ๋ณดํ˜ธ

๐Ÿš€ I Built UUIDs That Look Random But Sort Like Timestamps (50% Smaller Indexes!)

Eugene2026๋…„ 5์›” 28์ผ6๋ถ„advanced

Context

UUID v4์˜ ๋ฌด์ž‘์œ„์„ฑ์œผ๋กœ ์ธํ•œ B-tree ์ธ๋ฑ์Šค ๋‹จํŽธํ™”์™€ ์„ฑ๋Šฅ ์ €ํ•˜ ๋ฐœ์ƒ. UUID v7์˜ ์‹œ๊ฐ„ ์ˆœ์ฐจ์  ํŠน์„ฑ์€ ์ธ๋ฑ์‹ฑ ํšจ์œจ์„ ๋†’์ด๋‚˜ ์ƒ์„ฑ ์‹œ์ ์ด ๋…ธ์ถœ๋˜๋Š” ํ”„๋ผ์ด๋ฒ„์‹œ ์ทจ์•ฝ์  ๋ณด์œ .

Technical Solution

  • Steganography ๊ธฐ๋ฒ•์„ ํ†ตํ•œ UUID v4 ์™ธํ˜• ๋‚ด ์•”ํ˜ธํ™”๋œ Timestamp ์€๋‹‰ ์„ค๊ณ„
  • SHA-256 ๊ธฐ๋ฐ˜ ํ‚ค ์œ ๋„ ๋ฐ XOR ์—ฐ์‚ฐ์„ ํ†ตํ•œ 48๋น„ํŠธ Timestamp ์•”ํ˜ธํ™” ์ฒ˜๋ฆฌ
  • UUID v4 ํ‘œ์ค€ ํฌ๋งท ์ค€์ˆ˜๋ฅผ ์œ„ํ•ด ๋ฒ„์ „ ๋ฐ ๋ฐฐ๋ฆฌ์–ธํŠธ ๋น„ํŠธ๋ฅผ ์œ ์ง€ํ•˜๋Š” ๊ตฌ์กฐ ์ฑ„ํƒ
  • PostgreSQL C Extension ๊ตฌํ˜„์„ ํ†ตํ•œ ๋งˆ์ดํฌ๋กœ์ดˆ ๋‹จ์œ„์˜ ์ •๋ฐ€ํ•œ ์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ ์ž„๋ฒ ๋”ฉ
  • Functional Index๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์•”ํ˜ธํ™”๋œ Timestamp๋ฅผ ์ถ”์ถœํ•˜๊ณ  B-tree ์ธ๋ฑ์Šค์— ๋งคํ•‘
  • GUC ๋ณ€์ˆ˜๋ฅผ ํ†ตํ•œ Encryption Seed ๊ด€๋ฆฌ๋ฅผ ํ†ตํ•œ ๋ณด์•ˆ์„ฑ ๋ฐ ์ œ์–ด ๊ฐ€๋Šฅ์„ฑ ํ™•๋ณด

Impact

  • ์ธ๋ฑ์Šค ํฌ๊ธฐ ๊ธฐ์กด 3.1 MB์—์„œ 1.5 MB๋กœ ์•ฝ 50% ๊ฐ์†Œ
  • Sequential Scan ๋ฐฉ์‹์—์„œ Functional Index Scan ๋ฐฉ์‹์œผ๋กœ ์ฟผ๋ฆฌ ์„ฑ๋Šฅ ์ตœ์ ํ™”

Key Takeaway

๋ฐ์ดํ„ฐ์˜ ์™ธํ˜•์  ํŠน์„ฑ๊ณผ ๋‚ด๋ถ€์  ์ •๋ ฌ ์ˆœ์„œ๋ฅผ ๋ถ„๋ฆฌํ•˜์—ฌ ๋ณด์•ˆ์„ฑ๊ณผ ์„ฑ๋Šฅ์ด๋ผ๋Š” ์ƒ์ถฉํ•˜๋Š” ์ œ์•ฝ ์กฐ๊ฑด์„ ๋™์‹œ์— ํ•ด๊ฒฐํ•œ ์„ค๊ณ„ ์‚ฌ๋ก€


1. UUID v4์˜ ๋žœ๋ค์„ฑ์œผ๋กœ ์ธํ•œ DB ์ธ๋ฑ์Šค ์„ฑ๋Šฅ ์ €ํ•˜ ์—ฌ๋ถ€ ๊ฒ€ํ† 

2. ์‹œ๊ฐ„ ๊ธฐ๋ฐ˜ ์ฟผ๋ฆฌ๊ฐ€ ํ•„์š”ํ•˜์ง€๋งŒ ์ƒ์„ฑ ์‹œ์  ๋…ธ์ถœ์ด ์ œํ•œ๋˜๋Š” ๋ณด์•ˆ ์š”๊ตฌ์‚ฌํ•ญ ํ™•์ธ

3. PostgreSQL Functional Index๋ฅผ ํ†ตํ•œ ํŒŒ์ƒ ์ปฌ๋Ÿผ ๊ธฐ๋ฐ˜์˜ ์ธ๋ฑ์‹ฑ ์ „๋žต ์ ์šฉ ๊ณ ๋ ค

4. Steganography ๊ธฐ๋ฒ•์„ ํ™œ์šฉํ•œ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์€๋‹‰ ๊ฐ€๋Šฅ์„ฑ ๊ฒ€ํ† 

์›๋ฌธ ์ฝ๊ธฐ