필요한 패키지 설치
pip install -r requirements.txt
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해서 처리한다.
~/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
긴 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
짧은 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
짧은 URL을 생성할 때 받은 request_id를 이용해 짧은 URL을 삭제한다 Request Params
name | type | description |
---|---|---|
request_id | int | 요청ID |
Response
name | type | description |
---|---|---|
status | string | 삭제 완료 메시지 (request {request_id} is deleted) |
token 에 대응 되는 원본 URL로 redirect 시킨다
HTTP status code 200
원래 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 형태로 사용 |
miniature_spoon_app/link/link_shortner.py
조건 : short_url_key는 6개의 알파벳 대소문자 혹은 숫자로 이루어 져 있어야 한다.
- 알파벳 소문자 26개, 알파벳 대문자 26개, 숫자 10개 총 62개 문자 사용 가능
- inrest 할때마다 1씩 증가하는 link 테이블의 id를 62진법으로 변환
- 각 자릿수마다 0
9이면 숫자 09, 1035이면 대문자 AZ, 3661이면 소문자 az로 치환 - 결과값의 길이가 6보다 작다면 길이가 6이 될때까지 0을 추가