키 7자 이하 에 누적 300억 개 을 담아야 합니다. 이 두 숫자로 길이를 계산합니다. 감으로 정하지 않습니다.
문자 집합과 길이
숫자 10개와 대문자 26개와 소문자 26개를 쓰면 자리마다 62가지입니다. 길이가 하나 늘면 개수가 62배가 됩니다.
| 길이 | 담을 수 있는 개수 | 판정 |
|---|---|---|
| 5자 | 약 9억 2천만 | 부족하다 |
| 6자 | 약 568억 | 누적 300억 개 이면 절반이 찬다 |
| 7자 | 약 3조 5천억 | 1퍼센트도 쓰지 않는다 |
7자를 고릅니다. 6자로도 개수는 담기지만 그것이 왜 위험한지가 다음 이야기입니다.
절반이 차면 무슨 일이 생기나
키를 무작위로 뽑는다면 이미 쓰인 키를 뽑을 확률이 곧 사용률입니다.
6자에 300억을 담으면 사용률이 약 53퍼센트
새 키를 뽑을 때 절반은 이미 쓰인 것과 겹친다
겹치면 다시 뽑아야 하고, 다시 뽑을 때마다 이미 있는지 확인하는 왕복이 듭니다. 사용률이 올라갈수록 평균 시도 횟수가 늘어납니다.
7자는 사용률이 1퍼센트 미만이라 겹칠 일이 거의 없습니다. 키 공간의 여유는 충돌 처리 비용을 낮추기 위한 것입니다.
문자 집합을 줄이면
읽기 쉽게 만들려고 헷갈리는 문자를 빼는 경우가 있습니다. 숫자 0과 대문자 O, 숫자 1과 소문자 l 같은 것입니다.
| 문자 집합 | 자리당 | 7자 개수 |
|---|---|---|
| 62가지 | 62 | 약 3조 5천억 |
| 58가지 | 58 | 약 2조 1천억 |
개수가 40퍼센트 줄지만 여전히 충분합니다. 사용률이 1퍼센트대에서 1.4퍼센트대로 오를 뿐입니다. 사람이 손으로 옮겨 적는 링크라면 이 교환이 이득입니다.
대소문자를 쓸 수 없는 경우
주소의 일부를 대소문자 구분 없이 다루는 환경이 있습니다. 그러면 자리당 36가지가 되고 7자는 약 780억입니다. 누적 300억 개 을 담으면 사용률이 38퍼센트라 6자와 비슷한 상황이 됩니다.
그때는 8자로 늘려야 합니다. 이렇게 문자 집합이 길이를 정하므로 두 값을 함께 결정합니다.
계산을 문서에 남긴다
키 길이는 한 번 정하면 바꾸기 어렵습니다. 이미 발급한 키가 남아 있기 때문입니다.
그래서 어떤 가정으로 이 길이를 골랐는지 적어 둡니다. 보관 기간, 하루 생성량, 문자 집합, 목표 사용률입니다. 가정이 달라지면 그 계산을 다시 하면 됩니다.