πŸ““ 8μž₯. URL 단좕기 섀계

onyΒ·2022λ…„ 11μ›” 24일
1

πŸ“š book

λͺ©λ‘ 보기
2/10
post-thumbnail

1단계. 문제 이해 및 섀계 λ²”μœ„ ν™•μ •

μ˜ˆμ‹œ μ‹œμŠ€ν…œμ˜ 기본적 κΈ°λŠ₯
1. URL 단좕기: 주어진 κΈ΄ URL을 훨씬 짧게 쀄인닀.
2. URL λ¦¬λ””λ ‰μ…˜(Redirection): μΆ•μ•½λœ URL둜 HTTP μš”μ²­μ΄ 였면 μ›λž˜ URL둜 μ•ˆλ‚΄
3. 높은 κ°€μš©μ„±κ³Ό 규λͺ¨ ν™•μž₯μ„±, 그리고 μž₯μ•  감내가 μš”κ΅¬

2단계. 개랡적 μ„€κ³„μ•ˆ μ œμ‹œ 및 λ™μ˜ κ΅¬ν•˜κΈ°

API μ—”λ“œν¬μΈνŠΈ

ν΄λΌμ΄μ–ΈνŠΈλŠ” μ„œλ²„κ°€ μ œκ³΅ν•˜λŠ” API μ—”λ“œν¬μΈνŠΈλ₯Ό 톡해 μ„œλ²„μ™€ 톡신

URL 단좕기 - (일반적) 2개의 μ—”λ“œν¬μΈνŠΈ μš”κ΅¬

1. URL λ‹¨μΆ•μš© μ—”λ“œν¬μΈνŠΈ
μƒˆ 단좕 URL을 μƒμ„±ν•˜κ³ μž ν•˜λŠ” ν΄λΌμ΄μ–ΈνŠΈ
-이 μ—”λ“œν¬μΈνŠΈμ— 단좕할 URL을 인자둜 μ‹€μ–΄μ„œ POST μš”μ²­

POST /api/v1/data/shorten

  • 인자: {longUrl: longURLstring}
  • λ°˜ν™˜: 단좕 URL

2. URL λ¦¬λ””λ ‰μ…˜μš© μ—”λ“œν¬μΈνŠΈ
단좕 URL에 λŒ€ν•΄ HTTP μš”μ²­μ΄ 였면 μ›λž˜ URL둜 보내주기 μœ„ν•œ μš©λ„

GET /api/v1/shortUrl

  • λ°˜ν™˜: HTTP λ¦¬λ””λ ‰μ…˜ λͺ©μ μ§€κ°€ 될 μ›λž˜ URL

URL λ¦¬λ””λ ‰μ…˜

ν΄λΌμ΄μ–ΈνŠΈ-μ„œλ²„ μ‚¬μ΄μ˜ 톡신 절차

μ—¬κΈ°μ„œ μœ μ˜ν•΄μ•Ό ν•  것은 301 응닡과 302 μ‘λ‹΅μ˜ 차이

  • 301 Permanently Moved : ν•΄λ‹Ή URL에 λŒ€ν•œ HTTP μš”μ²­μ˜ 처리 μ±…μž„μ΄ 영ꡬ적으둜 Location 헀더에 λ°˜ν™˜λœ URL으둜 μ΄μ „λ˜μ—ˆλ‹€λŠ” 응닡.
    영ꡬ적으둜 μ΄μ „λ˜μ—ˆμœΌλ―€λ‘œ, λΈŒλΌμš°μ €λŠ” 이 응닡을 μΊμ‹œ(cache)함.
    μΆ”ν›„ 같은 단좕 URL에 μš”μ²­μ„ 보낼 ν•„μš”κ°€ μžˆμ„ λ•Œ λΈŒλΌμš°μ €λŠ” μΊμ‹œλœ μ›λž˜ URL둜 μš”μ²­ 보냄.
  • 302 Found: 주어진 URL둜의 μš”μ²­μ΄ 'μΌμ‹œμ μœΌλ‘œ' Location 헀더가 μ§€μ •ν•˜λŠ” URL에 μ˜ν•΄ μ²˜λ¦¬λ˜μ–΄μ•Ό ν•œλ‹€λŠ” 응닡
    ν΄λΌμ΄μ–ΈνŠΈμ˜ μš”μ²­μ€ μ–Έμ œλ‚˜ 단좕 URL μ„œλ²„μ— λ¨Όμ € 보내진 후에 μ›λž˜ URL둜 λ¦¬λ””λ ‰μ…˜ λ˜μ–΄μ•Ό 함.

μ„œλ²„ λΆ€ν•˜λ₯Ό μ€„μ΄λŠ” 것이 μ€‘μš”ν•˜λ©΄ 301 Permanent Moved
νŠΈλž˜ν”½ 뢄석(analytis)이 μ€‘μš”ν•  λ•ŒλŠ” 302 Found

URL λ¦¬λ””λ ‰μ…˜μ„ κ΅¬ν˜„ν•˜λŠ” κ°€μž₯ 직관적인 방법은 ν•΄μ‹œ ν…Œμ΄λΈ”μ„ μ‚¬μš©ν•˜λŠ” 것.

URL 단좕

ν•΄μ‹œ ν•¨μˆ˜λŠ” λ‹€μŒ μš”κ΅¬μ‚¬ν•­μ„ λ§Œμ‘±ν•΄μ•Ό 함

  • μž…λ ₯으둜 μ£Όμ–΄μ§€λŠ” κΈ΄ URL이 λ‹€λ₯Έ 값이면 ν•΄μ‹œ 값도 달라야 함.
  • κ³„μ‚°λœ ν•΄μ‹œ 값은 μ›λž˜ μž…λ ₯으둜 μ£Όμ–΄μ‘Œλ˜ κΈ΄ URL둜 볡원될 수 μžˆμ–΄μ•Ό 함.

3단계. 상세 섀계

데이터 λͺ¨λΈ

ν•΄μ‹œ ν…Œμ΄λΈ” - 초기 μ „λž΅μ—λŠ” γ„±γ…Šμ§€λ§Œ μ‹€μ œ μ‹œμŠ€ν…œμ— μ“°κΈ°μ—λŠ” κ³€λž€..
더 λ‚˜μ€ 방법은 <단좕 URL, μ›λž˜ URL>의 μˆœμ„œμŒμ„ κ΄€κ³„ν˜• λ°μ΄ν„°λ² μ΄μŠ€μ— μ €μž₯ν•˜λŠ” 방법

ν•΄μ‹œ ν•¨μˆ˜
μ›λž˜ URL을 단좕 URL둜 λ³€ν™˜ν•˜λŠ” 데 μ“°μž„
νŽΈμ˜μƒ ν•΄μ‹œ ν•¨μˆ˜κ°€ κ³„μ‚°ν•˜λŠ” 단좕 URL 값을 hashvalue라고 지칭.

  1. ν•΄μ‹œκ°’ 길이

ν•΄μ‹œ ν•¨μˆ˜ κ΅¬ν˜„μ— 쓰일 κΈ°μˆ λ‘œλŠ” 1. ν•΄μ‹œ ν›„ 좩돌 ν•΄μ†Œ 방법 κ³Ό 2. base-62 λ³€ν™˜ 법을 μ•Œμ•„λ³΄μž.

  1. ν•΄μ‹œ ν›„ 좩돌 ν•΄μ†Œ
    κΈ΄ URL을 쀄이렀면, μ›λž˜ URL을 7κΈ€μž λ¬Έμžμ—΄λ‘œ μ€„μ΄λŠ” ν•΄μ‹œ ν•¨μˆ˜κ°€ ν•„μš”.
    μ†μ‰¬μš΄ 방법: CRC32, MD5, SHA-1같이 잘 μ•Œλ €μ§„ ν•΄μ‹œ ν•¨μˆ˜ 이용.
    -> 이 방법 μ‚¬μš© μ‹œ 7κΈ€μžλ‘œ μ •ν™•νžˆ μ•ˆ 쀄여짐
    -> [ ν•΄κ²° 방법 ] λ§Œλ“€μ–΄μ§„ ν•΄μ‹œ ν•¨μˆ˜λ₯Ό 맨 μ•ž 7κΈ€μžλ§Œ λ”°μ„œ μ“°κ³ , 좩돌이 λ°œμƒν•˜λ©΄... 좩돌이 ν•΄μ†Œλ  λ•ŒκΉŒμ§€ 사전에 μ •ν•œ λ¬Έμžμ—΄μ„ ν•΄μ‹œκ°’μ— 덧 뢙이면 됨.
  1. base-62 λ³€ν™˜
    수의 ν‘œν˜„ 방식이 λ‹€λ₯Έ 두 μ‹œμŠ€ν…œμ΄ 같은 수λ₯Ό κ³΅μœ ν•΄μ•Ό ν•˜λŠ” κ²½μš°μ— 유용

1🀍2. 두 μ ‘κ·Όλ²•μ˜ 비ꡐ

velogλŠ” 무슨.. ν‘œ λ§Œλ“€κΈ°λ„ μ•ˆλ˜λ…Έ..

URL 단좕기 상세 섀계


μ˜ˆμ œμ—μ„œλŠ” 62진법 λ³€ν™˜ 기법을 μ‚¬μš©ν•΄ 섀계할 것이고. κ·Έ 처리 흐름을 μˆœμ„œλ„ ν˜•νƒœλ‘œ μ •λ¦¬ν•œ 것.

URL λ¦¬λ””λ ‰μ…˜ 상세 섀계
[사진]

4단계. 마무리

μ•žμ—μ„œ 닀룬 λ‚΄μš©μ„ μ œμ™Έν•˜κ³  고렀해보아야 ν•  λΆ€λΆ„λ“€
1. 처리율 μ œν•œ μž₯치(rate limiter)
2. μ›Ή μ„œλ²„μ˜ 규λͺ¨ ν™•μž₯
3. λ°μ΄ν„°λ² μ΄μŠ€μ˜ 규λͺ¨ ν™•μž₯
4. 데이터 뢄석 μ†”λ£¨μ…˜(analytics)
5. κ°€μš©μ„±, 데이터 일관성, μ•ˆμ •μ„±

profile
파이(Ο€)ν˜• 개발자 🎐🌿🀍

0개의 λŒ“κΈ€