반응형
서론
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”가 아니라
상황에 따라 더 나은 선택이 가능한 식별자 규격이다.
프로젝트 성격에 맞는 버전을 선택해서 효율적이고 깔끔한 구조를 만들자!
반응형
'Dev > ETC. Dev' 카테고리의 다른 글
| GitHub SSH 연결하기 (for Mac) (3) | 2025.04.27 |
|---|---|
| RESTful API 설계가 답일까? 기능 중심 URL로 바꾸기까지의 기록 (0) | 2025.04.13 |
| [DB] UUID를 사용한 고유한 ID 시스템의 장점과 적용 방법 (0) | 2025.03.23 |
| [Database] 고유키(Unique Key)와 주키(Primary Key)의 차이 (0) | 2025.03.15 |
| Git Branch 추가, Branch commit push, Merge (0) | 2024.10.05 |