8장 : URL 단축키 설계

1단계 : 문제 이해 및 설계 범위 확정

  • 시스템의 기본적 기능

    • 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이다.

2단계 : 개략적 설계안 제시 및 동의 구하기

API 엔드포인트

  • URL 단축용 엔드포인트 : 새 단축 URL을 생성하고자 하는 클라이언트는 이 엔드포인트에 단축할 URL을 인자로 실어서 POST 요청을 보내야 한다.

  • URL 리디렉션용 엔드포인트 : 단축 URL에 대해서 HTTP 요청이 오면 원래 URL로 보내주기 위한 용도의 엔드포인트.

URL 리디렉션

Browser에 단축 URL을 입력하면 생기는 일

Client와 Server 사이 통신 절차

URL 단축

단축 URI이 www.tinyurl.com/{hashValue} 같은 형태라고 해 보자. 결국 중요한 것은 긴 URL을 이 해시 값으로 대응시킬 해시 함구 fx를 찾는 일이 될 것이다.

해시 함수가 만족해야할 요구사항

  • 입력으로 주어지는 긴 URL이 다른 값이면 해시 값도 달라야 한다.

  • 계산된 해시 값은 원래 입력으로 주어졌던 긴 URL로 복원될 수 있어야 한다.

3단계 : 상세 설계

데이터 모델

해시 함수

  • 해시 값 길이

    • hashValue의 길이와, 해시 함수가 만들 수 있는 URL의 개수 사이 관계

  • 해시 후 충돌 해소

    • 긴 URL을 줄이려면, 원래 URL을 7글자 문자열로 줄이는 해시 함수가 필요하다. 손쉬운 방법은 CR32, MD5, SHA-1 같이 잘 알려진 해시 함수를 이용하는 것이다.

    • 충돌 발생할 경우, 충돌이 해소될 떄까지 사전에 정한 문자열을 해시값에 덧붙인다.

    • 충돌은 해소할 수 있지만 단축 URL을 생성할 때 한 번 이상 데이터베이스 질의를 해야 하므로 오버헤드가 크다. DB 대신 블룸 필터를 사용하면 성능 개선이 가능하다.

  • base-64 변환

    • 진법 변환(base conversion)은 URL 단축키를 구현할 때 흔히 사용되는 접근법으로, 수의 표현 방식이 다른 두 시스템이 같은 수를 공유하여야 하는 경우에 유용하다.

  • 비교

URL 단축기 상세 설계

URL 리디렉션 상세 설계

Last updated