skarltjr / Memory_Write_Record

나의 모든 학습 기록
0 stars 0 forks source link

Pk와 UUID #124

Open skarltjr opened 2 years ago

skarltjr commented 2 years ago

왜 UUID를 PK로 사용하는가?

1. 데이터베이스가 여러개인 경우 하나의 ID가 여러 데이터 베이스에서도 고유한 값일 수 있다.

서로 다른 두 데이터베이스를 합쳐야하는 상황에서 만약 increment PK를 사용한다면 충돌이 발생한다.
UUID를 사용하는 경우 위 문제점을 보다 쉽게 풀어나갈 수 있다.

2. UUID는 데이터에 대한 정보를 노출하지 않기 때문에 보안상 안전한다.

increment pk는 식별키값이 외부에 노출되기 쉬움
예를들어 api가 /user/{pk}/같은 형태라면 pk를 ++하여 모든 키를 알아갈 수 있다.
즉 고객 정보가 보다 쉽게 노출될 수 있다.

UUID는 분명히 단점이 존재한다

1. 메모리

기본적으로 mysql에서 bigint는 8바이트 / UUID를 char로 처리할 때 36바이트
- 즉 메모리가 훨씬 많이 필요하다
- 줄일 수 있겠지만 그럼에도 불구하고 bigint보다 훨씬 큰 메모리가 필요하다

2. ⭐️Indexing

UUID 정렬은 굉장히 부담스럽다.

기본적으로 pk는 indexing의 대상인데
pk자체가 굉장히 무거워진다면 indexing 과정도 무겁고 이는 결국 데이터 삽입의 성능 저하를 발생

-> 이 경우 uuid를 sequencial하게 생성하면 보완해낼 수 있다

그럼 pk로 UUID를 언제 사용해야하는가

애플리케이션 내부용 키로는 increment pk를, 외부에 공개할 키로는 uuid를 사용하는 것을 권장