유틸리티

UUID란? 고유 ID 생성 방법과 실무 활용법 정리

데이터베이스 테이블에 레코드를 추가할 때 ID를 1, 2, 3으로 순서대로 매기면 간단하다. 그런데 서버가 여러 대이거나, 외부 시스템과 데이터를 주고받아야 하면 ID가 충돌할 수 있다. UUID는 전 세계 어디서 생성해도 겹치지 않는 고유 식별자다.

UUID의 구조

UUID는 128비트 숫자를 16진수 32자리로 표현한 것이다. 하이픈으로 5개 블록으로 나뉜다.

550e8400-e29b-41d4-a716-446655440000

이 중 가장 많이 쓰이는 v4는 무작위 난수로 생성된다. 이론적으로 충돌 확률은 10억 개를 만들어도 사실상 0에 가깝다.

auto increment와 뭐가 다른가

항목auto incrementUUID
고유성 범위단일 테이블 내전 세계적으로 고유
예측 가능성다음 ID 추측 가능추측 불가
분산 시스템충돌 위험충돌 없음
크기4~8바이트16바이트
인덱스 성능빠름(순차)상대적으로 느림(랜덤)
참고 UUID가 만능은 아니다. 순차적이지 않아서 B-Tree 인덱스 성능이 떨어질 수 있고, 문자열로 저장하면 용량도 커진다. 소규모 단일 서버 프로젝트에서는 auto increment가 더 효율적이다.

UUID를 쓰는 실무 사례

  • 마이크로서비스: 서비스 간 데이터 동기화 시 ID 충돌 방지
  • API 리소스 식별: URL에 노출되는 ID를 추측 불가능하게 처리
  • 세션/토큰: 로그인 세션 ID, 비밀번호 재설정 토큰
  • 파일명: 업로드 파일의 고유 이름 생성
  • 이벤트 로깅: 분산 시스템 로그의 추적 ID

UUID 생성 방법

코드에서 직접 생성할 수도 있지만, 테스트 데이터를 만들거나 빠르게 하나 뽑아야 할 때는 UUID 생성기가 편하다. 한 번에 최대 1,000개까지 대량 생성이 되고, 하이픈 제거·중괄호·URN 등 형식도 선택할 수 있다. 결과를 텍스트 파일로 다운로드하는 기능도 있어서 테스트 데이터셋을 만들 때 유용하다.

ID 체계를 뭘로 가져갈지는 프로젝트 규모와 구조에 따라 달라진다. 다만 한 번 정하면 나중에 바꾸기 어려우니, 초기 설계 단계에서 결정하는 게 좋다.