데이터베이스 설계 시, 테이블의 기본 키(primary key)를 어떻게 구성할지는 시스템의 규모와 보안, 운영 효율성과 관련이깊은 중요한 선택이다. 가장 널리 사용되는 두 가지 방식은 UUID와 Auto-incrementing Key이다.
각각의 특성과 적절한 사용 사례를 비교해보고자 한다.
1. Auto-incrementing Key란?
Auto-incrementing Key는 데이터베이스가 자동으로 증가시키는 정수형 ID이다.
(예: 1, 2, 3...)
장점
- 짧고 간결한 ID로 URL이나 로그에서 보기 편함
- 연속된 값으로 인덱싱 효율이 높음
- 개발 및 디버깅 시 식별이 쉬움
단점
- 전역 고유성이 보장되지 않음
- URL 패턴을 통한 열거(enumeration) 공격에 취약함
- ID를 통해 전체 데이터 구조를 유추할 가능성이 있음
2. UUID란?
UUID(Universally Unique Identifier)는 128비트의 고유 식별자로, 일반적으로 하이픈이 포함된 36자 문자열이다.
(예: 550e8400-e29b-41d4-a716-446655440000)
장점
- 전역적으로 고유하여 충돌 가능성이 거의 없음
- 예측 불가능한 값으로 열거 공격을 방지함
- 서버나 클라이언트 등 다양한 위치에서 독립적으로 생성 가능
단점
- 문자열이 길어 가독성이 떨어짐
- 인덱스 삽입 성능이 저하될 수 있음
- 저장 공간이 더 많이 필요함 (16바이트)
3. 어떤 상황에 어떤 방식을 쓸까?
| 상황 | 추천 방식 | 이유 |
| 공개 API나 보안이 중요한 서비스 | UUID | 예측 불가능한 값으로 보안성 확보 |
| 내부 관리자용 시스템 | Auto-increment | 관리와 디버깅이 쉬움 |
| 분산 시스템, 마이크로서비스 구조 | UUID | 중앙 서버 없이 고유 ID 생성 가능 |
| 소규모 앱 또는 빠른 프로토타입 | Auto-increment | 단순하고 빠름 |
| 쓰기 성능이 중요한 대규모 시스템 | Auto-increment 또는 정렬 가능한 UUID (ULID 등) | 성능과 확장성 모두 고려 가능 |
결론
UUID와 Auto-incrementing Key는 각기 다른 특성과 장단점을 가진다.
시스템의 보안 요구, 성능, 확장성 등을 종합적으로 고려해 선택해야 한다.
- 보안성과 유연성이 중요하다면 UUID
- 성능과 단순함이 우선이라면 Auto-incrementing Key
두 방식을 병행해 사용하는 것도 좋은 전략이 될 수 있다.
예를 들어, 외부 노출용에는 UUID를, 내부 관리용에는 Auto-incrementing Key를 적용하는 식이다.
참고: UUID가 너무 길다면 ULID, KSUID, NanoID 등 대체 방식을 고려해도 좋다. 고유성을 유지하면서도 더 짧고 정렬 가능한 ID를 생성할 수 있다.
상황에 따라 유연하게 설계하는 것이 가장 좋은 선택이다.
728x90
반응형
'DataBase' 카테고리의 다른 글
| Ubuntu 18.04에서 PostgreSQL DB 백업 스케쥴러 구축하기 (0) | 2025.03.22 |
|---|---|
| DB Connection Pool (데이터베이스 연결 풀) 개념 (0) | 2025.01.25 |
| [SQL] Inner Join에서 조인 조건이 같을 시, 테이블 순서의 영향이 있을까? (0) | 2023.07.10 |
| [Database] ACID(원자성, 일관성, 고립성, 지속성) (0) | 2023.05.21 |
| [Database] UPSERT에 대해 (1) | 2022.11.15 |