유틸리티

UUID란 무엇인가? 충돌 없는 고유 ID 생성 원리와 활용법

서버 두 대가 동시에 데이터를 저장하면 같은 ID가 만들어질 수 있다. 자동 증가 번호(auto increment)는 서버 한 대에서만 쓸 때는 문제없지만, 분산 환경이나 마이크로서비스에서는 충돌 위험이 있다. UUID는 중앙 관리 없이도 겹치지 않는 ID를 만들어 준다.

UUID 구조

UUID(Universally Unique Identifier)는 128비트 길이의 고유 식별자다. 32자리 16진수를 하이픈으로 구분해서 표시한다.

550e8400-e29b-41d4-a716-446655440000

8-4-4-4-12 자리로 나뉘어 있고, 세 번째 블록 첫 자리가 버전 번호다. 위 예시에서 4가 보이면 UUID v4라는 뜻이다. 가능한 조합 수가 약 3.4 × 1038개여서, 매초 10억 개씩 만들어도 수백 년간 겹칠 확률이 사실상 없다. 마이크로소프트 생태계에서는 같은 것을 GUID(Globally Unique Identifier)라고 부르는데, 구조와 원리는 동일하다.

auto increment 대신 UUID를 쓰는 이유

  • 분산 생성: 서버 여러 대가 동시에 ID를 만들어도 중앙 DB에 물어볼 필요가 없다
  • 병합 용이: 서로 다른 데이터베이스를 합칠 때 ID 충돌이 발생하지 않는다
  • 예측 불가: 순차 번호는 URL에 노출되면 전체 건수를 추측할 수 있지만, UUID는 패턴이 없어서 정보가 새지 않는다
  • 오프라인 생성: 네트워크 없이 클라이언트에서 바로 ID를 만들 수 있다
참고 UUID의 단점도 있다. 36자로 길어서 저장 공간을 더 차지하고, 순차적이지 않아서 DB 인덱스 성능에 영향을 줄 수 있다. 간단한 단일 서버 프로젝트라면 auto increment로 충분하다.

UUID 버전: v1과 v4 차이

실무에서 주로 쓰는 건 v1과 v4 두 가지다.

UUID v1
타임스탬프와 MAC 주소를 조합해서 만든다. 생성 시각 순서가 유지되어 DB 정렬에 유리하지만, MAC 주소가 노출되는 보안 문제가 있다.
UUID v4
122비트를 완전 랜덤으로 채운다. 시간이나 장비 정보가 포함되지 않아 가장 널리 쓰인다. 대부분의 프레임워크와 라이브러리가 기본으로 v4를 생성한다.

대량으로 생성해야 할 때

테스트 데이터를 만들거나 마이그레이션 스크립트에 UUID가 수십 개 필요한 상황이라면, 코드를 작성하는 것보다 UUID 생성기를 쓰는 게 빠르다. 한 번에 최대 1,000개까지 뽑을 수 있고, 하이픈 제거, 중괄호 포함, URN 형식 등 포맷도 선택할 수 있다.

  • 암호학적 난수 기반(crypto.getRandomValues)으로 생성
  • 대문자 변환 옵션 지원
  • 결과를 텍스트 파일로 다운로드 가능

ID 한두 개는 코드에서 직접 만들면 되지만, 수십 개가 한꺼번에 필요한 상황이라면 생성기에서 뽑아서 붙여넣는 게 시간을 줄이는 방법이다.