UUID(Universally Unique Identifier)는 컴퓨터 시스템에서 정보의 고유성을 보장하기 위해 사용되는 128비트(16바이트)의 식별자이다. 보통 텍스트 형태로 표현될 때 32개의 16진수로 이루어진 5개의 그룹으로 구분하여 표시된다.
예시:
550e8400-e29b-41d4-a716-446655440000
UUID는 아래와 같은 형태로 표현된다.
xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx
총 36자(하이픈 포함)로 구성된다.
각 그룹의 역할은 다음과 같다:
xxxxxxxx: 8자리(32비트)xxxx: 4자리(16비트)M: 4자리 중 첫 글자(버전 번호)N: 4자리 중 첫 글자(변형 타입)UUID에는 버전에 따라 생성 방식이 다르며, 주요 버전은 다음과 같다.
| 버전 | 설명 | 예시 |
|---|---|---|
| 1 | 타임스탬프 + MAC 주소 기반 | 7d444840-9dc0-11d1-b245-5ffdce74fad2 |
| 3 | MD5 해시 기반 | 3b241101-e2bb-3255-8c5d-0c47b5a96e0a |
| 4 | 랜덤 기반 | 550e8400-e29b-41d4-a716-446655440000 |
| 5 | SHA-1 해시 기반 | b1a7cf8f-78da-5689-8f17-42f433e264e4 |
UUID의 변형은 총 4가지가 있으며, 주로 쓰이는 표준 변형(RFC4122)은 다음과 같이 정의된다.
| 변형(Variant) | 설명 | 비트 패턴 |
|---|---|---|
| RFC 4122 | 현재 가장 널리 사용됨 | 10xx |
| NCS | 구식 호환용 | 0xxx |
| Microsoft | 마이크로소프트 GUID 호환 | 110x |
| 미래용(reserved) | 예약됨 | 111x |
RFC 4122 변형이 일반적으로 가장 널리 사용된다.
예시:
https://example.com/users/550e8400-e29b-41d4-a716-446655440000
Go에서는 google/uuid 라이브러리를 사용해 손쉽게 UUID를 생성할 수 있다.
package main
import (
"fmt"
"github.com/google/uuid"
)
func main() {
// 랜덤 UUID 생성
id := uuid.New()
fmt.Println("UUID:", id.String())
}
출력 예시:
UUID: 550e8400-e29b-41d4-a716-446655440000
UUID는 데이터의 고유성을 보장하는 강력한 방법으로, 분산 환경에서 자주 사용된다. 그러나 무작정 사용하기보다는 목적과 상황에 맞게 장단점을 고려하여 활용하는 것이 바람직하다. 특히 대규모 분산 시스템, API 설계, 보안이 중요한 환경에서 널리 활용되고 있다.