ULID · Snowflake 공통 원리

앞부분은 시간순을 만들고, 뒷부분은 같은 시각의 충돌을 막습니다.

시간 기반 정렬 ID는 하나의 값 안에서 정렬분산 생성을 같이 해결합니다.

앞쪽: 시간 정보

01ARZ3NDEK

먼저 비교되는 구간이라서, 문자열 정렬만 해도 생성 시각 순서가 드러납니다.

뒤쪽: 고유성 정보

TSV4RRFFQ69G5FAV

같은 시각에 여러 노드가 만들어도 값이 갈립니다. Snowflake는 노드·시퀀스, ULID는 랜덤 값으로 이 역할을 맡습니다.

앞부분만 바뀌어도 최근 ID가 뒤에 붙습니다

10:01 01AR...
10:02 01AS...
10:03 01AT...

로그, 이벤트, 최근 생성 데이터처럼 시간순 조회가 중요한 곳에서 유리합니다.

시간이 같으면 뒤쪽 구간이 각 요청을 분리합니다

10:02.431
...A1F9
10:02.431
...K7Q2
10:02.431
...W9MB

중앙 시퀀스 DB 없이도 여러 서버가 동시에 ID를 만들어 고유성을 유지할 수 있습니다.

즉, 시간 기반 정렬 ID는 최근 순서로 읽기 쉬운 키분산 환경의 충돌 방지를 한 번에 만족시키는 패턴입니다.