B-Tree Fragmentation ํด๊ฒฐ์ ํตํ ULID ๊ธฐ๋ฐ O(1) ์ฐ๊ธฐ ์ฑ๋ฅ ํ๋ณด
Stop Using UUIDs: Why B2B SaaS Needs ULIDs in Laravel ๐
AI ์์ฝ
Context
Auto-incrementing ID์ ID Enumeration ์ทจ์ฝ์ ํด๊ฒฐ์ ์ํด UUIDv4๋ฅผ ๋์ ํ์ผ๋, ๋ฐ์ดํฐ ๊ท๋ชจ ์ฆ๊ฐ์ ๋ฐ๋ฅธ B-Tree Index Fragmentation ๋ฐ์. ์ด๋ก ์ธํ ๋ฌด์์ ์ฝ์ ๊ณผ์ ์์ ๋ ธ๋ ๋ถํ ๋ฐ ์ฌ๊ท ํ ์์ ์ด ๋น๋ฒํด์ง๋ฉฐ CPU ๋ฐ RAM ์ฌ์ฉ๋์ด ๊ธ์ฆํ๋ ์ฑ๋ฅ ๋ณ๋ชฉ ์ง์ ํ์ธ.
Technical Solution
- Timestamp ๊ธฐ๋ฐ์ Lexicographically Sortable ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง ULID ๋์ ์ ํตํ ์์ฐจ์ ์ฝ์ ๊ตฌ์กฐ ์ค๊ณ
- UUIDv4์ ๋ฌด์์์ฑ์ ๋ฐฐ์ ํ๊ณ ์์ฑ ์๊ฐ ๊ธฐ๋ฐ ์ ๋ ฌ ๊ฐ๋ฅ์ฑ์ ํ๋ณดํ์ฌ B-Tree Append-only ์ฐ๊ธฐ ์ฑ๋ฅ ๊ตฌํ
- Laravel์ HasUlids Trait๋ฅผ ํ์ฉํ Eloquent ๋ชจ๋ธ์ Primary Key ์์ฑ ๋ก์ง ์ถ์ํ
- Database Schema์ Primary Key ํ์ ์ CHAR(26)์ผ๋ก ์ต์ ํํ์ฌ ์คํ ๋ฆฌ์ง ํจ์จ์ฑ ์ฆ๋
- ID ์์ธก ๋ถ๊ฐ๋ฅ์ฑ์ ์ ์งํ๋ฉด์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฌผ๋ฆฌ์ ์ ์ฅ ๊ตฌ์กฐ์ ํจ์จ์ฑ์ ๊ทน๋ํํ ์ํคํ ์ฒ ์ ํ
์ค์ฒ ํฌ์ธํธ
1. ๋๊ท๋ชจ ํธ๋ํฝ ํ๊ฒฝ์์ ๋ฌด์์ UUIDv4 ์ฌ์ฉ ์ B-Tree ์ธ๋ฑ์ค ํํธํ ๊ฐ๋ฅ์ฑ ๊ฒํ
2. ๋ณด์์ฑ๊ณผ ์ฐ๊ธฐ ์ฑ๋ฅ์ ๋์์ ํ๋ณดํด์ผ ํ๋ ๊ฒฝ์ฐ ULID ๋๋ UUIDv7 ๊ฐ์ ์๊ฐ ๊ธฐ๋ฐ ์๋ณ์ ๊ณ ๋ ค
3. Laravel ํ๊ฒฝ์์ HasUlids ์ ์ฉ ์ $incrementing = false ๋ฐ $keyType = 'string' ์ค์ ํ์ ํ์ธ
4. ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ง์ด๊ทธ๋ ์ด์ ์ ulid() ๋ฉ์๋๋ฅผ ํตํ ์ ์ฉ ์ปฌ๋ผ ํ์ ์ง์ ์ฌ๋ถ ํ์ธ