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. ํด์ ํ ์ถฉ๋ ํด์ ๋ฐฉ๋ฒ ๊ณผ 2. base-62 ๋ณํ ๋ฒ์ ์์๋ณด์.
- ํด์ ํ ์ถฉ๋ ํด์
๊ธด URL์ ์ค์ด๋ ค๋ฉด, ์๋ URL์ 7๊ธ์ ๋ฌธ์์ด๋ก ์ค์ด๋ ํด์ ํจ์๊ฐ ํ์.
์์ฌ์ด ๋ฐฉ๋ฒ: CRC32, MD5, SHA-1๊ฐ์ด ์ ์๋ ค์ง ํด์ ํจ์ ์ด์ฉ.
-> ์ด ๋ฐฉ๋ฒ ์ฌ์ฉ ์ 7๊ธ์๋ก ์ ํํ ์ ์ค์ฌ์ง
-> [ ํด๊ฒฐ ๋ฐฉ๋ฒ ] ๋ง๋ค์ด์ง ํด์ ํจ์๋ฅผ ๋งจ ์ 7๊ธ์๋ง ๋ฐ์ ์ฐ๊ณ , ์ถฉ๋์ด ๋ฐ์ํ๋ฉด... ์ถฉ๋์ด ํด์๋ ๋๊น์ง ์ฌ์ ์ ์ ํ ๋ฌธ์์ด์ ํด์๊ฐ์ ๋ง ๋ถ์ด๋ฉด ๋จ.
- base-62 ๋ณํ
์์ ํํ ๋ฐฉ์์ด ๋ค๋ฅธ ๋ ์์คํ ์ด ๊ฐ์ ์๋ฅผ ๊ณต์ ํด์ผ ํ๋ ๊ฒฝ์ฐ์ ์ ์ฉ
1๐ค2. ๋ ์ ๊ทผ๋ฒ์ ๋น๊ต
velog๋ ๋ฌด์จ.. ํ ๋ง๋ค๊ธฐ๋ ์๋๋ ธ..
URL ๋จ์ถ๊ธฐ ์์ธ ์ค๊ณ
์์ ์์๋ 62์ง๋ฒ ๋ณํ ๊ธฐ๋ฒ์ ์ฌ์ฉํด ์ค๊ณํ ๊ฒ์ด๊ณ . ๊ทธ ์ฒ๋ฆฌ ํ๋ฆ์ ์์๋ ํํ๋ก ์ ๋ฆฌํ ๊ฒ.
URL ๋ฆฌ๋๋ ์
์์ธ ์ค๊ณ
[์ฌ์ง]
4๋จ๊ณ. ๋ง๋ฌด๋ฆฌ
์์์ ๋ค๋ฃฌ ๋ด์ฉ์ ์ ์ธํ๊ณ ๊ณ ๋ คํด๋ณด์์ผ ํ ๋ถ๋ถ๋ค
1. ์ฒ๋ฆฌ์จ ์ ํ ์ฅ์น(rate limiter)
2. ์น ์๋ฒ์ ๊ท๋ชจ ํ์ฅ
3. ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๊ท๋ชจ ํ์ฅ
4. ๋ฐ์ดํฐ ๋ถ์ ์๋ฃจ์
(analytics)
5. ๊ฐ์ฉ์ฑ, ๋ฐ์ดํฐ ์ผ๊ด์ฑ, ์์ ์ฑ