tomai
로그인

UUID 설명: v1, v4, v7의 차이와 사용 시기

UUID는 128-bit 레이블이며 32자리 16진수를 8, 4, 4, 4, 12의 다섯 그룹으로 표기합니다. 중앙 기관에 문의하지 않고 누구나 어디서든 발행할 수 있도록 설계되었으며, 서로 통신하지 않는 시스템 사이에서 행, 파일, 세션, API key를 식별합니다.

1. v1: 시간과 머신

v1은 타임스탬프와 노드 식별자를 포함합니다. 노드 식별자는 보통 네트워크 카드에서 유래합니다. ID는 생성 시간 순으로 거의 정렬되므로 데이터베이스와 궁합이 좋지만, 생성 시각과 장소가 노출됩니다. 프라이버시상의 문제 때문에 많은 신규 시스템이 v1에서 멀어졌습니다.

2. v4: 순수한 난수

v4는 128 bit 중 122 bit를 암호학적 난수원에서 채우고 4 bit를 버전 표시에 고정합니다. 충돌 확률은 터무니없을 정도로 작습니다. 1초에 10억 개씩 100년간 계속 생성해도 1건의 중복이 발생할 확률은 하드웨어 고장률을 크게 밑돕니다. 다만 무작위성이 데이터베이스 인덱스를 흩트리므로 거대 테이블의 삽입은 느려집니다.

3. v7: 현대의 기본값

v7은 앞에 밀리초 타임스탬프를 두고 나머지를 난수로 채웁니다. 머신 신원을 노출하지 않으면서 시간 순의 ID를 얻습니다. 정렬 가능하고 인덱스에 친화적인 식별자가 필요한 신규 프로젝트는 v7을 선택해야 합니다. our UUID generator는 고전적인 v4와 함께 v7을 생성합니다.

4. UUID를 사용하지 말아야 할 경우

사람이 보는 짧은 코드, 청구서 번호, 손으로 입력하는 것은 카운터나 간결한 인코딩이 적합합니다. UUID는 길고, 발음할 수 없으며, 베껴 쓰기 오류를 부릅니다. UUID를 비밀 정보로 사용해서는 안 됩니다. 고유하다는 것과 추측할 수 없다는 것은 다르며, v1과 v7은 타임스탬프를 포함하고, v4는 난수이지만 로그나 URL에 노출되어 있는 경우가 많습니다.