Open skarltjr opened 2 years ago
서로 다른 두 데이터베이스를 합쳐야하는 상황에서 만약 increment PK를 사용한다면 충돌이 발생한다. UUID를 사용하는 경우 위 문제점을 보다 쉽게 풀어나갈 수 있다.
increment pk는 식별키값이 외부에 노출되기 쉬움 예를들어 api가 /user/{pk}/같은 형태라면 pk를 ++하여 모든 키를 알아갈 수 있다. 즉 고객 정보가 보다 쉽게 노출될 수 있다.
기본적으로 mysql에서 bigint는 8바이트 / UUID를 char로 처리할 때 36바이트 - 즉 메모리가 훨씬 많이 필요하다 - 줄일 수 있겠지만 그럼에도 불구하고 bigint보다 훨씬 큰 메모리가 필요하다
UUID 정렬은 굉장히 부담스럽다. 기본적으로 pk는 indexing의 대상인데 pk자체가 굉장히 무거워진다면 indexing 과정도 무겁고 이는 결국 데이터 삽입의 성능 저하를 발생 -> 이 경우 uuid를 sequencial하게 생성하면 보완해낼 수 있다
애플리케이션 내부용 키로는 increment pk를, 외부에 공개할 키로는 uuid를 사용하는 것을 권장
왜 UUID를 PK로 사용하는가?
1. 데이터베이스가 여러개인 경우 하나의 ID가 여러 데이터 베이스에서도 고유한 값일 수 있다.
2. UUID는 데이터에 대한 정보를 노출하지 않기 때문에 보안상 안전한다.
UUID는 분명히 단점이 존재한다
1. 메모리
2. ⭐️Indexing
그럼 pk로 UUID를 언제 사용해야하는가