8장 : URL 단축키 설계
Last updated
Last updated
시스템의 기본적 기능
URL 단축 : 주어진 긴 URL을 훨씬 짧게 줄인다.
URL 리디렉션(redirection) : 축약된 URL로 HTTP 요청이 오면 원래 URL로 안내
높은 가용성과 규모 확장성, 그리고 장애 감내가 요구됨
개략적 추정
쓰기 연산 : 매일 1억 개의 단축 URL 생성
초당 쓰기 연간 : 1억 (100milion) /24/3600 = 1160
읽기 연산 : 읽기 연산과 쓰기 연산 비율은 10:1이라고 하자. 그 경우 읽기 연산은 초당 11,600회 발생한다. (1160 x 10 = 11,600)
URL 단축 서비스를 10년간 운영한다고 가정하면 1억(100milion)x365x10 = 3650억(365bilion)개의 레코드를 보관해야 한다.
축약 전 URL의 평균 길이는 100이라고 하자
따라서 10년 동안 필요한 저장 용량은 3650억 x 100바이트 = 36.5TB이다.
URL 단축용 엔드포인트 : 새 단축 URL을 생성하고자 하는 클라이언트는 이 엔드포인트에 단축할 URL을 인자로 실어서 POST 요청을 보내야 한다.
URL 리디렉션용 엔드포인트 : 단축 URL에 대해서 HTTP 요청이 오면 원래 URL로 보내주기 위한 용도의 엔드포인트.
Browser에 단축 URL을 입력하면 생기는 일
Client와 Server 사이 통신 절차
단축 URI이 www.tinyurl.com/{hashValue} 같은 형태라고 해 보자. 결국 중요한 것은 긴 URL을 이 해시 값으로 대응시킬 해시 함구 fx를 찾는 일이 될 것이다.
해시 함수가 만족해야할 요구사항
입력으로 주어지는 긴 URL이 다른 값이면 해시 값도 달라야 한다.
계산된 해시 값은 원래 입력으로 주어졌던 긴 URL로 복원될 수 있어야 한다.
해시 값 길이
hashValue의 길이와, 해시 함수가 만들 수 있는 URL의 개수 사이 관계
해시 후 충돌 해소
긴 URL을 줄이려면, 원래 URL을 7글자 문자열로 줄이는 해시 함수가 필요하다. 손쉬운 방법은 CR32, MD5, SHA-1 같이 잘 알려진 해시 함수를 이용하는 것이다.
충돌 발생할 경우, 충돌이 해소될 떄까지 사전에 정한 문자열을 해시값에 덧붙인다.
충돌은 해소할 수 있지만 단축 URL을 생성할 때 한 번 이상 데이터베이스 질의를 해야 하므로 오버헤드가 크다. DB 대신 블룸 필터를 사용하면 성능 개선이 가능하다.
base-64 변환
진법 변환(base conversion)은 URL 단축키를 구현할 때 흔히 사용되는 접근법으로, 수의 표현 방식이 다른 두 시스템이 같은 수를 공유하여야 하는 경우에 유용하다.
비교