본문 바로가기

UUID 버전별 차이와 사용법 정리

@Jeeqong 2025. 4. 9. 00:40
반응형

서론

UUID는 전 세계 어디서든 고유한 값을 만들기 위한 식별자다.

FastAPI나 Django 같은 백엔드 프레임워크에서도 자주 사용된다.


본문

UUID란?

UUID (Universally Unique Identifier)

중복되지 않는 ID 값을 만들기 위한 표준 규격

문자열처럼 생겼지만 실제로는 고정된 128비트 값

 

예시:

e9db2b88-d246-4db5-a74c-d1cfc9f2d6be

UUID 버전별 차이

버전  이름 생성방식 특징
uuid1() 시간 기반 현재 시간 + MAC 주소 순서 보장, 시간 노출 가능성
uuid3() 이름 기반 (MD5) 고정된 이름 + 네임스페이스 → 해시 같은 입력 → 같은 UUID
uuid4() 무작위 기반 랜덤 값 가장 많이 사용됨
uuid5() 이름 기반 (SHA-1) uuid3과 동일, 해시 알고리즘만 다름 보안성 ↑

언제 어떤 UUID 버전을 써야 할까?

상황 추천  버전  이유
일반 서비스 ID uuid4() 랜덤 기반으로 충돌 확률 낮고, 추적 어려움
생성 순서를 보장하고 싶을 때 uuid1() 시간 기반으로 정렬에 유리
동일한 입력값에 대해 고정된 ID를 만들고 싶을 때 uuid5() or uuid3() 해시 기반으로 항상 같은 값 생성

Python 코드 예제

import uuid

print(uuid.uuid1())  # 시간 + MAC 주소 기반
print(uuid.uuid4())  # 무작위 기반

실무에서의 적용 예시

  • uuid4()
    • 대부분의 사용자 ID, 게시물 ID 등에 사용됨
    • 충돌 방지 + 랜덤 ID
  • uuid1()
    • 시간 순으로 정렬이 중요한 경우 사용
    • 예: 로그 트래킹, 공구 일정 ID 등

FastAPI + SQLAlchemy에서 UUID 사용하기

from sqlalchemy.dialects.postgresql import UUID
from uuid import uuid4

id = Column(UUID(as_uuid=True), primary_key=True, default=uuid4)
  • as_uuid=True를 지정하면 Python 객체에서도 UUID 타입으로 다룰 수 있다.
  • 기본값으로 uuid4() 또는 uuid1() 설정 가능

개발 팁

  • uuid1()은 생성 순서가 필요할 때만 사용하자.
  • uuid4()는 거의 모든 케이스에 안전한 선택이다.
  • PostgreSQL에서도 UUID 타입을 기본 지원하므로, ID 필드로 쓰기에 적합하다.

마무리

UUID는 단순히 “랜덤 ID”가 아니라

상황에 따라 더 나은 선택이 가능한 식별자 규격이다.

프로젝트 성격에 맞는 버전을 선택해서 효율적이고 깔끔한 구조를 만들자!

반응형
Jeeqong
@Jeeqong :: JQVAULT

Jeeqong's vault : 정보/기록을 쌓아두는 공간 웹개발 포스팅 일상 리뷰를 기록하는 공간입니다.

공감하셨다면 ❤️ 구독도 환영합니다! 🤗

목차