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 시스템에서 데이터 충돌을 방지하기 위해 사용된다. 특히 데이터베이스, 파일 시스템, 네트워크 통신 등에서 필수적이다.

Categories:

Updated:

Leave a comment