UUID (Universally Unique Identifier)

shjk·2025년 5월 13일
0

1. UUID의 정의

UUID(Universally Unique Identifier)는 컴퓨터 시스템에서 정보의 고유성을 보장하기 위해 사용되는 128비트(16바이트)의 식별자이다. 보통 텍스트 형태로 표현될 때 32개의 16진수로 이루어진 5개의 그룹으로 구분하여 표시된다.

예시:

550e8400-e29b-41d4-a716-446655440000

2. UUID 구조 및 표현 방식

UUID는 아래와 같은 형태로 표현된다.

xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx
  • 총 36자(하이픈 포함)로 구성된다.

  • 각 그룹의 역할은 다음과 같다:

    • xxxxxxxx: 8자리(32비트)
    • xxxx: 4자리(16비트)
    • M: 4자리 중 첫 글자(버전 번호)
    • N: 4자리 중 첫 글자(변형 타입)

3. UUID 버전(version)

UUID에는 버전에 따라 생성 방식이 다르며, 주요 버전은 다음과 같다.

버전설명예시
1타임스탬프 + MAC 주소 기반7d444840-9dc0-11d1-b245-5ffdce74fad2
3MD5 해시 기반3b241101-e2bb-3255-8c5d-0c47b5a96e0a
4랜덤 기반550e8400-e29b-41d4-a716-446655440000
5SHA-1 해시 기반b1a7cf8f-78da-5689-8f17-42f433e264e4
  • 가장 널리 쓰이는 버전은 버전 4(UUID v4)로, 완전히 랜덤하게 생성된다.

4. UUID 변형(variant)

UUID의 변형은 총 4가지가 있으며, 주로 쓰이는 표준 변형(RFC4122)은 다음과 같이 정의된다.

변형(Variant)설명비트 패턴
RFC 4122현재 가장 널리 사용됨10xx
NCS구식 호환용0xxx
Microsoft마이크로소프트 GUID 호환110x
미래용(reserved)예약됨111x

RFC 4122 변형이 일반적으로 가장 널리 사용된다.


5. UUID 사용 사례

  • 데이터베이스 식별자: 여러 데이터베이스에서 중복 없이 고유 식별자로 사용한다.
  • 분산 시스템: 여러 독립적인 노드에서 ID 충돌 없이 객체를 식별할 수 있다.
  • API 설계 및 URL 처리: 민감한 정보 보호를 위해 숫자 기반 ID보다 UUID를 사용해 추측 불가능한 URL을 만든다.

예시:

https://example.com/users/550e8400-e29b-41d4-a716-446655440000

6. 장단점

장점

  • 고유성 보장(거의 무한대에 가까운 식별자 생성)
  • 시스템 간의 ID 충돌 방지
  • 데이터 보안성 강화(ID 추측 난이도 증가)

단점

  • 길이가 상대적으로 길어 저장 공간을 많이 차지함 (정수 대비 4배 이상 크기)
  • 정렬 및 색인이 다소 비효율적일 수 있음(특히 무작위 UUID 사용 시)

7. 생성 방법 (Go 언어 기준)

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 설계, 보안이 중요한 환경에서 널리 활용되고 있다.

profile
백엔드 개발자

0개의 댓글