The journey to becoming a developer

My future is created by what I do today, not tomorrow.

Programming

UUID: Universally Unique Identifier

Millie 2022. 5. 6. 00:23

# UUID란?

소프트웨어를 개발할 때는 다양한 형태의 식별자가 필요하다.

식별자를 만들 때 가장 범용적으로 사용하는 것이 범용 고유 식별자(UUID)이다. 

이것은 컴퓨터 시스템 내에서 고유한 객체를 식별하기 위해 사용되는 값이다. 

UUID는 네트워크상에 존재하는 여러 컴퓨터를 식별하기 위해 사용되기 시작했다. 

 

# UUID의 구조

  • 하이픈(-) 4개와 16진수 32개로 구성되어 있다. 
  • 8-4-4-4-12 구조를 유지한다. 
  • 하이픈은 UUID 값을 읽기 편하게 추가한 구분자로서 생략하는 경우도 많다. 
  • UUID 값을 저장할 때는 하이픈을 제외한 16진수만 저장한다. 
  • 16진수 하나를 표현하는 데 4비트(0.5byte)가 필요하다.
    • UUID 개수는 32개이므로 32 x 4 = 128bit, 총 16byte가 필요하다.
  • UUID는 32개의 16진수 모두 무작위로 만들기 때문에 같은 UUID를 만들 가능성이 매우 낮다. 
    • 그래서 같은 값이 있으면 안 되는 고유 식별자를 만들 때 사용하기 좋다. 
  • 많은 식별자가 필요하지 않을 때는 일부 값만 랜덤하게 생성해서 사용하고 나머지는 고정된 값을 사용하여 식별자로 쓰는 경우가 많다. 

 

# UUID 버전

  • UUID는 버전(또는 type)별로 사용 방법과 규칙이 다르다. 
  • 오늘날 대부분 시스템은 버전 4 UUID나 이를 기반으로 직접 정의한 UUID를 사용하고 다른 버전은 거의 사용하지 않는다. 
    • 버전 4 UUID의 경우 버전을 표기하는 4bit를 제외한 나머지 122bit을 모두 무작위로 생성한다. 

 

# 실 사용 예

## 작업 식별자

- 하나의 큰 작업을 여러 작업으로 나눠야 할 때, 각 작업의 진행 상태를 추적할 식별자(작업 ID)

- 서비스를 이용하는 사용자를 구분하기 위한 식별자(user ID) 

- 웹 서버가 클라이언트가 연속적인 요청을 보낸 것인지 새 요청을 보낸 것인지 구분하기 위한 식별자(세션 ID)

- 게임 아이템의 생성 및 거래나 파괴, 몬스터 생성과 사망과 같이 프로그램 내에서 만들고 사용하는 객체의 생명 주기를 관리하는 식별자(오브젝트 ID)

 

## 고정된 값을 포함한 UUID

  • 고정된 값을 사용해 충돌했을 때 어떤 문제가 생길 수 있는지 검토하고 대비하는 것이 좋다. 
    • 충돌 발생 시 UUID 재생성
    • 충돌해도 문제 없는 해시 기반 자료구조 사용 

 

# UUID의 문제점

  • 16byte를 필요로 한다는 것
    • 게시판에 글 번호 추가 시 UUID가 아니라 auto increment를 사용한다면 4byte만 필요하다. 
    • 데이터베이스의 key로 UUID를 사용한다면 4byte를 사용하는 식별자보다 검색, 추가, 삭제 속도가 느릴 수 있다.
  • 식별자로 사용 시 정보 식별이 어렵다는 것
    • UUID는 무작위로 생성된 글자 32개를 사용하기 때문에 구체적인 내용을 알기가 어렵다. 

 

Reference

 

학교에서 알려주지 않는 17가지 실무 개발 기술 - YES24

빠르게 성장하는 개발자가 되려면 반드시 알아야 할 핵심 기술 17가지!실무에 필요한 지식은 너무나 광범위해서 학교에서 배운 내용만으로는 부족하다. `학교에서 이런 것도 안 배웠어?`에 당황

www.yes24.com

 

What is a UUID?

The challenge of identifying data shared between systems dates back to the advent of networked computing. One of the earliest solutions to this problem, the Universally Unique Identifier (UUID), is still in wide use today. Here, we’ll explore this ever-p

www.mparticle.com