- Go 언어에 UUID 생성 및 파싱 기능을 표준 라이브러리로 포함하자는 제안이 GitHub에서 논의됨
- 제안자는 현재 대부분의 Go 서버·DB 프로젝트가 github.com/google/uuid 같은 외부 패키지에 의존하고 있음을 근거로 제시
- C#, Java, Python 등 주요 언어는 이미 표준 라이브러리 수준에서 UUID 지원을 제공하고 있음
- 논의 과정에서 UUIDv7 등 최신 사양과 RFC 9562 준수 여부, 파싱 기능 포함 범위, API 일관성 등이 주요 쟁점으로 다뤄짐
- 이 제안은 이후 crypto/rand 패키지의 UUIDv4·UUIDv7 지원 제안(#76319) 으로 통합되어 진행 중임
제안 개요
- Go 표준 라이브러리에 UUID 생성 및 파싱 API를 추가하는 방안 제시
- 대상 버전은 UUID v3, v4, v5
- 주요 근거는 외부 패키지 의존도와 다른 언어의 표준 지원 사례
- UUID는 RFC 4122(이후 RFC 9562)에 정의된 국제 표준임
- 제안자는 Go가 주요 언어 중 UUID 표준 지원이 없는 예외적 사례라고 지적
초기 반응과 논의
- 일부 참여자는 과거에도 유사 제안이 있었으나 거절된 전례를 언급 (#23789, #28324)
- 이유는 외부 패키지 사용이 충분히 간편하고, 표준 라이브러리보다 릴리스 주기가 유연하다는 점
- 제안자는 “대부분의 프로젝트가 매번 외부 패키지를 임포트해야 한다면, 차라리 표준에 포함하는 것이 낫다”고 주장
- 다수의 언어가 UUID를 crypto 관련 표준 라이브러리에 포함하고 있다는 점이 지지 근거로 제시됨
최신 UUID 버전 및 RFC 반영
- 일부 의견은 UUID v1~v5는 구식이며, v7이 최신이자 유망한 버전이라고 지적
- v7은 다양한 구현 옵션이 존재하며, 적용 결과를 지켜볼 필요가 있음
- RFC 초안에서는 UUID를 불필요하게 파싱하지 말고 불투명한 식별자로 다루는 것을 권장
- 이후 RFC 9562가 정식 발행되면서, 관련 논의가 UUIDv7 지원 중심으로 이동
제안의 수정 및 병합
- 2025년, RFC 9562가 공식화되자 PostgreSQL 18이 UUIDv7을 지원했다는 언급 등장
- 이후 Go 측에서는 crypto/rand 패키지에 UUIDv4·UUIDv7 생성 기능만 추가하는 별도 제안(#76319)을 개시
- 원 제안(#62026)은 중복(duplicate) 으로 처리되어 닫힘
API 설계 논의
-
uuid.New() 기본 동작을 v4로 둘지, 향후 변경 가능성을 둘지 논의
- 일부는 “버전 변경 시 호환성 문제가 생길 수 있다”며 항상 v4로 고정할 것을 제안
-
Compare, MustParse, Parse 등 메서드 제공 여부 논의
-
Compare는 RFC 정의에 따라 정렬 가능한 UUID 지원을 위해 필요하다는 의견
-
MustParse는 표준 내 다른 Must* 함수들과 일관성을 유지하기 위해 포함
-
IsZero() 메서드는 UUID 타입에 불필요하다는 결론
-
Generator 구조체 도입, 버전별 타입 분리(UUIDv4, UUIDv7 등) 등 다양한 설계 제안이 제시됨
- 일부는 New() 함수의 모호성을 지적하며, 명시적 버전 함수(NewV4, NewV7) 만 제공하자는 의견 제시
주요 기술 쟁점
-
UUID 정렬(sorting) 정의가 v6·v7에만 명확히 존재하는지 여부 논의
-
UUIDv7 생성 시 시간 기반 정렬 보장 및 동시성 충돌 방지(counter 방식) 구현 방법 검토
-
버전별 의미 차이(예: v1은 MAC 주소 포함, v7은 시간 기반)로 인해 단일 타입 설계의 한계 지적
- 일부는 버전별 타입 분리 및 명시적 변환 메서드(AsV4(), AsV7() 등) 도입을 제안
결론 및 현재 상태
- Go 커뮤니티는 UUID 표준 지원 필요성에는 대체로 동의
- 다만, 표준 라이브러리의 단순성 유지와 RFC 권고 준수를 위해
- 파싱 기능은 제외
-
UUIDv4·UUIDv7 생성 기능만 crypto/rand에 추가하는 방향으로 정리
- 원 제안(#62026)은 #76319 제안으로 통합되어 진행 중이며,
Go 언어의 UUID 표준 지원이 공식화 단계에 근접한 상태임