//
Search
Duplicate

8μž₯ URL 단좕기 섀계

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 λ₯Ό λ‹€μ€‘ν™”ν•˜κ±°λ‚˜ 샀딩
β€’
κ°€μš©μ„±, 데이터 일관성, μ•ˆμ •μ„±!!!