유틸리티

UUID란? v4 생성 원리와 개발에서 쓰는 이유 정리

데이터베이스 테이블의 PK를 AUTO_INCREMENT 대신 UUID로 쓰는 프로젝트가 점점 많아지고 있다. 숫자 ID가 간단한데 왜 32자짜리 문자열을 쓸까. 이유가 있다.

UUID란

UUID(Universally Unique Identifier)는 128비트 길이의 고유 식별자다. 형태는 550e8400-e29b-41d4-a716-446655440000처럼 하이픈으로 구분된 16진수 문자열이다. 중앙 서버 없이도 어디서든 생성할 수 있고, 중복될 확률이 사실상 0에 가깝다.

UUID를 쓰는 이유

  • 분산 시스템: 여러 서버에서 동시에 ID를 생성해도 충돌이 안 난다
  • 보안: 순차 ID는 총 데이터 수가 노출되지만, UUID는 추측이 불가능하다
  • 마이그레이션: DB를 합치거나 분리할 때 ID 충돌 걱정이 없다
  • API 설계: 리소스 URL에 /users/3 대신 /users/550e8400...을 쓰면 열거 공격을 막을 수 있다

UUID v4 생성 원리

버전 4는 122비트를 완전한 난수로 채운다(나머지 6비트는 버전과 변형 표시용). 가능한 조합 수는 약 5.3 × 1036개. 매초 10억 개씩 생성해도 중복이 나올 확률이 50%에 도달하려면 약 850억 년이 걸린다.

참고: v1은 MAC 주소와 타임스탬프 기반이라 생성 시간과 기기 정보가 노출될 수 있다. 보안이 중요한 곳에서는 순수 랜덤인 v4를 쓰는 게 일반적이다.

UUID 생성 방법

대부분의 프로그래밍 언어에 UUID 생성 라이브러리가 있다. Python은 uuid.uuid4(), JavaScript는 crypto.randomUUID()를 쓰면 된다. 테스트용 UUID가 급하게 몇 개 필요하거나, 하이픈 제거/대문자 변환 같은 포맷 조정이 필요할 때는 UUID 생성기에서 한 번에 여러 개를 만들고 원하는 형식으로 복사할 수 있다.

UUID는 길고 읽기 어렵다는 단점이 있지만, 분산 환경에서 충돌 없는 고유 ID가 필요하다면 가장 검증된 선택이다.