UUID
개념
UUID(Universally Unique Identifier)는 전 세계적으로 유일한 식별자를 생성하기 위한 표준이다. 컴퓨터 시스템이나 네트워크에서 특정 객체나 데이터를 고유하게 식별하기 위해 만들어진 “고유 코드”라고 생각하면 된다.
UUID는 일반적으로 32개의 문자와 4개의 하이픈(-)으로 구성된 36자 길이의 문자열이다. 예를 들어:
123e4567-e89b-12d3-a456-426614174000
이 코드는 특정 규칙에 따라 자동으로 생성되며, 전 세계적으로 중복될 가능성이 매우 낮다.
버전
UUID는 생성되는 알고리즘에 따라 여러 버전이 존재한다.
| 버전 | 생성 방식 | 특징 |
|---|---|---|
| Version 1 | 시간 + MAC 주소 | 생성 시간과 기기의 물리적 주소를 조합한다. 시간순 정렬이 가능하지만 기기 정보가 노출되는 보안 문제가 있다. |
| Version 4 | 난수 (Random) | 현재 가장 널리 쓰이는 표준이다. 완전한 무작위 난수를 기반으로 생성되어 기기 정보 노출 없이 안전하게 사용할 수 있다. |
| Version 7 | 타임스탬프 + 난수 | 최근 새롭게 표준화된 방식(RFC 9562)이다. 시간에 따라 순차적 정렬이 가능해 데이터베이스 인덱싱 성능이 뛰어나며, Version 1의 보안 문제도 해결한다. |
활용처
- 분산 데이터베이스 및 MSA 고유 키: 여러 대의 서버로 구성된 데이터베이스(예: Cassandra, MongoDB 등)나 마이크로서비스(MSA) 환경에서는
1, 2, 3...식의 순차적인 숫자 ID(Auto Increment)를 쓰면 서버 간에 번호가 겹칠 위험이 있다. UUID를 기본 키(Primary Key)로 사용하면 여러 서버가 동시에 데이터를 생성해도 충돌하지 않는다. - 파일 업로드 및 저장 (덮어쓰기 방지): 수만 명의 사용자가 동시에
profile.jpg라는 같은 이름의 이미지를 서버에 업로드할 때, 원본 파일명 대신 UUID를 파일명으로 변환하여 저장하면 파일이 덮어씌워지는 문제를 차단할 수 있다. - 세션 ID 및 보안 토큰: UUID Version 4는 예측이 불가능한 난수이다. 따라서 사용자의 로그인 세션 ID, 비밀번호 재설정 링크의 고유 토큰, 비회원 장바구니 식별자 등으로 사용하면 외부에서 다음 번호를 추측하여 해킹하는 것을 막을 수 있다.
- 분산 트레이싱 (Trace ID): 하나의 사용자 요청이 여러 개의 API 서버를 거쳐 처리될 때, 요청의 맨 처음 단계에서 UUID를 하나 발급(Trace ID)하여 계속 넘겨주면, 나중에 로그를 분석할 때 이 요청이 어떤 서버들을 거쳐갔는지 하나의 흐름으로 추적할 수 있다.
UUID의 장점
- 고유성
- 고유한 값을 보장한다.
- 분산 환경 지원
- 중앙 서버 없이도 여러 시스템에서 고유한 ID를 생성할 수 있다.
- 사용 간편성
- 별도의 복잡한 설정 없이 쉽게 생성이 가능하다.
Python에서 UUID 생성
Python에서 UUID를 생성하려면 다음과 같이 작성할 수 있다
import uuid
# 랜덤 UUID 생성
random_uuid = uuid.uuid4()
print(random_uuid)
출력 예:
f47ac10b-58cc-4372-a567-0e02b2c3d479
정리
UUID는 고유성을 보장하는 식별자로, 다양한 IT 시스템에서 데이터 충돌을 방지하기 위해 사용된다. 특히 데이터베이스, 파일 시스템, 네트워크 통신 등에서 필수적이다.
Leave a comment