포스트

uuid 라이브러리 버전별 특징

안녕하세요 🐸

사용자에게 각각의 고유한 값을 할당하기 위해 UUID 가 많이 사용됩니다.

이번에는 UUID 생성을 돕는 라이브러리 uuid 에 대해 알아보고 버전별 특징을 정리해보겠습니다.


UUID란

Universally Unique Identifier 의 약자. 세상에서 유일한 식별자입니다.
이는 주로 사용자에게 고유한 값을 할당할 때 사용합니다.


uuid 라이브러리

이러한 중복되지 않는 난수를 개발자가 직접 생성하기는 매우 어렵습니다.
그리고 상황에 맞게 필요한 난수의 유형도 다릅니다.
uuid 라이브러리에서는 난수를 생성하고 버전별로 각각의 특징도 다르기 때문에 필요에 맞는 버전을 알맞게 사용할 수 있도록 돕는 라이브러리 입니다.
각각의 버전은 전부 RFC에서 정의한 버전을 구현했습니다.

v1

v1은 MAC 주소와 타임스탬프를 이용하여 생성합니다.
언제 어디서 생성되었는지를 추적할 수 있습니다.
하지만 이 점은 보안 취약점으로도 작용할 수 있습니다.
v6와 동일하지만 v1에서 타임스탬프는 UUID 중간에 위치하여 인덱싱에 불리합니다.
이 때문에 v1을 v6로 변환하는 함수가 라이브러리 내에 있습니다.

v2

라이브러리에서는 제공하지 않는 버전 입니다.
하지만 RFC 에서 정의한 내용을 참고해보면 v1 UUID에 POSIX UID(사용자 ID), GID(그룹 ID) 를 사용합니다. DCE 환경에서 사용하도록 설계 되어 있습니다.
현재는 거의 사용되지 않는 버전입니다.

v3

네임스페이스를 이용하고 MD5 해시 방법을 통해 생성하는 버전입니다.
해시 방법의 특징으로 입력값이 같다면 출력도 같습니다. 호환성 이슈만 없다면 버전5를 사용하는 권장하는 버전 입니다.
MD5는 취약점이 발견된 방법이기 때문입니다.

v4

현재 가장 많이 사용하는 방법입니다.
122비트의 완전 난수를 통해 UUID를 생성합니다.
보안성이 뛰어납니다.

v5

v3과 유사하지만 SHA-1 해시 알고리즘을 사용합니다.
v3의 MD5보다 보안은 강화되었지만 해시 방법이라서 동일한 입력값에 대해서는 동일한 출력을 생성합니다.

v6

v1와 동일하게 타임스탬프를 기반한 방법입니다.
하지만 v6는 타임스탬프가 앞쪽에 위치하여 인덱싱에 더 유리합니다.

v7

난수와 타임스탬프를 사용하는 방법입니다.
난수를 통해 랜덤하게 생성되면서도 타임스탬프를 통해 인덱싱에도 유리합니다.
하지만 타임스탬프 기반의 UUID 특징 상 생성 시간을 유출할 수 있습니다.

요약표

버전설명특이사항
v1시간+MAC주소 기반타임스탬프가 중간에 위치하여 인덱싱에 불리
v2DCE 환경에 사용하도록 설계거의 사용하지 않음
v3네임스페이스+MD5 해시 사용MD5의 보안취약점으로 인해 v5 사용 권장
v4122비트의 난수 사용가장 많이 사용하는 방법
v5네임스페이스+SHA-1 해시 사용v3의 개선
v6시간+MAC주소 기반v1의 개선 버전.
타임스탬프가 앞에 위치하여 인덱싱에 유리
v7난수+시간 기반고유성이 높고 인덱싱에 유리

참조 : https://www.npmjs.com/package/uuid 참조 UUID v2 : https://datatracker.ietf.org/doc/html/rfc4122

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.