# 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
'Programming' 카테고리의 다른 글
JSON 뜯어보기 (Feat.JSON.stringify, JSON.parse) (0) | 2023.02.13 |
---|---|
디버깅 짚고 넘어가기 (Feat. VS Code에서 디버깅하기) (0) | 2023.02.03 |
OAuth 학습 정리 (0) | 2022.04.25 |
220408 Learn Webpack (0) | 2022.04.08 |