프로필사진

Go, Vantage point

가까운 곳을 걷지 않고 서는 먼 곳을 갈 수 없다.


Github | https://github.com/overnew/

Blog | https://everenew.tistory.com/





티스토리 뷰

반응형

 

 

 

URL 링크 단축이란?

 

아래와 같이 긴 URL은 공유 시, 텍스트 크기가 굉장히 길어지는 단점이 있다.

https://www.google.com/search?q=%EB%A7%81%ED%81%AC+%EB%8B%A8%EC%B6%95&oq=%EB%A7%81%ED%81%AC+%EB%8B%A8%EC%B6%95&gs_lcrp=EgZjaHJvbWUyBggAEEUYOTIGCAEQRRg90gEINzcxNmowajGoAgCwAgE&sourceid=chrome&ie=UTF-8 

 

🔎 링크 단축: Google 검색

 

www.google.com

 

 

이런 URL은 메시지나 SNS 공유를 위해 사용하기에는 불편하고 보기도 좋지 않다.

이를 위해 최근에는 아래와 같이 같은 링크를 단축된 길이의 URL로 변환해서 공유를 하는 경우가 많다.

 

https://buly.kr/BTO3cyD

 

🔎 링크 단축: Google 검색

 

www.google.com

 

 

 

 

 

이러한 URL 링크 단축은 단축기 서버에서 아래와 같이 응답을 받아 실제 URL로 이동한다.

 

 

단축기 서버는 해당 단축 URL과 일치하는 실제 URL을 반환한다.

이때 HPPT 상태코드 301(Permanently Moved)로 반환하면, Location 헤더에 반환된 실제 URL을 캐시한다.

따라서 이후 단축 URL로 접근해도 단축기 서버를 거치지 않고 실제 URL로 바로 접근하게 된다.

그러므로  301의 경우 단축기 서버의 부하를 줄여줄 수 있어 좋다.

 

 

 

반면 302(Found)로 반환하게 되면, 일시적으로만 Location 헤더에 반환된 실제 URL로 이동한다.

따라서 단축 URL로 재접근하면, 다시 단축기 서버로 이동해서 응답을 받아야 한다.

 

302는 비효율적으로 보이지만 트래픽 분석에는 효과적이다.

홍보 매체에 따라 다른 단축 URL을 사용하면, 어떤 URL로 어떤 사용자가 접근하는지 파악할 수 있기 때문에 마케팅 효과 분석에 사용될 수 있다.

 

출처: https://vivoldi.com/blog/url-shortener/why-use-long-links-to-be-shortened/

 

이런 트래픽 분석을 URL 링크 단축 서비스 업체들이 유료로 제공하여 수익을 창출한다.

 


하지만 단축 URL은 변환될 실제 URL이 감춰지는 장점 때문에, 최근에는 스팸 메시지에 필수로 이용된다...

 

 

 

 

 

 

URL 단축기의 구현

 

URL 링크 단축이 무엇인지 알았다면, 단축기 서버의 구현 방식을 고려해 보자.

 

 

1. 저장소

변환될 실제 URL을 메모리에 테이블 형태로 가지고 있으면 가장 빠르겠지만, URL 단축 서버는 상당한 양의 단축 데이터를 보관해야 하기 때문에 인 메모리 형태로는 힘들다.

따라서 관계형 DB에 PK_id와 함께 실제 URL과 단축 URL이 저장된다.

(ID만 적절히 생성할 수 있다면 NoSQL DB로도 구현이 가능할 거이다.)

 

 

 

2. 단축 변환 방식

긴 문자열 형태와 1:1로 매칭되는 짧은 문자열로 바꾸는 방법에는 해시 함수가 효과적이다.

대표적인 해시함수인 MD5와 SHA-1로 위의 긴 URL을 변환해 보자.

 

원본 문자열 q=%EB%A7%81%ED%81%AC+%EB%8B%A8%EC%B6%95&oq=%EB%A7%81%ED%81%AC+%EB%8B%A8%EC%B6%95&gs_lcrp=EgZjaHJvbWUyBggAEEUYOTIGCAEQRRg90gEINzcxNmowajGoAgCwAgE&sourceid=chrome&ie=UTF-8
MD5 c4e6e7d5f20d21a6c28b35f72ae6e6a3
SHA-1 1a5b8f4e54fc0f4e7e7c75052c64d90b8f7d219a

 

이러한 해시 함수는 역변환을 방지할 수 있지만, 여전히 길이도 길고, 충돌 가능성 또한 가지고 있다.

 

 

 

 

따라서 URL 단축기 구현에는 base-62 변환이 흔히 사용된다.

62는 [0~9][a~z][A~Z] 숫자와 알파벳 대소문자의 개수인 62개를 사용해, 62진법으로 10진수를 변환하기 때문에 붙여진 이름이다.

 

원본 문자열 q=%EB%A7%81%ED%81%AC+%EB%8B%A8%EC%B6%95&oq=%EB%A7%81%ED%81%AC+%EB%8B%A8%EC%B6%95&gs_lcrp=EgZjaHJvbWUyBggAEEUYOTIGCAEQRRg90gEINzcxNmowajGoAgCwAgE&sourceid=chrome&ie=UTF-8
base-62 a7e5KjQIEzy8LpqhIspXozEcXOy2Odjyze5QuBkUOYmp46s0lawi5coaNHSGmKIvU2eZJoLVLJKqRKhYFIXt8J2DaCJSj9JkmnHYhzEtA2q7yZTapG8FocfsNrpFa1LlFKI7tG6FUx17W7VSdGkWhKZfgPGrtWO5OqRHSkf0s7j0lea8vkNXDbzGMKS682E5S3pzWfOWTuTINzXiGdCYnYjF4qLzOEAxSPo

 

62진수로 변환되고, 역변환도 가능한 만큼 원본 문자열의 길이에 따라 여전히 긴 문자열로 변환된다.

따라서 주로 관계형 DB의 테이블 ID를 base-62 변환하여 단축 URL을 생성하게 된다.

 

PK_id 단축 URL 실제 URL
10000001 5K1WLnfhB3 https://www.google.com/search?q=%EB%A7%81%ED%81%AC+%EB%8B%A8%EC%B6%95&oq=%EB%A7%81%ED%81%AC+%EB%8B%A8%EC%B6%95&gs_lcrp=EgZjaHJvbWUyBggAEEUYOTIGCAEQRRg90gEINzcxNmowajGoAgCwAgE&sourceid=chrome&ie=UTF-8

 

 

이때 단축 서비스가 서버 부하를 고려한 분산 시스템이라면, 테이블 ID 생성이 다른 서버가 생성한 ID와 겹쳐서는 안 된다.

이를 위해 트위터(X)의 스노우 플레이크와 같은 분산 시스템을 위한  ID 생성 기법을 사용할 수 있다.

 

 

 

 

 

 

 

 

참조

https://vivoldi.com/blog/url-shortener/why-use-long-links-to-be-shortened/

가상 면접 사례로 배우는 대규모 시스템 설계 기초(알렉스 쉬 저)

 

 

반응형
댓글
반응형
인기글
Total
Today
Yesterday
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
글 보관함