14. 분산 고유 ID 생성: Snowflake·UUID·ULID와 시계 역행 문제

난이도 중 해설 보기 →
문제

문제 14 — 분산 고유 ID 생성: Snowflake·UUID·ULID와 시계 역행 문제

여러 서버가 동시에 아이템·거래·로그·매치에 전역 고유 ID를 부여해야 한다. 다음을 설명하라.

  1. 게임 백엔드에서 ID 생성기에 요구되는 속성들을 정리하라: 전역 유일성, 시간 순 정렬(monotonic/k-sortable), 크기, 생성 처리량, 조정(coordination) 비용, 추측 불가능성(보안). 이들이 서로 어떻게 상충하는가?

  2. 다음 방식들을 비교하라:

    • DB auto-increment / 시퀀스
    • UUIDv4(랜덤 128비트)
    • Snowflake류(타임스탬프 + 머신 ID + 시퀀스, 64비트)
    • ULID / UUIDv7(시간 접두 + 랜덤)
    • 티켓/세그먼트 서버(번호 구간을 묶음으로 미리 할당)

    각각의 유일성 보장 방식, 정렬성, 조정 필요성, 길이, 단점을 논하라.

  3. 인덱스 지역성(locality) 관점에서, 랜덤 ID(UUIDv4)를 기본 키로 쓰면 왜 B-트리 인덱스에 쓰기 증폭/단편화가 생기는가? 시간 정렬 ID가 왜 삽입과 범위 조회에 유리한가? (앞서 다룬 키셋 페이지네이션과의 연결도 짚어라.)

  4. Snowflake의 시계 역행(clock skew / NTP 되감김) 문제를 설명하라. 시계가 과거로 점프하면 무엇이 깨지며, 실무에서 어떻게 방어하는가(마지막 타임스탬프 추적, 대기/거부, 머신 ID 분리)?

  5. 게임에서 ID 종류별로 어떤 선택이 합리적인가? 예: 아이템 UID, 거래/주문 ID, 로그 상관관계(correlation) ID, 매치 ID. 추측 가능한 순차 ID가 보안상 위험할 수 있는 경우는?

답안 작성
내 답안 · 자동 저장

직접 답을 작성한 뒤, 위 해설 보기에서 모범답안과 대조하세요.