UUID vs INT
❓ PK를 INT로 해야할지 UUID로 해야할지?
먼저, INT의 범위는 2,147,483,647(4byte)까지 가능하다.
다만 추후 장기적으로 보았을 때 UUID나 nano id를 사용하는 것이 나을지 의문이다.
UUID
장점
- 독립적이다.
- 어떠한 환경에서도 uuid 생성 함수 등을 이용해 사용이 가능하다.
- 보안상 안전하다.
- int의 경우 path로 노출될 때 정보가 쉽게 파악가능해지게 된다.
- 경쟁사에서 고객 수 파악
- 크롤링
- 인젝션 공격 취약
- int의 경우 path로 노출될 때 정보가 쉽게 파악가능해지게 된다.
단점
- 길어서 상대적으로 성능 저하
- 저장공간을 많이 차지한다.
- 사람이 보기 힘들다.
- 정렬이 불가능하다.
INT
장점
- 사람이 파악하기 쉽다.
- 상대적으로 빠르고 가볍다.
단점
- 분산 시스템에서 부적합
- 서버 A, 서버 B가 나뉘었을 때 서버 A에 있는 ID가 서버 B에도 있을 수 있다.
결론
💡 내부에선 auto increment int 외부에선 uuid 사용
(단, 오버 엔지니어링, 관리 포인트 증가 초래…?)
일반적인 경우 id로 orderBy할 case는 거의 없을 것으로 판단된다면 uuid
따라서 장기적으로 운영을 하였을 때를 대비하여 uuid가 조금 더 나은 선택지가 아닐까 생각된다.
UUID or GUID as Primary Keys? Be Careful!
Best practices on primary key, auto-increment, and UUID in SQL databases