UUIDv4, 정말 안전한 Primary Key일까?

by DD
5개월 전
조회수 69

UUIDv4를 Primary Key로 사용하는 것은 성능 저하를 유발할 수 있으며, 데이터베이스 종류에 따라 핫 샤딩 문제를 야기할 수 있음

정수형 PK를 사용하거나, UUIDv7과 같은 대안을 고려하여 데이터베이스 성능을 최적화해야 함

커뮤니티에서는 데이터베이스 종류에 따라 최적의 PK 선택이 달라지며, 보안을 위해 PK를 암호화하는 방법도 제시됨

UUIDv4의 성능 문제와 대안

UUIDv4는 무작위성을 위해 설계되어 정수형 PK에 비해 색인 효율성이 떨어진다. 구체적으로, 무작위 UUID는 디스크에서 페이지 폴트를 유발하여 데이터베이스 성능 저하를 초래할 수 있다. 따라서, UUIDv7과 같이 시간 기반의 UUID를 사용하거나, 정수형 PK를 사용하고 암호화하여 보안을 강화하는 방안을 고려해야 한다.

데이터베이스 종류별 PK 선택의 중요성

Postgres와 같은 전통적인 데이터베이스에서는 순차적인 PK가 성능에 유리하지만, 분산 데이터베이스에서는 핫 샤딩을 방지하기 위해 무작위 PK가 필요하다. 따라서, CockroachDBGoogle Cloud Spanner와 같은 분산 데이터베이스에서는 UUIDv4가 적합할 수 있다. 반면, MySQL과 같은 데이터베이스에서는 정수형 PK가 더 나은 선택일 수 있다.

PK 암호화를 통한 보안 강화

PK를 APIURL에 노출하는 경우, 무차별 대입 공격이나 정보 노출의 위험이 있다. 따라서, PK를 암호화하여 노출을 최소화하고, 데이터베이스 ID를 숨기는 것이 중요하다. 구체적으로, AES와 같은 암호화 알고리즘을 사용하여 PK를 암호화하고, 암호화된 값을 UUID처럼 보이게 할 수 있다. 결과적으로, 보안익명성을 동시에 확보할 수 있다.

Avoid UUIDv4 Primary Keys