더북(TheBook)

키를 사용해 값을 가져오기

지금까지 왜 한 이름공간에서 키가 고유해야 하는지, 관계형 데이터베이스보다 키-값 데이터베이스에서 의미 있는 값을 가진 키가 더 유용한 이유가 무엇인지, 키는 어떻게 생성하는지 설명하는데 꽤 많은 지면을 할애했다. 연관된 값을 찾는 데 사용되는 키에 관한 아이디어는 일부 소개했지만, 어떻게 값을 찾는지에 대해서는 설명하지 않았다. 이제 이 주제를 다룰 때가 됐다.

만약 키-값 데이터베이스 설계자들이 키 값으로 정수만 사용하도록 제한한다면 키를 기반으로 값을 가져오거나 설정하는 코드를 설계하는 것은 어렵지 않다. 이 값들은 데이터베이스에서 메모리로 옮겨지거나 디스크에 저장되는데 이름공간에 저장된 첫 번째 값이 1이란 키로 참조되고 그 다음 값은 2란 키로, 그 다음은 3, 이런 식으로 참조된다고 해보자. 다행히 키-값 데이터베이스 설계자들은 데이터 접근 코드를 간단히 만드는 것보다는 유용한 데이터 저장 구조를 설계하는 데 더 관심을 기울인다.

데이터의 위치를 숫자로 식별하는 것은 좋은 생각이지만, 그렇다고 아주 좋은 방법도 아니다. 원한다면 정수, 문자열, 심지어는 객체 리스트도 키로 사용할 수 있어야 한다. 좋은 소식은 실제로 사용할 수 있다는 것이다. 어떻게 가능할까? 바로 정수, 문자열, 객체 리스트를 고유한 문자열이나 고유한 숫자와 매핑하는 함수를 사용하는 것이다. 한 가지 유형의 값을 숫자 하나와 매핑하는 함수를 해시 함수라고 한다.

Note 모든 키-값 데이터베이스가 리스트나 그 외 복잡한 구조를 지원하는 것은 아니다. 일부는 다른 것보다 키의 유형이나 길이에 더 많은 제약을 두고 있다.

해시 함수: 키와 값이 저장된 위치를 매핑

해시 함수는 임의의 문자열을 받아서 (보통은) 고유하고 고정된 길이의 문자열을 만든다.

Note 사실 해시 함수가 반환하는 값이 항상 고유하지는 않다. 관련없는 두 값을 입력받아 같은 값을 반환하기도 하는데, 이를 해시 충돌이라 한다.

▶ 해시 충돌을 어떻게 처리하는지에 대해서는 4장 키-값 데이터베이스 용어 정리에서 다룬다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.