마지막으로 링크의 끝을 정합니다. 만료와 삭제, 그리고 만료된 키를 다시 쓸 수 있는지입니다.
만료된 키를 재사용하면 안 된다
키의 대응이 만료됐다고 그 키를 다시 발급하면, 예전에 공유된 링크가 새 목적지로 갑니다. 게시글과 메시지에 남아 있는 옛 링크를 우리가 회수할 방법이 없습니다.
A를 기대한 사람이 B로 가는 것은 단축 서비스에서 가장 나쁜 사고입니다. 남용 목적으로 일부러 만료된 인기 키를 노릴 수도 있습니다.
공간이 1퍼센트도 차지 않았으므로 재사용할 이유가 없습니다. 키 공간의 여유가 이 판단을 값싸게 만듭니다.
만료는 대응을 지우는 것이고 키를 비우는 것이 아니다
쓴 키는 영구히 쓴 것으로 남긴다
만료된 키에 무엇으로 답하나
대응이 없으므로 보낼 곳이 없습니다. 없는 키와 만료된 키를 구분할지를 정해야 합니다.
| 선택 | 성질 |
|---|---|
| 둘 다 없다고 답한다 | 단순하다. 사용자는 이유를 모른다 |
| 만료를 따로 알린다 | 사용자에게 친절하다. 그 키가 있었다는 사실이 드러난다 |
만료 안내를 보여주려면 만료 기록을 남겨 둬야 하고, 그 기록도 저장 공간을 씁니다. 이 요구사항에서는 대부분의 링크가 만료 없이 영구이므로 만료 기록의 양이 적습니다. 그래서 구분해 알려도 됩니다.
영구 보관의 비용
기본이 영구 보관이므로 데이터가 계속 늘어납니다. 10년 에 누적 300억 개 이고, 그 뒤에도 멈추지 않습니다.
| 관점 | 판단 |
|---|---|
| 지울 수 있나 | 사용자가 삭제하지 않으면 지울 근거가 없다 |
| 조회되지 않는 것을 지울까 | 언제 다시 열릴지 알 수 없다 |
| 어떻게 다루나 | 오래되고 조회 없는 것은 값싼 저장소로 옮긴다 |
옮기는 것은 되지만 지우는 것은 안 됩니다. 링크가 죽으면 그것을 공유한 사람의 글이 깨집니다. 오래 살아 있는 것이 이 서비스의 신뢰입니다.
이 설계가 하지 않기로 한 것
| 후보 | 결정과 근거 |
|---|---|
| 같은 주소에 같은 키 재사용 | 하지 않는다. 쓰기마다 조회가 붙는다 |
| 6자 키 | 하지 않는다. 사용률 절반이면 충돌이 잦아진다 |
| 해시 앞자리 방식 | 하지 않는다. 재사용을 포기해 장점이 없다 |
| 영구 이동 응답 | 하지 않는다. 조회 수와 만료가 동작하지 않는다 |
| 만료된 키 재사용 | 하지 않는다. 옛 링크가 새 목적지로 간다 |
| 오래된 링크 삭제 | 하지 않는다. 공유한 글이 깨진다 |
여섯 개 중 넷이 "하지 않는다" 입니다. 이 아키타입은 기능을 더하는 설계가 아니라 무엇을 하지 않을지 고르는 설계입니다. 그리고 각 결정의 근거가 앞에서 계산한 숫자에 있습니다.