유틸리티

UUID란? 개발에서 고유 ID가 필요할 때 쓰는 방법

데이터베이스에 사용자를 추가하는데, ID를 1, 2, 3으로 순서대로 매기면 보안상 문제가 생길 수 있다. URL에 /user/3이라고 치면 다른 사용자 정보에 접근할 수 있기 때문이다. 그래서 예측할 수 없는 고유 ID가 필요하고, 이때 쓰는 게 UUID다.

UUID 구조 이해하기

UUID(Universally Unique Identifier)는 128비트(32자리 16진수) 식별자다. 형식은 이렇다.

550e8400-e29b-41d4-a716-446655440000
│        │    │    │    │
8자리   4자리 4자리 4자리   12자리

하이픈으로 구분된 5개 그룹, 총 36자(하이픈 포함)로 구성된다. v4 기준으로 122비트가 랜덤 값이고, 나머지 6비트는 버전과 변형 정보를 담는다.

UUID 버전별 차이

버전생성 방식특징
v1시간 + MAC 주소시간순 정렬 가능, MAC 주소 노출 위험
v3네임스페이스 + MD5같은 입력에 같은 UUID 출력
v4완전 랜덤가장 많이 쓰임, 충돌 확률 극히 낮음
v5네임스페이스 + SHA-1v3의 보안 강화 버전
v7시간 기반 + 랜덤시간순 정렬 가능, DB 인덱스 친화적

현재 실무에서 가장 많이 쓰이는 건 v4다. 외부 정보에 의존하지 않고 난수만으로 생성하기 때문에 구현이 단순하고 보안 측면에서도 깔끔하다.

충돌(같은 UUID가 두 번 나올) 확률은?

UUID v4의 가능한 조합 수는 약 5.3 × 10³⁶개다. 매초 10억 개씩 생성해도 중복이 나올 확률이 50%가 되려면 약 86년이 걸린다. 사실상 충돌은 걱정하지 않아도 되는 수준이다.

UUID를 어디에 쓰나

  • 데이터베이스 기본키: 순차 ID 대신 UUID를 쓰면 ID 추측 공격을 방지할 수 있다.
  • 분산 시스템: 여러 서버에서 동시에 ID를 생성해도 중복될 위험이 없다. 중앙 서버에 번호를 요청할 필요가 없다.
  • API 리소스 식별: /api/orders/550e8400-e29b-41d4-a716-446655440000
  • 파일명: 업로드된 파일에 UUID를 붙이면 이름 충돌을 방지할 수 있다.
  • 세션/토큰: 사용자 세션 ID나 일회용 토큰으로 활용한다.

프로젝트에서 테스트용 UUID가 여러 개 필요하거나 특정 형식(하이픈 제거, 대문자 등)이 필요한 경우, UUID 생성기에서 최대 1,000개까지 한 번에 만들 수 있다. 텍스트 파일로 다운로드도 되니 대량으로 필요할 때 편하다.

TIP UUID를 DB 기본키로 쓸 때 주의할 점이 있다. v4는 완전 랜덤이라 B-Tree 인덱스에서 삽입 성능이 떨어질 수 있다. 대량 쓰기가 많은 시스템이라면 시간 기반 정렬이 가능한 v7이나 ULID를 고려해보는 것도 방법이다.

고유 ID가 필요한 곳에 UUID를 쓰면 중복 걱정 없이 시스템을 설계할 수 있다. 개발자라면 한 번쯤 정리해둘 가치가 있는 개념이다.