인공키 vs 자연키

Pyro·2022년 5월 17일
0
post-thumbnail

인조키 vs 자연키

인조키와 자연키에 대해 매우 흥미로운 테스트를 읽었다. 요약을 하면, 백만건 정도의 테스트에서 UUID 키와 Auto Increment 키 사이의 성능 차이가 없었다는 글이다. UUID 가 성능상에 문제가 되지 않는다면, 적당한 길이의 자연키 또한 성능상의 큰 문제가 되지 않을 터이다. 요즘 ORM 의 강세로, 자연키보다는 인조키를 사용하는 추세라고 하는데, 인조키처럼 의미없는 값을 키로 사용할 경우, 필요한 ID 값을 의미론적으로 추측하기 어려운 단점이 있다.

로치가 언급한 인조키와 자연키 사이의 대립을 보고 있으니, 집합론을 공부하던 시절에 Natural Number 와 Ordinal Number 를 가지고 룸메이트들이 밤새워 말싸움을 했던게 기억이 났다. 당시에는 잠을 못자게 방해하는 룸메이트들이 짜증났는데, 그 때의 썰을 글로 풀어보고자 한다.

숫자란 대체 무엇인가?

히어로즈 오브 더 스☆톰♚♚히오스10판시$$경찰디바100%증정※

수학과 새내기들은 저마다의 꿈을 품고서 대학에 입학한다. 그리고 그런 그들이 1학년 집합론 수업에서 반년동안 코피 터지게 배우게 되는 것이 "숫자를 세는 일"이다. 숫자를 센다는 행위란 DB 의 레코드에 "키"를 부여하는 행동이다. 숫자를 세는 가장 간단한 방법은 손가락을 쓰는 것이다. 손가락을 1개 펴면 숫자 1을 셀 수 있고, 7개를 펴면 숫자 7을 셀 수 있다. 즉 첫번째 레코드에는 왼손 엄지를 키로 할당하고, 열번째 레코드에는 오른손 엄지를 키로 할당할 수 있다. 다만 레코드의 갯수가 10을 넘어가면 문제가 생긴다. 키로 할당할 수 있는 손가락이 부족하게 되는 것이다!

이를 해결하기 1학년 병아리들은 발가락을 사용한다거나, 손가락 여러개를 조합한다는 해결책을 제시하곤 한다. 교수님이 내주신 과제를 해결하기 위해 온몸으로 숫자를 표현하는 갖가지 쌩쇼를 하다보면, 수학과 학생들은 이 모든게 뻘짓이라는 깨달음을 얻게 된다. 왜냐면 문제의 핵심이 10 이라는 숫자가 아니라, 만들 수 있는 "키" 라는 자원이 유한하다는 데에 있기 때문이다.

인간의 사고가 사실 이분법적이고 유한한 정보만을 인지할 수 있는데 비해, 현실의 세상은 연속적이고 무한하다는 것을 깨닫게 된 순간, 학생들은 절망감을 느낀다. 10개 밖에 없는 손가락으로 대체 무얼 할 수 있단 말인가? 여기서 폰 노이만은 Successor 라는 천재적인 해결책을 내놓는다.

폰 노이만이 보기에 무한한 숫자를 표현하는데는 손가락 10개가 아니라, 0개로도 충분하다. 그리고 아래는 아무것도 없음을 뜻하는 "공집합" 만으로, Successor 를 통해 숫자들을 정의해 나가는 모습이다. 그리고 아래와 같은 숫자들을 Ordinal Number 라고 부른다.

0	=1	= {}
2	= {, {} }
3	= {, {} , {,{}} }
4	= {, {} , {,{}}, {,{},{,{}}} }

모든 숫자가 사실 공집합이다 라는 주장은, 숫자를 신성시하고 숭배하는 몇몇 수학자들에게 극렬한 반발감을 불러일으켰다. 수학을 사랑하는 사람들에게, 숫자는 만물의 중심이며 이데아이기 때문이다. 숫자가 선행해서 존재하고, 숫자를 통해 세계가 설계되었다고 믿는 사람들에게, 숫자가 사실 공집합이었다는 주장은 "신은 죽었다"와 같은 충격을 주는 주장이었다. (바로 이 부분 때문에, 룸메이트들이 서로 멱살을 잡고 싸웠던 것이다. 대체 그들은 왜 그랬을까... 그래봤자 취업도 안되는데)

그러나 비어있는 것처럼 보이는 공집합은, 사실 모든 타입의 데이터와 호환되는 궁극의 추상화이기도 하다 (Java 프로그램에서 null 은 모든 객체 타입에 할당할 수 있는 값이라는 점을 생각해보라). 즉 위의 정의에서 ∅ 는 우리가 원하는 그 어떤 타입의 값으로도 치환을 할 수 있다. DB 에서 Natural Key 를 만드는 행위란, 결국 공집합 대신에 의미있는 데이터의 값으로 Ordinal Number 들을 만드는 행위이다. 다시 말해 DB 의 자연키(Natural Key) 란 Ordinal Number 이다.

반면 피타고라스처럼 숫자를 신성시하고, 모든 만물에 선행한다고 믿는 사람들은 아직도 존재한다. 이 사람들이 보기에 Ordinal Number 란, 그 무엇보다도 인위적인 부자연스러운 악마이다. 그렇기에 수학자들은 기존의 1부터 시작하는 숫자들을 Natural Number 라고 부른다. DB 에서 Auto Increment 를 통해 증가하는 키가 바로 Natural Number 이다. 즉, DB 의 인조키(Artificial Key) 가 수학의 자연수(Natural Number) 이다.

요약

DB 에서는 인조키를 자연스럽지 못하다며 자연키에 집착하시는 분들이 있으신다. 반면 수학에서는 Ordinal Number 가 자연스럽지 못하다며 자연수에 집착하는 분들이 있으시다. 양쪽이 주장하는 자연스러움(Natural) 은 정반대이지만, 그럼에도 신기한 점이 있다. 자연스러움에 집착하는 분들은 다 세대가 오래되신 분들이라는 점이다. 아무래도 본인이 익숙한 사고방식을 "자연스럽다" 라는 형용사로 새로운 시대를 설득하려는게 아닌가 싶다.

profile
dreams of chronic and sustained passion

0개의 댓글