목록으로
유틸리티

UUID 가이드: 개발자가 반드시 알아야 할 5가지 핵심 정리

데이터베이스를 설계하거나 분산 시스템을 다루다 보면 서로 겹치지 않는 고유 식별자가 필요한 순간이 반드시 찾아옵니다. 이 UUID 가이드에서는 UUID가 정확히 무엇인지부터 버전별 차이, 실무에서 언제 써야 하는지, 그리고 놓치기 쉬운 주의점까지 차근차근 정리합니다. 개념만 아는 수준을 넘어 실제 프로젝트에서 자신 있게 선택할 수 있도록 돕는 것이 목표입니다.

UUID란 무엇이고 왜 쓸까

UUID는 Universally Unique Identifier의 약자로, 128비트 크기의 고유 식별자입니다. 별도의 중앙 관리 서버 없이도 전 세계적으로 중복될 가능성이 극히 낮은 값을 생성할 수 있다는 점이 핵심입니다. 일반적으로 550e8400-e29b-41d4-a716-446655440000처럼 8-4-4-4-12 자리로 나뉜 36자 문자열(하이픈 포함)로 표현합니다.

기존에 많이 쓰던 자동 증가(auto increment) 정수 ID는 하나의 데이터베이스 안에서는 편리하고 가볍습니다. 하지만 여러 서버나 마이크로서비스가 동시에 ID를 발급해야 하는 상황이 되면 값이 충돌하기 쉽습니다. UUID는 각 노드가 독립적으로 생성해도 서로 겹치지 않기 때문에 분산 환경, 오프라인 우선 앱, 데이터 병합 같은 시나리오에서 특히 강점을 가집니다.

참고: UUID는 128비트이므로 이론상 약 3.4 × 10의 38제곱 개의 값을 표현할 수 있습니다. 매초 10억 개씩 생성하더라도 실제로 중복이 나타나기까지는 수십 년 이상이 걸릴 만큼 충돌 확률이 낮습니다.

UUID 버전별 차이 한눈에 보기

UUID는 생성 방식에 따라 여러 버전으로 나뉩니다. 실무에서 가장 자주 마주치는 것은 v1, v4, 그리고 비교적 최근 표준에 추가된 v7입니다. 각 버전은 생성 근거와 정렬 특성이 다르므로 용도에 맞게 골라야 합니다.

버전생성 방식정렬 가능주요 용도
v1타임스탬프 + MAC 주소부분적순서가 중요한 레거시 시스템
v4완전한 무작위 값불가가장 널리 쓰이는 범용 식별자
v7유닉스 타임스탬프 + 무작위가능DB 기본 키, 인덱스 성능 중시

버전을 고를 때 참고할 만한 기준을 간단히 정리하면 다음과 같습니다.

  • 보안과 예측 불가능성이 중요하다면 무작위성이 가장 높은 v4가 무난합니다.
  • 생성 시간순 정렬이 필요하다면 시간 정보를 앞쪽에 담는 v7이 유리합니다.
  • MAC 주소 노출이 부담스럽다면 v1은 피하는 편이 안전합니다.
팁: 데이터베이스 기본 키로 UUID를 쓸 계획이라면 무작위인 v4보다 시간순으로 정렬되는 v7을 고려해 보세요. v4는 인덱스에 값이 흩어져 저장되면서 페이지 분할이 자주 일어나 쓰기 성능이 떨어질 수 있는데, v7은 시간 기반이라 인덱스가 순차적으로 쌓여 성능 저하를 줄여 줍니다.

버전이 여러 개라 매번 형식을 맞춰 손으로 만들거나 코드를 반복 실행하기 번거롭다면, 웹 기반 UUID 생성기를 사용해 원하는 버전의 값을 즉시 복사해 쓰면 테스트나 문서 작성이 한결 수월해집니다.

UUID를 언제 써야 할까

UUID가 항상 정답은 아닙니다. 상황에 따라 정수 ID가 더 나을 때도 많습니다. 아래와 같은 경우라면 UUID 도입을 적극적으로 검토할 만합니다.

  1. 여러 서버에서 동시에 ID를 발급해야 하고, 중앙 조율 없이 충돌을 피해야 할 때입니다.
  2. ID를 URL이나 API에 노출해야 하는데, 순차 정수처럼 다음 값을 쉽게 추측당하면 곤란할 때입니다.
  3. 오프라인에서 먼저 데이터를 만들고 나중에 서버와 동기화해야 하는 모바일 앱 환경일 때입니다.
  4. 서로 다른 데이터베이스를 병합할 가능성이 있어 ID 재할당을 피하고 싶을 때입니다.
식별자 설계는 나중에 바꾸기 가장 어려운 결정 중 하나입니다. 규모가 커지기 전에 UUID 도입 여부를 미리 판단해 두는 편이 훨씬 유리합니다.

사용 전 반드시 확인할 주의사항

UUID는 편리하지만 무조건 좋기만 한 것은 아닙니다. 도입 전에 아래 특성을 반드시 이해하고 넘어가야 예상치 못한 성능 문제를 막을 수 있습니다.

주의: UUID는 정수 ID보다 저장 공간을 더 차지합니다. 문자열로 보관하면 36바이트에 이르지만, 데이터베이스가 지원하는 이진(binary 16) 형식으로 저장하면 16바이트로 줄일 수 있습니다. 대량 데이터에서는 이 차이가 인덱스 크기와 조회 속도에 큰 영향을 주므로 저장 형식을 반드시 확인하세요.

또한 v4처럼 완전히 무작위인 UUID를 정렬된 인덱스가 필요한 곳에 그대로 쓰면 쓰기 성능이 떨어질 수 있습니다. 이럴 때는 v7을 쓰거나, 시간 정보를 별도 컬럼으로 두어 정렬 기준을 확보하는 방법을 함께 고려하는 것이 좋습니다.

마지막으로 UUID가 사람이 읽거나 외우기에는 전혀 친화적이지 않다는 점도 기억해야 합니다. 고객 응대용 주문번호나 사용자에게 직접 보여 주는 코드에는 UUID 대신 짧고 읽기 쉬운 별도 식별자를 병행해 두면 운영이 훨씬 편해집니다.

자동차 수리가 필요하신가요?

대전 사고차 수리 전문 - 남대전자동차공업사

무료 견적받기