이전 포스트에 이어 url 단축 서비스를 실제 파이썬 코드로 구현합니다. 코드는 github에서 보실 수 있습니다.

schema

단축 url 영속화를 위한 db schema는 아래와 같습니다.

field type  
id integer url 단축 요청 시 할당 받는 id 입니다.
short_id string url 단축 결과를 저장할 62진수 변환 값 입니다.
source_url string 단축 되기전 원래의 url 입니다. redirect 를 위해 저장합니다.

단축 url 생성 과정

url 단축을 위해 사용한 방법은 고유한 정수형 id를 할당 받고 base62를 사용하여 62진수로 변환하여 단축 url을 생성하는 방향으로 구현하였습니다. 진법 번환 알고리즘을 사용하였습니다.

encode를 사용하 33번째 url 단축 요청을 처리 하게 되면 encode(33)="Q"이 되며 한 글자만 반환되게 됩니다. 구현 시 단축 url id를 7글자로 제한하려 하며 7글자가 안되는 값에 대해서는 빈칸을 채우는 작업을 추가했습니다. 해당 코드에서 d=0 이므로 decode("ddddddQ")=33 정상적으로 복호화됩니다.

# 요청 받은 url을 사용하여 orm 오브젝트를 생성합니다.
url = Url(source_url=source_url)
session.add(url)
session.flush() # id를 선점하기 위해 사용

encoded = encode(url.id)
# 7글자가 되도록 남은 글자를 0에 해당하는 글자로 채웁니다.
short_id = BASE62[0] * (7 - len(encoded)) + encoded
url.short_id = short_id
session.commit()

ddddddQ의 단축 url id가 완성되며 https://short-url/ddddQ 의 형태로 사용자가 사용하게 됩니다.

정리

62진수로 변환하는 방식으로 url 단축 서버를 구현하였습니다. 어떤 다음 내용이 더 보완하고자 합니다.

  • aws api gateway 를 추가하여 처리 제한을 고려하는것도 필요합니다.
  • 데이터 분석을 위한 url 접속 통계 기능을 추가합니다.