← 모두의 툴

UUID 네 번째 그룹 첫 글자, 아무도 안 보는 그 한 글자의 의미

가이드 · 2026.08.21 최종 확인

UUID를 볼 때 대부분은 32자리 16진수 덩어리를 통째로 "고유한 무작위 문자열"로만 인식합니다. 하지만 550e8400-e29b-41d4-a716-446655440000처럼 하이픈으로 나뉜 세 번째 그룹의 첫 글자와 네 번째 그룹의 첫 글자는 무작위가 아닙니다. 이 두 자리는 RFC 4122 표준이 의도적으로 예약해 둔 메타데이터 비트이고, 이 글자만 읽어도 그 UUID가 몇 번 버전으로 만들어졌는지, 표준을 따르는 값인지 즉시 판별할 수 있습니다.

1. 세 번째 그룹 첫 글자: 버전 번호

UUID는 8-4-4-4-12 형식으로 하이픈이 4개 들어간 32자리 16진수입니다. 이 중 세 번째 그룹(4자리)의 첫 글자는 항상 UUID 버전을 나타내도록 설계되어 있습니다. 값은 1부터 5까지이며, 각각 생성 방식이 다릅니다.

버전생성 방식
v1타임스탬프 + MAC 주소 기반
v3네임스페이스 + 이름의 MD5 해시
v4완전 무작위(가장 흔히 쓰임)
v5네임스페이스 + 이름의 SHA-1 해시

즉 UUID 문자열에서 15번째 문자(하이픈 포함 인덱스 기준)만 떼어 봐도 "이건 v4구나" 하고 바로 알 수 있습니다. 실제로 UUID 변환기의 분석 로직도 정확히 이 원리로 동작합니다 — 입력값의 15번째 문자가 1~5 범위인지 확인해서 버전을 표시하고, 범위를 벗어나면 억지로 추측하지 않고 "Unknown"이라고 정직하게 표시합니다.

2. 네 번째 그룹 첫 글자: variant(변형) 비트

버전보다 훨씬 덜 알려진 것이 네 번째 그룹의 첫 글자, 즉 variant 비트입니다. 이 자리는 하나의 16진수 문자(4비트)지만, 그중에서도 상위 2~3비트만 의미를 가지는 구조입니다. RFC 4122가 정의하는 표준 variant는 이진수로 10xx 패턴(맨 앞 두 비트가 1, 0)을 요구하며, 이 패턴에 해당하는 16진수 문자는 8, 9, a, b 네 가지뿐입니다.

왜 8·9·a·b인가: 4비트 16진수 문자를 이진수로 펼치면 8=1000, 9=1001, a=1010, b=1011입니다. 앞 두 비트가 모두 "10"으로 시작하는 문자는 이 네 개뿐이라, RFC 4122 표준을 따르는 UUID라면 네 번째 그룹은 반드시 8/9/a/b로 시작해야 합니다. 반대로 0~7로 시작하면 구식 NCS 호환 방식, c/d로 시작하면 Microsoft 방식, e/f로 시작하면 예약된 영역입니다.

UUID 변환기는 이 판별도 정확히 코드로 구현되어 있습니다 — 네 번째 그룹 첫 글자를 16진수 정수로 파싱해 8 미만이면 NCS, 12(0xc) 미만이면 RFC 4122, 14(0xe) 미만이면 Microsoft, 그 이상이면 예약됨으로 분류합니다. 단 한 가지 예외가 있는데, 모든 비트가 0인 NIL UUID(00000000-0000-0000-0000-000000000000)는 RFC 4122가 별도로 정의한 특수값이라 이 도구는 variant 자리에 일반 규칙을 적용하지 않고 "—"로 표시합니다.

3. 두 글자로 UUID를 감별하는 실전 예시

다음 표는 같은 자리처럼 보이지만 전혀 다른 정보를 담은 UUID 3개를 비교한 예시입니다.

UUID버전 (3번째 그룹 첫 글자)Variant (4번째 그룹 첫 글자)해석
550e8400-e29b-41d4-a716-4466554400004 → v4a → RFC 4122표준 랜덤 UUID
a0eebc99-9c0b-31ef-a736-4795032000003 → v3a → RFC 4122MD5 네임스페이스 기반
ffffffff-ffff-7fff-ffff-ffffffffffff7 → Unknownf → 예약표준을 안 따르는 값(v7 등 신버전이거나 손상값)

세 번째 예시처럼 버전 자리가 6이나 7, 8처럼 1~5 범위를 벗어나면 그 UUID는 이 도구가 다루는 RFC 4122 v1~v5 규격 밖의 값입니다. 실무에서는 이런 값이 최신 규격(정렬 가능한 UUID v7 등)이거나, 혹은 UUID가 아닌 다른 랜덤 문자열이 UUID 형식에 우연히 맞아떨어진 경우일 수 있으므로, 버전란이 Unknown으로 뜬다면 원본 데이터 소스를 다시 확인하는 것이 좋습니다.

4. 이 지식이 실제로 쓸모 있는 순간

대량으로 표준 UUID를 뽑아야 한다면 UUID 대량 생성기로 한 번에 생성하는 편이, 손으로 만든 값보다 버전/variant 비트가 항상 정확하게 맞습니다.

자주 묻는 질문

Q. 왜 하필 세 번째, 네 번째 그룹에 정보를 숨겨뒀나요?

RFC 4122 설계 당시 UUID의 128비트 중 일부를 버전·variant 식별에 할당하기로 정했고, 8-4-4-4-12 그룹 구분에서 세 번째 그룹의 시작과 네 번째 그룹의 시작이 그 비트 위치에 해당했기 때문입니다. 나머지 비트는 실제 데이터(타임스탬프, 랜덤값, 해시 등)에 쓰입니다.

Q. variant가 8/9/a/b가 아니면 그 UUID는 무효인가요?

형식(8-4-4-4-12 16진수)만 맞으면 여전히 "유효한 형식의 UUID 문자열"입니다. 다만 RFC 4122 표준을 따르는 값은 아니라는 뜻이므로, 표준 라이브러리로 생성됐다고 가정하고 파싱하는 코드에서는 예상과 다르게 동작할 수 있습니다.

Q. UUID v7은 이 도구에서 어떻게 표시되나요?

v7은 버전 자리가 "7"이라 1~5 범위 판별 로직에서 걸러지지 않고 Unknown으로 표시됩니다. 정렬 가능한 시간 기반 UUID(v7)를 다루려면 별도로 버전 7 규격을 지원하는 도구가 필요합니다.

Q. NIL UUID의 variant가 "—"로 표시되는 이유는?

NIL UUID는 128비트가 전부 0이라 네 번째 그룹 첫 글자도 0입니다. 0은 일반 규칙상 NCS로 분류되지만, RFC 4122는 NIL을 아예 별도의 특수값으로 정의하고 있어 일반 variant 규칙을 적용하는 것이 부정확하므로 이 도구는 "—"로 구분해 표시합니다.