도메인 서비스를 개발하면서 id 채번 방식을 고민한 적이 있었다. 개인 프로젝트를 할 땐 auto generation 옵션으로 순번으로 생성되는 것을 너무 당연하게 생각했었다. 회사에서 다양한 케이스들을 접하면서 도메인 서비스에서 자동 채번으로 데이터가 쌓이기 시작할 때 다양한 문제가 생길 수 있다는 걸 알게 됐다. pk 생성 규칙을 정하기까지 다양한 옵션들을 탐구해보면서 고민했던 과정을 기록해보았다.
@GeneratedValue
부터 멱등성 보장 규칙에 이르기까지 한 마디로 삽질의 기록이다. 하지만 해당 프로젝트를 하면서 정말 혼자했더라면 생각해보지도 못했을 것들을 많이 접하게 돼서 여러 배움 중에서도 인상 깊은 배움이었다.
초기 PK를 생성해야 하는 일에서도 고민을 하지 않았던 것은 아니다. 나름대로 'PK는 어떠해야 한다'는 것을 다음과 같이 생각했었다. 아래는 PK라면 으레 가져야할 당연한 속성들이다.
Uniqueness
: PK
는 유일성이 있어야 한다.Stability
: PK
는 변경되면 안 된다.Irreducibility
: 복합키를 사용하지 않는 이유는 복합키 중 하나가 변경될 경우 PK
유일성이 깨질 수 있기 때문이다.Simplicity
: PK
는 간단하고 이해하기 쉬워야 한다.