Auto Increment의 문제점
auto increment란?
db에서 기본키를 생성하기 위한 전략이다.(인조키) insert할 때마다 키를 1씩 증가시켜준다.
별 다른 고민 없이 사용하던 auto increment를 사용해 인조키를 만들어 PK로 사용하곤 했었는데 그 문제점을 말해보려고 한다.
auto increment 의 문제점
분산형 시스템에서의 문제
규모가 작아서 단일 서버와 단일 DB로 구성된 경우가 아닌 여러개의 웹서버와 WAS가 여러개의 데이터베이스로 구성된 분산형 시스템의 경우 문제가 생길 수 있다.
데이터베이스들 간에 동기화가 되어 있지 않은 경우 같은 id를 생성할 수 있다.
-> duplicate key가 발생하여 데이터 일관성에 문제가 생긴다.
키를 채번하기 쉽다
auto increment 전략은 키를 채번하기 쉽다. 즉 키를 수집하기 쉽다는 뜻이다.
1 부터 차례대로 증가하는 id 값으로 인해 어느 id가 존재하는지 예측할 수 있으며 이를 통해 악용될 수 있다.
예를 들어 api사용에 있어 이를 path parameter 등으로 사용할 경우 id 값만 살짝 바뀌어 올바르지 않은 접근을 쉽게 요청할 수 있다는 것이다.
반대로 UUID 처럼 고유한 키를 사용할경우 해당 키를 유추해내는 것에서부터가 어려운 일이 된다.
auto increment vs UUID
좀 더 고유하고 분산시스템에서도 유일성을 보장할 수 있는 인조키 생성 방식으로 UUID
가 있다. 물론 UUID를 사용하는 방식에도 여러가지 단점이 있다. UUID#UUID PK 참고