유틸리티

UUID란? 개발에서 고유 ID가 필요한 이유와 생성법

회원 테이블에 기본키를 뭘로 잡을지 고민하다가, 선배 개발자가 "UUID 쓰면 돼"라고 했다. 자동 증가 정수(AUTO_INCREMENT)를 쓰면 안 되나 싶었는데, 분산 환경에서는 사정이 다르다.

UUID가 뭔가

UUID(Universally Unique Identifier)는 128비트 길이의 고유 식별자다. 형태는 이렇게 생겼다.

550e8400-e29b-41d4-a716-446655440000

16진수 32자를 하이픈으로 구분한 구조다. 전 세계 어디서 생성하든 겹칠 확률이 사실상 0에 가깝다. 조합 가능한 수가 약 3.4 × 10³⁸개이기 때문이다.

자동 증가 정수 대신 UUID를 쓰는 이유

비교 항목AUTO_INCREMENTUUID
고유성 범위단일 DB 내에서만전 세계적으로 고유
예측 가능성순차적 (다음 ID 추측 가능)랜덤 (추측 불가)
분산 환경서버 간 충돌 위험충돌 없음
크기4~8바이트16바이트
가독성짧고 간결길고 복잡

마이크로서비스 아키텍처에서 여러 서버가 동시에 데이터를 생성하면 AUTO_INCREMENT로는 충돌이 생긴다. UUID는 중앙 서버 없이도 각 서버에서 독립적으로 생성해도 겹치지 않는다.

UUID 버전별 차이

v1 (시간 기반)
현재 시각과 MAC 주소를 조합한다. 생성 시각을 역추적할 수 있어 프라이버시 문제가 있다.
v4 (랜덤)
122비트를 순수 난수로 채운다. 가장 널리 쓰이는 버전이다. 시간이나 기기 정보가 포함되지 않는다.
v5 (이름 기반)
네임스페이스와 이름을 SHA-1 해시해서 만든다. 같은 입력이면 항상 같은 UUID가 나온다.
v7 (시간 정렬형)
2024년 표준화된 최신 버전. 시간 정보를 포함하면서 정렬도 가능하다. 데이터베이스 인덱스 효율이 v4보다 좋다.

바로 생성하기

UUID 생성기에서 버튼 하나로 v4 UUID를 뽑을 수 있다. 최대 1,000개까지 한번에 대량 생성도 가능하고, 하이픈 제거, 대문자 변환, 중괄호 감싸기 같은 포맷 옵션도 지원한다. 테스트 데이터를 만들 때 한꺼번에 뽑아서 텍스트 파일로 다운로드하면 편하다.

실무에서 주의할 점

  • 인덱스 성능 — UUID v4는 완전 랜덤이라 B-tree 인덱스에서 비효율적이다. 대용량 DB에서는 v7이나 ULID를 고려할 것.
  • URL에 노출/users/550e8400-e29b-41d4... 형태의 URL은 길지만, 순차 정수보다 보안 면에서 유리하다. 다음 사용자 ID를 추측해서 접근하는 공격을 막을 수 있다.
  • 저장 공간 — UUID는 16바이트다. 정수(4바이트)보다 크지만, 현대 시스템에서 이 차이가 문제가 되는 경우는 드물다.

고유 ID는 시스템의 기본 중 기본이다. 규모가 작은 프로젝트에서는 정수로 충분하지만, 확장 가능성을 열어두고 싶다면 처음부터 UUID를 쓰는 게 나중에 덜 고생한다.