Skip to content

jada-gwon/miniature-spoon

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

89 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Miniature Spoon

Simple link shortner using Flask, MariaDB and Redis
pypy-4.0.1

Installing

필요한 패키지 설치 pip install -r requirements.txt

Configuration

config.py를 수정해 Miniature Spoon에 필요한 환경변수들을 설정할 수 있다.
DATABASE_USER_ID = DB 사용자 이름
DATABASE_USER_PASSWD = DB 비밀번호
DATABASE_NAME = 접속할 DB 이름
DATABASE_ADDR = DB 주소

실행

run.py



## Project Architecture ### Software Abstraction ![](https://github.com/Polyhy/miniature-spoon/blob/master/sw.png) Flask를 이용해 Rest API서버를 구성하였다. DB로 MariaDB를 사용하였고 SQLAlchemy를 사용했다. 짧아진 url을 다시 긴 url로 리다이렉트 하는 시간을 줄이기 위해 Redis를 이용해 캐싱한다. 짧아진 url로 접속시 먼저 Redis 서버에 토큰을 키로 하는 값을 검색 한다. 검색 후 결과가 있으면 검색된 원본 URL로 리다이렉트 시키고, 결과가 없으면 DB에서 검색 후 검색 된 원본 URL을 캐싱하고 검색된 원본 URL로 리다이렉트 한다. 캐싱된 원본 URL은 한 시간 후 삭제된다. 클라이언트에서 서버로 데이터를 보낼 때는 json web token을 이용해 암호화해 전송하고 서버에서는 이것을 decode해서 처리한다.

Project Architecture

Project Structure

~/miniature-spoon  
    |-- miniature_spoon_app  
    |   |-- link 
    |   |   |-- 
    |   |   |-- __init__.py
    |   |   |-- controller.py
    |   |   |-- link_shortner.py
    |   |   |-- model.py
    |   |   |__ views.py
    |   |-- static  
    |   |   |__ js
    |   |       |__ index.js
    |   |-- templates  
    |   |   |-- pages
    |   |   |   |__ index.html
    |   |   |__ 404.html
    |   |-- __init__.py  
    |   |-- config.py  
    |   |__ views.py  
    |-- tests  
    |   |-- __init__.py  
    |   |-- link_test.py  
    |   |__ redis_test.py  
    |-- utils  
    |   |-- __init__.py  
    |   |__ convertDictToStr.py  
    |-- requirements.txt  
    |__ run.py

APIs

POST /v1/link

긴 URL을 이용해 짧은 URL을 생성하고 request_id와 생성 된 짧은 URL을 보낸다 Request Params

name type description
link string 줄이고자 하는 URL

Response

name type description
request_id int 요청ID
short_url string 줄어든 URL

HTTP status code 201

GET /v1/link

짧은 URL을 생성할 때 받은 request_id를 이용해 짧은 URL을 보낸다 Request Params

name type description
request_id int 요청ID

Response

name type description
short_url string 줄어든 URL

HTTP status code 200

DELETE /v1/link

짧은 URL을 생성할 때 받은 request_id를 이용해 짧은 URL을 삭제한다 Request Params

name type description
request_id int 요청ID

Response

name type description
status string 삭제 완료 메시지 (request {request_id} is deleted)
GET /{token}

token 에 대응 되는 원본 URL로 redirect 시킨다

HTTP status code 200

DataBase Schema

link

원래 link와 줄어든 URL을 저장하는 테이블

column type description
id INT(11) primary key DB에 저장된 각 url의 고유 키, request_id로 사용
createAt DATETIME row가 생성된 날짜 및 시간
originalLink VARBINARY(255) 줄이기 전 원래 link
shortLink VARBINARY(6) 줄어든 short link {ServiceURL}/shortLink 형태로 사용



Link Shortner 알고리즘

miniature_spoon_app/link/link_shortner.py

조건 : short_url_key는 6개의 알파벳 대소문자 혹은 숫자로 이루어 져 있어야 한다.

  1. 알파벳 소문자 26개, 알파벳 대문자 26개, 숫자 10개 총 62개 문자 사용 가능
  2. inrest 할때마다 1씩 증가하는 link 테이블의 id를 62진법으로 변환
  3. 각 자릿수마다 09이면 숫자 09, 1035이면 대문자 AZ, 3661이면 소문자 az로 치환
  4. 결과값의 길이가 6보다 작다면 길이가 6이 될때까지 0을 추가

About

Python Flask Link shortener example

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published