Steganographic UUID ๋์ ์ ํตํ ์ธ๋ฑ์ค ํฌ๊ธฐ 50% ๊ฐ์ ๋ฐ ํ๋ผ์ด๋ฒ์ ๋ณดํธ
๐ I Built UUIDs That Look Random But Sort Like Timestamps (50% Smaller Indexes!)
AI ์์ฝ
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 ๊ธฐ๋ฒ์ ํ์ฉํ ๋ฉํ๋ฐ์ดํฐ ์๋ ๊ฐ๋ฅ์ฑ ๊ฒํ