๋๊ตฌ ์ค๋ช
ULID ์ NanoID ๋ฅผ ํ ๋ฒ์ ์ฌ๋ฌ ๊ฐ ๋ง๋ค์ด ์ค๋๋ค. ULID ๋ 26์ ๊ณ ์ ์ด๊ณ , NanoID ๋ ๊ธธ์ด์ ๋ฌธ์ ์งํฉ์ ๊ณจ๋ผ์ ๋ง๋ญ๋๋ค. ๋ง๋ค ๋๋ง๋ค ๋ฌด์์ ๋นํธ์ ๊ฐ๋ฅํ ์กฐํฉ ์, 50% ํ๋ฅ ๋ก ์ถฉ๋์ด ์๊ธฐ๋ ๊ฐ์๋ฅผ ํจ๊ป ๊ณ์ฐํด ๋ณด์ฌ ์ค๋๋ค.
ULID ๋ 128๋นํธ๋ฅผ 48๋นํธ ํ์์คํฌํ์ 80๋นํธ ๋์๋ก ๋๋ ์ฐ๊ณ , ๊ทธ 128๋นํธ๋ฅผ Crockford base32 ๋ก ์ ์ด 26์๊ฐ ๋ฉ๋๋ค. ์ 10์๊ฐ ๋ฐ๋ฆฌ์ด ํ์์คํฌํ, ๋ค 16์๊ฐ ๋์์ ๋๋ค. ์ํ๋ฒณ์ด ASCII ์์๋๋ก๋ผ์ ๋ฌธ์์ด ๊ทธ๋๋ก ์ ๋ ฌํ๋ฉด ์๊ฐ์์ด ๋์ง๋ง, ๊ฐ์ ๋ฐ๋ฆฌ์ด ์์ ์์๋ ๊ท๊ฒฉ์ด ๋ณด์ฅํ์ง ์์ต๋๋ค. NanoID ๋ ๊ธฐ๋ณธ 21์์ 64์ ์ํ๋ฒณ์ ์จ์ 126๋นํธ, ์ฆ UUID ๋ฒ์ 4์ 122๋นํธ์ ๋น์ทํฉ๋๋ค. 2026๋ 10์ ๊ธฐ์ค ๊ท๊ฒฉ์ ๋๋ค.
๋ฌด์์ ๊ฐ์ ๋ชจ๋ crypto.getRandomValues ๋ก ๋ง๋ค๊ณ Math.random ์ ์ฐ์ง ์์ต๋๋ค. ๋ฌธ์ ์งํฉ ํฌ๊ธฐ๊ฐ 2์ ๊ฑฐ๋ญ์ ๊ณฑ์ด ์๋๋ฉด ๋ฒ์๋ฅผ ๋๋ ์ถ์ถ๊ฐ์ ๋ฒ๋ ค ์น์ฐ์นจ์ ์์ฑ๋๋ค. ์ถฉ๋ ๊ฐ์๋ ์์ผ ๋ฌธ์ ๊ทผ์ฌ์์ด๋ผ ๋ณด์ฅ๊ฐ์ด ์๋๋๋ค. ๋ง๋ค์ด์ง ID ๋ ๋ธ๋ผ์ฐ์ ์์์๋ง ์๊ธฐ๊ณ ์ ์ฅ๋์ง ์์ผ๋ฉฐ, ๋ณด์ ํ ํฐ์ด๋ ๋น๋ฐ๋ฒํธ ๋์ ์ฐ์ง ๋ง์ธ์.
์์ฃผ ๋ฌป๋ ์ง๋ฌธ
์ 10์๊ฐ ๋ฐ๋ฆฌ์ด ํ์์คํฌํ์ด๊ณ Crockford base32 ์ํ๋ฒณ์ด ASCII ์ค๋ฆ์ฐจ์์ด๋ผ, ๋ฌธ์์ด์ ๊ทธ๋๋ก ์ ๋ ฌํ๋ฉด ๋ง๋ ์๊ฐ ์์๊ฐ ๋ฉ๋๋ค. ๋ค๋ง ๊ฐ์ ๋ฐ๋ฆฌ์ด์ ๋ง๋ ID ๋ค ์ฌ์ด์ ์์๋ ๊ท๊ฒฉ์ด ๋ณด์ฅํ์ง ์์ต๋๋ค.
๋ฌด์์ ๋นํธ๋ ๋ฌธ์ ์งํฉ ํฌ๊ธฐ์ ๋ก๊ทธ2 ๊ฐ์ ๊ธธ์ด๋ฅผ ๊ณฑํ ๊ฐ์ ๋๋ค. ๊ธฐ๋ณธ 64์์์ 21์๋ 126๋นํธ์ง๋ง 10์๋ก ์ค์ด๋ฉด 60๋นํธ๊ฐ ๋์ด 50% ์ถฉ๋ ๊ฐ์๊ฐ ์์ญ์ต ๊ฐ๋ก ๋ด๋ ค๊ฐ๋๋ค. ๊ฒฐ๊ณผ์ ๊ทธ ๊ฐ์๋ฅผ ์ฐ๋ ค๋ ๊ท๋ชจ์ ๋น๊ตํ์ธ์.
ID ๋ฅผ ํด์ํด ์ชผ๊ฐ๊ฑฐ๋ UUID ๋ฅผ ๋ง๋ค์ง๋ ์์ต๋๋ค. ์์ฑ๊ณผ ์กฐํฉ ์ ๊ณ์ฐ๋ง ํฉ๋๋ค.