/DevAssign

Stove DevCamp Assignment

Primary LanguagePython

StoveDevAssign

Stove DevCamp Assignment Topic 1: URL Shortener

๐Ÿ›  Environment

  • Python 3.9.2
  • Flask 2.0.2
  • Werkzeug 2.0.2

๐ŸŽŠ Quick Start

# clone project repo
git clone https://github.com/rachel5004/StoveDevAssign.git
cd <project>

# install libs
pip install -r requirements.txt

# DB setting
flask db init
flask db migrate
flask db upgrade

# start app
export FLASK_APP=urlcutter/__init__.py; export FLASK_ENV=development; flask run

๐ŸŽฏ ์š”๊ตฌ์‚ฌํ•ญ

  • 1. ์›น ํŽ˜์ด์ง€ ์ž…๋ ฅํผ์— URL ์ž…๋ ฅ ์‹œ ๋‹จ์ถ•๋œ ๊ฒฐ๊ณผ ์ถœ๋ ฅ
  • 2. ๋ธŒ๋ผ์šฐ์ €์˜ ์ฃผ์†Œ์ฐฝ์— ๋‹จ์ถ• URL ์ž…๋ ฅ ์‹œ ๊ธฐ์กด URL๋กœ ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ
  • 3. ๊ฐ™์€ URL ์ž…๋ ฅ ์‹œ ๋™์ผํ•œ ๊ฒฐ๊ณผ๊ฐ’ ๋„์ถœ
  • 4. ๊ฒฐ๊ณผ๊ฐ’์€ ์ฃผ์†Œ๋ฅผ ์ œ์™ธํ•˜๊ณ  8๊ธ€์ž ์ด๋‚ด๋กœ ์ƒ์„ฑ

๐Ÿ“ API

๋‹จ์ถ•url ์ƒ์„ฑ (Query String)

method uri
GET /url
POST /url
{
 // post์˜ ๊ฒฝ์šฐ
 request: {
   url : ""
 }
 response: "shortcut"
}

๋‹จ์ถ•url๋กœ ์ด๋™

method uri
GET /<shortcut>
{
 response: CODE 302
}

โ“ About shortcut generator

Base62 vs. Base64

base64๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋” ์งง์€ ๊ธธ์ด๋กœ ์ถ•์†Œ๊ฐ€๋Šฅํ•˜์ง€๋งŒ, base64๋Š” '+', '=', '/'์™€ ๊ฐ™์€ ๋ฌธ์ž๋“ค์ด ํฌํ•จ๋˜์–ด URL SAFEํ•˜์ง€๊ฐ€ ์•Š์Šต๋‹ˆ๋‹ค. ๋•Œ๋ฌธ์— base62๋กœ ์ธ์ฝ”๋”ฉํ–ˆ์Šต๋‹ˆ๋‹ค.

์›๋ณธURL vs. id

์›๋ณธ url์„ ๊ทธ๋Œ€๋กœ ์ธ์ฝ”๋”ฉํ•˜๋ฉด ๊ฒฐ๊ณผ๊ฐ’์ด ๊ธธ์–ด์ง€๊ฒŒ ๋˜๋ฏ€๋กœ, DB์— ์ €์žฅ ํ›„ ์ƒ์„ฑ๋œ id๊ฐ’์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๋‹จ์ถ•URL์„ ์ƒ์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค.

ํ˜น์€ secrets.token_urlsafe

secrets ๋ชจ๋“ˆ์˜ token_urlsafe ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•˜๋ฉด base64 ์ธ์ฝ”๋”ฉ ๊ธฐ๋ฐ˜์˜ URL SAFEํ•œ ๋ฌด์ž‘์œ„ ํ…์ŠคํŠธ ๋ฌธ์ž์—ด์„ ๋Œ๋ ค์ค๋‹ˆ๋‹ค. ์œ„ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด ๋‹จ์ถ•URL์„ ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•๋„ ์ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.