인조키 값: UUID vs sequential ID(Auto Increment)

이상민·2023년 4월 7일
0

배경

데이터베이스설계 과목 영화 예매 웹 서비스 프로젝트 ERD 회의 중 팀원이 인조 키 값으로 UUID를 사용하는 것을 제안했다. 인조 키 값으로 UUID를 사용할 수 있다고 처음 들어 관련 내용을 적어보고자 한다.

기본키란?

인조키를 설명하기 전에 후보키와 기본키에 대한 개념이 필요하다.

후보키란 한 릴레이션에서 투플들을 고유하게 식별할 수 있게 하는 속성(Attribute)들의 부분 집합이다. 예를 들어 학생 릴레이션에서 이름, 나이, 전화번호, 학번 속성이 존재한다면 전화번호, 학번이 후보키이다. 그리고 이러한 후보키는 기본키가 될 수 있는 후보이다.

기본키란 이러한 후 키 중에서 선택한 주키(Main key)이다. 기본키는 Null 값을 가질 수 없다는 특징이 존재한다. 대표적으로 주민등록번호, 전화번호가 존재한다.

자연키 vs 인조키

아래와 같은 속성을 가지는 회원 테이블을 만든다고 가정해보자.

이때 기본키로 어떤 속성을 사용하는게 적절할까? 전화번호 같은 경우 회원마다 고유할 수 있지만 전화 번호는 중간에 변경될 수 있다. 기본키는 최대한 변하지 않는 값(데이터)이 적절함으로 전화번호는 기본키로 적절하지 않다. 회원 ID 같은 경우 처음 생성 된 이후 변경될 일이 없으므로 기본키로 적절하다.

이처럼 비즈니스 모델에서 의미있고 자연스럽게 도출되는 기본키가 자연키이다. 비즈니스 모델에서 도출되기 때문에 단점도 존재한다. 비즈니스 규칙이 변경되는 경우 해당 속성이 변화될 가능성이 존재하기 때문에 불변이라는 특징을 가지는 기본키 성질에 따라 기본키를 변경해야 하는 참사가 발생할 수도 있다. 대표적인 예로 주민번호가 있다. 정부 정책이 변경됨에 따라 주민번호를 저장할 수 없게 되었는데 주민번호를 기본키로 설정한 테이블과 연관된 테이블을 모두 수정해야 하는 경우가 있었다.

이러한 자연키의 단점을 보완하고자 등장한 것이 인조키이다. 인조키는 키 역활을 하는 인위적 속성을 의미한다. 또한 사용자로부터 ID와 같은 키 역활을 하는 속성을 입력받지 않는 경우에도 인조키를 사용할 수 있다.

이러한 인조키에는 대표적으로 UUID(GUID)sequential ID(Auto Increment)를 사용할 수 있다.

UUID는 16바이트의 임의의 문자인 범용 고유 식별자이다. 따라서 globally unique하다고 말할 수 있다.

UUID를 기본키로 사용했을 경우 이점은 다음과 같다.

  1. 범용 고유 식별자임으로 분산 데이터베이스 환경에서 ID 값이 충돌날 경우가 없다. 분산 시스템에서 분산 데이터베이스 환경을 사용하기 때문에 분산 시스템 환경에서 적합하다고 볼 수 있다.

    분산 시스템: 여러 컴퓨터가 네트워크를 통해 연결되어 하나의 시스템처럼 동작하는 컴퓨팅 환경을 말합니다. 
     이러한 시스템은 하나의 중앙 집중적인 컴퓨터가 모든 역할을 수행하는 것과는 달리,여러 컴퓨터가 분산되어 
     연결되어 각각의 역할을 수행합니다.
  2. UUID는 임의의 문자이기 때문에 사용자에 대한 정보를 유추하기 힘들다.

  3. 가독성이 떨어진다.

단점도 존재하는데 데이터의 크기가 크기때문에 성능이 저하된다.

Auto Increment는 데이터를 insert 할때마다 키 값을 +1씩 증가시켜주는 방법이다.

장점은 다음과 같다.

  1. 가독성이 좋다.

  2. 크기가 작아 성능이 좋다.

단점도 존재하는데 +1씩 값이 증가함으로 사용자를 유추할 수 있다.

결론

이러한 UUID와 Auto Increment 특징들로 인해 시스템의 목표 및 요구 사항에 따라 적절한 방법을 선택하면 된다.

분산 시스템 환경이거나 전역 공유성이 필요한 경우 UUID가 더 적합한 반면 메모리 사용량이 제한되어 있고 SQL 쿼리 실행 성능이 중요한 경우 Auto Increment같은 sequential ID 전략이 더 적합하다.

profile
함께 성장하고 싶은 백엔드 개발자

0개의 댓글

관련 채용 정보

Powered by GraphCDN, the GraphQL CDN