UUID v4란? 고유 식별자를 안전하게 생성하고 사용하는 방법
UUID v4의 구조와 충돌 가능성, 데이터베이스 키로 사용할 때의 장단점을 개발자 관점에서 쉽게 설명합니다.
UUID는 중앙 서버에서 번호를 발급받지 않고도 고유한 식별자를 만들기 위해 널리 사용되는 형식입니다. 여러 시스템이 동시에 데이터를 생성하거나 클라이언트에서 먼저 임시 ID가 필요한 상황에서 특히 편리합니다.
Cobin UUID 생성기는 브라우저의 암호학적 난수를 이용해 UUID v4를 한 번에 최대 100개까지 생성합니다.
UUID v4의 기본 구조
UUID는 16바이트, 즉 128비트 값이며 일반적으로 16진수와 하이픈을 사용해 36글자로 표시합니다.
550e8400-e29b-41d4-a716-446655440000
UUID v4에서는 일부 비트가 버전과 variant를 나타내는 데 사용되고 나머지 122비트가 무작위 값으로 채워집니다. 세 번째 묶음의 첫 글자가 4인 이유가 버전 4를 의미하기 때문입니다.
UUID를 사용하는 대표적인 상황
- 분산 시스템에서 중앙 ID 발급 없이 레코드를 생성할 때
- 공개 URL에 순차적인 데이터베이스 번호를 노출하고 싶지 않을 때
- 프론트엔드에서 서버 저장 전에 임시 식별자가 필요할 때
- 테스트 데이터와 fixture를 만들 때
- 서로 다른 데이터 소스의 ID 충돌을 줄이고 싶을 때
UUID는 예측하기 어려운 식별자를 제공하지만 접근 권한을 대신하지는 않습니다. UUID가 포함된 URL이라도 인증과 인가 검사는 별도로 구현해야 합니다.
충돌 가능성은 얼마나 낮을까요?
122비트 무작위 공간에는 약 5.3 × 10³⁶개의 값이 있습니다. 따라서 올바른 난수 생성기를 사용하면 일반적인 규모에서 충돌 가능성은 극히 낮습니다. 다만 UUID 컬럼에도 데이터베이스 UNIQUE 제약을 두는 것이 좋습니다. 낮은 확률과 무결성 검사는 서로 다른 문제이기 때문입니다.
데이터베이스 기본 키로 사용할 때
UUID는 여러 서비스에서 독립적으로 ID를 생성할 수 있다는 장점이 있습니다. 반면 숫자형 순차 키보다 저장 공간이 크고, 완전히 무작위인 v4 값을 정렬 인덱스에 계속 삽입하면 쓰기 지역성이 떨어질 수 있습니다.
| 선택 | 장점 | 고려할 점 |
|---|---|---|
| UUID v4 | 단순하고 널리 지원됨 | 무작위 정렬로 인덱스 효율 저하 가능 |
| 순차 정수 | 작고 인덱스 효율이 좋음 | 분산 생성과 외부 노출에 주의 |
| 시간 정렬형 ID | 생성 순서와 인덱스 효율 개선 | 표준과 라이브러리 선택 필요 |
서비스 규모와 데이터베이스 특성을 확인한 뒤 선택하세요. 내부 기본 키는 숫자로 유지하고 외부 공개용 식별자를 UUID로 분리하는 방법도 흔히 사용됩니다.
UUID와 비밀번호는 다릅니다
UUID v4가 무작위처럼 보이더라도 비밀번호나 API 비밀 키를 대신하면 안 됩니다. 보안 토큰은 목적에 맞는 충분한 엔트로피와 만료, 폐기, 권한 범위를 함께 설계해야 합니다. 계정용 암호가 필요하다면 비밀번호 생성기를 사용하고 안전한 비밀번호 관리자에 보관하세요.
실무 체크리스트
- 운영체제나 브라우저가 제공하는 암호학적 난수를 사용합니다.
- 직접 만든
Math.random()기반 UUID 구현은 피합니다. - 데이터베이스에 고유 제약을 설정합니다.
- UUID 자체를 인증 수단으로 취급하지 않습니다.
- 로그와 URL에 개인정보가 함께 노출되지 않는지 확인합니다.
UUID v4는 목적과 한계를 이해하면 분산 환경에서 매우 실용적인 식별자입니다. 생성 방식은 검증된 API에 맡기고, 데이터 무결성과 접근 제어는 애플리케이션 계층에서 별도로 보장하는 것이 핵심입니다.