tiny url κ°μ URL λ¨μΆκΈ° μ€κ³
λ¬Έμ μ΄ν΄ λ° μ€κ³ λ²μ νμ
β’
https://tinyurl.com/abcd-efgh μ²λΌ λμμΌ ν¨
β’
λ§€μΌ 1μ΅κ°μ λ¨μΆ url μμ±
β’
짧μΌλ©΄ 짧μμλ‘ μ’λ€.
β’
μ«μ, λ/μλ¬Έμ
β’
κ°λ΅μ μΆμ
β¦
μ΄λΉ μ°κΈ° μ°μ°: 1μ΅/24/3600 = 1160
β¦
μ½κΈ°λ μ°κΈ° * 10
β¦
1λ
κ° 365μ΅κ°μ λ°μ΄ν°κ° μμΈλ€.
β¦
μ μ₯ μ©λμ 365μ΅ * 100 λ°μ΄νΈ = 3.65TB
κ°λ΅μ μ€κ³μ
API μλν¬μΈνΈ
β’
REST API μ€νμΌλ‘ μ€κ³
β’
url μμ± μλν¬μΈνΈ
β¦
POST, μΈμ: {longUrl: longUrlString}, μλ¨: λ¨μΆ URL
β¦
GET, μλ΅ ν€λ: 리λλ μ
μ© μλ URL, 301 λλ 302 code
URL 리λλ μ
β’
301 Permanently Moved: ν΄λΉ Location μ url μ μꡬ μ¬μ©. λΈλΌμ°μ λ μ΄ μλ΅μ μΊμνλ€. λ°λΌμ μΆν κ°μ λ¨μΆ URL μ μμ²μ λ³΄λΌ νμκ° μμ λ λΈλΌμ°μ λ μΊμλ URL λ‘ λ³΄λΈλ€.
β’
302 Found: μΌμμ μΈ Location μ url λ‘ λ¦¬λλ μ
β’
μλ² λΆνλ₯Ό μ€μ΄κ³ μΆμ λλ 301, νΈλν½ λΆμμ΄ μ€μνλ€λ©΄ 302
β’
μ μ₯μ ν΄μ ν
μ΄λΈμ΄ μ μ νλ€. <λ¨μΆ URL, μλ URL>
μμΈ μ€κ³
λ°μ΄ν° λͺ¨λΈ
β’
ν΄μ ν
μ΄λΈμ λ©λͺ¨λ¦¬μ μ μ₯νλλ° λ©λͺ¨λ¦¬λ μ ννκ³ λΉμΈμ <λ¨μΆ, μλ> μμ RDBμ μ μ₯νλ κ²μ΄ λ λμ λ°©λ²
ν΄μ ν¨μ
β’
μλ URL μ λ¨μΆ URL μ μλ³μλ‘ λ³ννλ λ°μ μ°μΈλ€.
β’
μ«μ 10κ°+λμλ¬Έμ 52 = 62, 62^n β₯ 365μ΅κ° λ₯Ό λ§μ‘±νλ n μ 6~7μ΄λ€.
ν΄μ μΆ©λ ν΄μ
β’
κ°μ₯ 짧μ ν΄μ λ³ν ν¨μκ° 7λ³΄λ€ κΈΈλ€.
β’
첫 λ²μ§Έ ν΄κ²° λ°©λ²μ μ²μ 7κ° κΈμλ§ μ¬μ©νλ κ²μΈλ° μ΄λ ν΄μ μΆ©λν νλ₯ μ΄ μλ€. μ΄λ λ‘μ§μΌλ‘ νμ΄μΌνλ€. νμ§λ§ μ΄λ μ€λ²ν€λκ° ν¬λ€.
base-62 λ³ν
β’
ν΄μκ°μ μ¬μ©ν μ μλ λ²μκ° 62κ°λΌμ 62μ§λ² λ³νμ΄ λ§μ΄ μ°μΈλ€.
ν΄μ ν μΆ©λ ν΄μ | base-62 λ³ν |
λ¨μΆ URLμ κΈΈμ΄κ° κ³ μ λλ€. | κ°λ³μ μΈ λ¨μΆ URL κΈΈμ΄λ₯Ό κ°λλ€. ID κ°μ΄ 컀μ§λ©΄, URL κΈΈμ΄λ κΈΈμ΄μ§λ€. |
μ μΌμ± 보μ₯ ID μμ±κΈ°κ° νμμλ€. | IDλ₯Ό κΈ°λ°μΌλ‘ URLμ΄ κ²°μ λλ―λ‘, μ μΌμ±μ΄ 보μ₯λλ ID μμ±κΈ°κ° νμνλ€. |
μΆ©λμ ν΄μνλ μμ
μ΄ νμνλ€. μ΄λ‘ μΈν μ€λ²ν€λκ° λ°μνλ€. | μΆ©λμ΄ μμ λΆκ°λ₯νλ€. μ μΌν IDλ‘ URLμ μμ±νκΈ° λλ¬Έμ΄λ€. |
λ€μμ μμ±λ λ¨μΆ URLμ μ μΆν μ μλ€. | IDκ° Auto Incrementλ‘ μμ±λλ€λ κ°μ νμ, λ€μ URLμ μμΈ‘ν μ μμΌλ―λ‘ λ³΄μμ λ¬Έμ κ° λ μλ μλ€. |
URL 리λλ μ μμΈ μ€κ³
β’
μ°κΈ°λ³΄λ€ μ½κΈ°μ λΉμ€μ΄ λ λμ <λ¨μΆ, μλ> μμ μΊμμ μ μ₯νλ©΄ μ±λ₯μ λμΌ μ μλ€.
β’
μ²λ¦¬μ¨ μ ν μ₯μΉκ° μμΌλ©΄ 무λΆλ³ν μμ²μ μ νν μ μλ€.
β’
μΉ μλ² κ·λͺ¨ νμ₯
β’
DB κ·λͺ¨ νμ₯: DB λ₯Ό λ€μ€ννκ±°λ μ€λ©
β’
κ°μ©μ±, λ°μ΄ν° μΌκ΄μ±, μμ μ±!!!