이전 프로젝트에서 초대기능을 구현한다고 URL Shortener를 구현했었는데 급하게 구현한다고 제대로 하지 못한 것 같아서 그것을 보완해보기 위해 한번 처음부터 구현해보는 것을 목표로 한다.
여기서 나오는 URL Shortener는 가상 면접 사례로 배우는 대규모 시스템 설계 기초 - 8장 URL 단축기 설계를 바탕으로 한번 구현해보려고 한다.
1. 링크줄이기 단축URL 서비스란?
- 긴 URL을 짧게 줄이고 짧게 줄여진 URL을 클릭하면 원래의 긴 URL로 이동되는 웹 기술입니다.
- 짧게 줄여진 URL은 카카오톡 메시지 전송, 문자 전송, 메일 전송 등 다양하게 사용됩니다. 특히 글 내용에 제약이 있을 경우 힘을 더 발휘합니다.
- 짧게 줄여진 URL을 클릭하면 원래의 긴 URL로 이동되기 전 여러가지 통계 데이터가 저장되고 대시보드 페이지에서 통계를 확인할 수 있습니다.
2. URL Shortener를 쓰는 이유? 장점?
글 내용 작성에 제약이 있는 경우 단축URL은 큰 힘을 발휘합니다.
URL단축 즉, URL줄이기는 하이퍼링크 텍스트를 더 매력적으로 보이게 합니다.
일반적으로 웹사이트 링크는 많은 공간을 차지합니다. 무작위 문자와 숫자로 구성된 매력적이지 않은 문자열인 경우가 많으며 산만하고 미학적으로 불쾌할 수 있습니다.
단축된 링크는 특히 소셜 미디어 플랫폼에서 글을 가독성있고 쉽고 부드럽게 만들고 시청자가 컨텐츠를 더 쉽게 공유할 수 있고 링크를 복사할 때 오류를 범할 가능성이 줄어듭니다.
정리하자면 긴 URL을 짧게 축소 시켜서 글 내용 작성에 제약이 있는 경우 효율적으로 사용할 수가 있고, 매력이지 않은 긴 URL보다 가독성이 좋기 때문에 부드럽고 오류를 범할 가능성도 낮아지므로 사용하기 좋습니다. 초대기능과 같이 긴 URL이 필요하지 않은 경우에도 잘 사용할 수 있습니다.
3. URL 단축기 설계
API 엔드포인트
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 Shortener의 동작
API로 넘어온 longURL을 통해서 단축기가 해야 하는 일은 다음과 같다.
1. 입력으로 긴 URL을 받는다.
2. 데이터베이스에 해당 URL이 있는지 검사한다.
3. 데이터베이스에 있다면 해당 URL에 대한 단축 URL을 DB에서 꺼내 반환하면 된다.
4. 데이터베이스에 없을 경우에는 해당 URL는 새로 접수된 것이므로 유일한 ID를 생성한다 ( auto_increment, UUID, 트위터 스노플레이크 등으로 유니크한 ID 생성)
5. Base-62를 통해 , 해당 ID를 단축 URL로 변환
6. ID, 단축 URL, 원본 URL로 DB 레코드를 만든 후 단축 URL을 클라이언트에 전달.
이런 방식으로 URL Shortener를 구현해 볼 생각이다.
참고
https://vivoldi.com/blog/url-shortener/why-use-long-links-to-be-shortened/
가상 면접 사례로 배우는 대규모 시스템 설계 기초 8장 - https://product.kyobobook.co.kr/detail/S000001033116
가상 면접 사례로 배우는 대규모 시스템 설계 기초 | 알렉스 쉬 - 교보문고
가상 면접 사례로 배우는 대규모 시스템 설계 기초 | '페이스북의 뉴스 피드나 메신저,유튜브, 구글 드라이브 같은 대규모 시스템은 어떻게 설계할까?' IT 경력자라도 느닷없이 대규모 시스템을
product.kyobobook.co.kr