UUID(Universally Unique Identifier)는 128비트로 이루어진 식별자로, 보통 32자리 16진수를 8-4-4-4-12자리로 나눠 하이픈으로 이어 적습니다. 서로 다른 곳에서 각자 생성해도 값이 겹칠 확률이 극히 낮도록 설계되어 있어, 하나의 중앙 저장소 없이도 고유한 값을 만들 수 있습니다.
UUID란 무엇이고 왜 필요한가
1, 2, 3 대신 무작위 문자열을 ID로 쓰는 이유를 설명합니다.
자동 증가 ID와 무엇이 다른가
1, 2, 3처럼 순서대로 늘어나는 자동 증가 ID는 중복을 막으려면 하나의 중앙 카운터(대개 데이터베이스)가 반드시 필요합니다. 반면 UUID는 서버, 클라이언트, 오프라인 상태의 기기가 서로 조율하지 않고도 각자 독립적으로 생성할 수 있어, 여러 시스템의 데이터를 나중에 합칠 때도 충돌 걱정이 적습니다.
예측 가능한 ID가 문제 되는 경우
순번 ID는 정보를 노출시킬 수 있습니다. 예를 들어 주문 번호가 1042라면 지금까지 대략 몇 건의 주문이 있었는지 짐작할 수 있고, 다음 번호인 1043을 추측해 접근을 시도할 수도 있습니다. 또한 서로 다른 시스템에서 각자 1번부터 채번한 데이터를 합치면 번호가 그대로 충돌합니다.
UUID v4는 어떻게 만들어지나
UUID v4는 대부분의 비트를 난수로 채우고, 버전과 형식을 나타내는 몇 개의 고정 비트만 규격에 맞춰 끼워 넣는 방식으로 만들어집니다. 브라우저에서는 crypto API가 제공하는 암호학적으로 안전한 난수를 사용하므로, 단순한 Math.random()보다 예측하기 훨씬 어려운 값이 나옵니다.
자주 묻는 질문
UUID는 절대로 겹치지 않는다고 보장할 수 있나요?
이론적으로 100%는 아닙니다. 다만 UUID v4가 우연히 중복될 확률은 실무에서 무시해도 될 만큼 극히 낮아서, 대부분의 시스템에서 고유값으로 안전하게 사용됩니다.
UUID를 데이터베이스 기본 키로 써도 되나요?
가능합니다. 다만 자동 증가 정수보다 저장 공간을 더 차지하고 인덱스 성능에 영향을 줄 수 있으므로, 여러 시스템을 나중에 합쳐야 하는지 등 상황에 따라 트레이드오프를 고려해 선택하는 것이 좋습니다.