유틸리티

UUID란? 고유 ID가 필요한 이유와 생성 방법 정리

데이터베이스에 새 레코드를 추가할 때마다 고유한 ID가 필요하다. 순차 번호(1, 2, 3...)를 써도 되지만, 분산 시스템에서는 여러 서버가 동시에 ID를 만들기 때문에 번호가 겹칠 수 있다. 이 문제를 해결하기 위해 UUID가 쓰인다.

UUID가 뭔가

UUID(Universally Unique Identifier)는 128비트 길이의 고유 식별자다. 550e8400-e29b-41d4-a716-446655440000처럼 32자리의 16진수를 하이픈으로 구분한 형태로 표기한다. 전 세계 어디서 생성하든 같은 값이 나올 확률이 사실상 0에 가깝다.

순차 ID 대신 UUID를 쓰는 경우

  • 분산 시스템: 여러 서버가 동시에 ID를 생성해도 충돌하지 않는다
  • 보안: 순차 번호는 다음 ID를 예측할 수 있지만, UUID는 예측이 불가능하다
  • 데이터 병합: 서로 다른 데이터베이스의 데이터를 합칠 때 ID 충돌이 없다
  • API 설계: URL에 /users/3 대신 /users/550e8400...을 쓰면 전체 유저 수를 노출하지 않는다

UUID v4의 구조

가장 많이 쓰이는 버전은 v4다. 122비트를 무작위 난수로 채우고, 나머지 6비트로 버전(4)과 변형 정보를 표시한다.

xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx

세 번째 블록의 첫 글자가 항상 4인 것이 v4의 특징이다. y 자리에는 8, 9, a, b 중 하나가 들어간다.

충돌 확률은?

UUID v4는 약 5.3 × 1036개의 경우의 수를 가진다. 매초 10억 개씩 생성해도 100년 동안 충돌할 확률이 50%에 도달하지 않는다. 실무에서는 충돌을 걱정할 필요가 없는 수준이다.

참고 GUID(Globally Unique Identifier)는 마이크로소프트가 쓰는 용어일 뿐, UUID와 같은 것이다. .NET 환경에서는 GUID, 그 외에서는 UUID로 부르는 차이만 있다.

개발 중에 테스트 데이터용 UUID가 여러 개 필요하다면, UUID 생성기에서 최대 1,000개까지 한 번에 만들 수 있다. 하이픈 제거, 중괄호, URN 등 형식도 골라서 바로 복사하거나 파일로 다운로드할 수 있다.

고유 ID 설계는 시스템의 기초 중 기초다. UUID를 쓸지 순차 번호를 쓸지는 프로젝트 특성에 맞게 판단하면 된다.