Tools mentioned in this article
Open the browser-based tool while you read and try the workflow immediately.
“이 ID, 절대로 누군가와 겹치지 않을까요?”
시스템 내에서 데이터를 다룰 때 피할 수 없는 것이 바로 ‘ID(식별자)’ 설계입니다.
“사용자 ID, 그냥 단순한 일련번호로 써도 될까?”, “데이터가 늘어났을 때 다른 서버의 데이터와 겹치면 어떡하지…”

이런 불안을 없애고, 분산된 환경에서도 중앙 관리 없이 ‘전 세계에서 단 하나뿐인 ID’를 즉시 발행할 수 있게 해주는 마법 같은 문자열. 그것이 바로 **UUID (Universally Unique Identifier)**입니다.
UUID: 128비트에 담긴 ‘기적’
UUID는 128비트라는 방대한 정보량을 가지고 있습니다.
그 조합의 수는 전 인류가 평생 매초 10억 개의 UUID를 계속 생성한다고 해도 중복될 확률이 거의 제로에 가깝다고 할 정도입니다.
이 압도적인 ‘안심감’이 있기에 우리는 데이터베이스나 마이크로서비스 사이에서 안심하고 ID를 공유할 수 있는 것입니다.
어떤 버전을 써야 할까? UUID 버전 선택의 포인트
UUID에는 여러 종류가 있지만, 현대의 개발자가 기억해야 할 것은 주로 다음 세 가지입니다.
- Version 4: 완전한 랜덤
- 특징: 완전히 무작위이며 예측 불가능합니다.
- 용도: 세션 ID나 임시 파일명 등 ‘누구와도 겹치지 않으면서 추측 불가능해야 하는 것’에 사용합니다.
- Version 7: 시간순 정렬이 가능한 UUID
- 특징: 타임스탬프가 앞부분에 포함되어 있습니다.
- 용도: 데이터베이스 기본 키(PK). 등록 순서대로 정렬되므로 데이터베이스의 검색 효율(인덱스 성능)을 떨어뜨리지 않으면서 UUID의 장점을 누릴 수 있습니다. 2024년에 표준화된, 현재 가장 주목받는 선택지입니다.
- Version 1: 머신의 증표 (MAC 주소)
- 특징: 어느 머신에서 언제 만들어졌는지 알 수 있습니다.
- 용도: 오래된 시스템이나 특정 기기를 추적해야 하는 경우에 사용합니다.
고민된다면 먼저 만들어 보세요
“UUID는 실제로 어떻게 생겼을까?”, “v4 버전을 한꺼번에 100개쯤 만들고 싶어.”
그럴 때는 저희 사이트의 **UUID 생성 도구**를 활용해 보세요.
버튼을 누를 때마다 세상에 없던 새로운 UUID가 즉시 생성됩니다. 그 무미건조하면서도 든든한 문자열을 보고 있으면 광활한 분산 시스템의 세계가 조금은 가깝게 느껴질지도 모릅니다.
마치며
UUID는 뿔뿔이 흩어져 움직이는 시스템들을 하나로 묶어주는 ‘끈’과 같은 존재입니다.
용도에 맞는 최적의 버전을 선택하여 ID 중복의 걱정에서 해방되세요. 고유성 보장은 도구에 맡기고, 여러분은 더 가치 있는 로직 구현에 에너지를 쏟으시기 바랍니다.
자주 묻는 질문
UUID v4는 정말 무작위인가요?
그렇습니다. v4의 128비트 중 122비트가 난수이고 나머지 6비트는 버전과 변형을 나타냅니다. 암호학적으로 안전한 난수 생성기를 쓴다는 전제 아래, 실무에서 충돌 확률은 무시할 수 있는 수준입니다. 다만 Math.random() 같은 약한 난수로 직접 구현하면 무작위성이 떨어지므로, 각 언어 표준 라이브러리의 UUID 생성기를 사용하세요.
기존 v4를 전부 v7로 옮겨야 하나요?
그럴 필요는 없습니다. v7의 장점은 시간순으로 정렬된다는 점이며, 주로 데이터베이스 인덱스의 지역성을 개선하기 위한 것입니다. 현재 v4가 성능 문제를 일으키지 않는다면 마이그레이션 위험을 감수할 이유가 없습니다. 반면 UUID를 기본키로 쓰고 쓰기가 많은 새 테이블이라면 처음부터 v7을 쓸 가치가 있습니다.
두 대의 머신이 같은 v4를 만들 수 있나요?
이론적으로 0은 아니지만 확률은 극히 낮습니다. 초당 10억 개를 수십 년간 생성해도 한 번의 충돌이 일어날 확률은 걱정할 수준에 한참 못 미칩니다. 실제로 주의해야 할 것은 구현 결함입니다. 난수 시드가 고정되어 있거나, 컨테이너를 복제해 같은 초기 상태로 시작하는 경우입니다.
nil UUID란 무엇인가요?
모든 비트가 0인 00000000-0000-0000-0000-000000000000을 말합니다. ‘미설정’의 기본값으로 자주 쓰이지만, 데이터베이스의 NOT NULL 컬럼은 이 값을 그대로 받아들이므로 ‘설정을 깜빡한 상태’를 NOT NULL 제약으로는 잡아낼 수 없다는 점에 주의하세요.
UUID 형식은 어떻게 검증하나요?
8-4-4-4-12의 16진수 패턴을 정규식으로 확인하면 됩니다. 버전까지 확인하려면 13번째 문자(버전)와 17번째 문자(변형)를 함께 봐야 합니다. 실제 문자열의 구조를 확인하고 싶다면 UUID 생성기 에서 생성 결과의 형식도 함께 살펴볼 수 있습니다.