header-img
Info :
728x90

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. ๊ฐ€์šฉ์„ฑ, ๋ฐ์ดํ„ฐ ์ผ๊ด€์„ฑ, ์•ˆ์ •์„ฑ

728x90
๋”๋ณด๊ธฐ
Document/Self Study