개발일지/SPRINGBOOT

UUID vs Sequential ID: 데이터베이스 설계에서 무엇을 선택할까?

recording or reCoding 2025. 10. 24. 11:21

서론

  • 데이터베이스에서 레코드를 식별하는 ID는 설계에서 핵심적인 역할을 한다.
  • 일반적으로 사용하는 두 가지 방식: UUIDSequential ID(자동 증가형 숫자)
  • 각각의 장단점을 이해하면 성능, 보안, 확장성 측면에서 합리적인 선택이 가능하다.

1. Sequential ID

정의

  • 1, 2, 3 … 처럼 순차적으로 증가하는 숫자형 ID
  • 데이터베이스에서 흔히 AUTO_INCREMENT 또는 SERIAL로 구현

장점

  1. 읽기와 쓰기 성능 우수
    • 인덱스가 순차적이라 B-Tree 구조에서 페이지 분할(page split)이 적음
  2. 간단하고 직관적
    • 레코드 순서 확인이 쉬움
  3. 저장 공간 효율적
    • INT/ BIGINT 사용, UUID보다 2~4배 적은 공간

단점

  1. 병합과 분산 시스템에서 충돌 위험
    • 여러 DB나 마이크로서비스에서 ID를 생성하면 중복 가능성 있음
  2. 보안 취약
    • 순차적 ID는 추측 가능, 공격자에게 레코드 노출 가능
  3. 데이터 이동 시 조정 필요
    • 데이터 이관/복제 시 ID 충돌 처리 필요

2. UUID

정의

  • Universally Unique Identifier, 128비트 고유값
  • 550e8400-e29b-41d4-a716-446655440000 형태

장점

  1. 전역 고유성 보장
    • 분산 시스템, 여러 DB, 클러스터 환경에서 충돌 걱정 없음
  2. 보안적 장점
    • 레코드 추측이 어려워 데이터 노출 위험 감소
  3. 데이터 마이그레이션 자유로움
    • 다른 시스템과 병합, 이동 시 충돌 거의 없음

단점

  1. 성능 저하 가능
    • 랜덤 값이므로 B-Tree 인덱스에 삽입 시 페이지 분할 증가
  2. 공간 차지
    • 16바이트 이상, BIGINT 대비 2배 이상
  3. 가독성 낮음
    • 사람이 확인/관리하기 힘듦

3. 선택 가이드라인

상황추천 ID 타입이유
단일 DB, 단순 CRUD Sequential ID 성능과 직관성 우위
분산 시스템, 마이크로서비스 UUID 충돌 방지, 독립성 확보
보안 민감 데이터 UUID ID 추측 방지
로그, 분석 데이터 Sequential ID 정렬, 저장 효율성

4. 혼합 전략

  • Sequential + UUID Hash: 외부 공개는 UUID, 내부 DB는 sequential
  • ULID, KSUID: 시간 기반 UUID로 인덱스 충돌 최소화
  • 데이터 성격과 시스템 구조에 따라 적절히 선택

결론

  • 정답은 없다.
  • 성능, 분산, 보안, 가독성 요구사항을 모두 고려해야 한다.
  • 설계 초기부터 ID 전략을 정의하지 않으면 나중에 바꾸기 힘들다.