[데브코스] Short URL 과제

텐저린티·2023년 10월 6일
0

데브코스

목록 보기
41/41

🔑 과제 소개

SprintBoot로 URL Shortener 구현

🚀 요구사항

  • URL 입력폼 제공 및 결과 출력
  • URL Shortening Key는 8 Character 이내로 생성
  • 단축된 URL 요청 시 원래 URL로 리다이렉션
  • optional 단축된 URL에 대한 요청 수 정보 저장
  • optional Shortening Key를 생성하는 알고리즘 2개 이상 제공하며 애플리케이션 실행중 동적으로 변경 가능

🔗 GitHub

https://github.com/SY97P/springboot-url-shortener.git

🗂️ API 명세

URL 입력 폼

MethodURI
GET/

원본 URL을 단축 URL로 매핑

MethodURI
POST/shortener
Request ParameterTypeDescription
originUrlString원본 URL
Response ParameterTypeDescription
mappingUrlMappingResponse매핑 결과

단축 URL에 대한 원본 URL로 리다이렉션

MethodURI
GET/{shortUrl}
Path VariableTypeDescription
shortUrlString단축 URL

URL 매핑 정보 조회

MethodURI
GET/mappings
Response ParameterTypeDescription
mappingsUrlMappingResponses모든 매핑 정보
pageInfoPageInfo페이징 정보

🤖 DataBase 테이블

📺 동작 화면

메인화면

메인화면

상세 페이지

모든 매핑 조회 페이지

단축 URL 요청 횟수 증가한 상태

⌛️ 회고

단축 URL 알고리즘엔 Base62가 자주 쓰임

단축 = 압축
옛날 학부 때 압축 알고리즘 배우면서 Base64 알게 됐다.
핵심은 임의의 값을 적은 바이트의 데이터로 치환하는 것.
다만 Base64보다 Base62가 URL 단축에 유리한 이유는 쿼리 파라미터가 위험해질 수 있기 때문이다.
Base64에 들어가는 문자 +, / 때문에 쿼리 파라미터에 영향을 줄 수 있다는 것.
때문에 이 두 문자를 제거한 Base62를 쓴다고 한다.
다른 압축 알고리즘도 많이 있으니 쓰면 된다. 다만, 가성비 있는 건 Base62 인 것 같다.

Base64를 쓰는 방법도 있다.
다만, 라이브러리를 사용하는 것이 아니라, 직접 문제가 되는 두 문자를 -, _ 로 바꿔서 사용하는 방식이다.

나는 이렇게 두 가지 알고리즘으로 단축 URL을 구현했다.

Base62 알고리즘을 써도 원본 URL 보다 단축될 수 있는 이유

이유는 간단하다.
원본 URL, 단축 URI 가 매핑된 row 에 식별자 (가능하면 숫자)에 Base62를 적용하기 때문.
식별자값이 Long 타입 이내라면 그리 길지 않은 문자열로 치환이 가능해진다.
원본 URL에 직접 알고리즘을 적용하는 것이 아니란 것이 결론.

타임리프 써본 소감

리액트로 대부분의 프론트 작업을 한다.
이번엔 리액트가 좀 과한 것 같고, IDE 두 개 띄우기 싫어서 그냥 서버 사이드 렌더링으로 해결해보고 싶었다.
타임리프가 제격이었고, 문법은 아는데 예쁘게 만들기가 어려워서 시간을 좀 잡아먹었다.
자꾸 예쁜 프론트에 욕심이 난다.

H2 DB 써본 소감

서버 사이드 렌더링 채택과 마찬가지로 작은 규모의 플젝이라, 메모리 기반 H2 데이터베이스를 사용했다.
이참에 H2 DB 파일도 뜯어보고 재밌었다.
다음에는 TCP 방식 H2 도 써봐야겠다.

profile
개발하고 말테야

0개의 댓글

관련 채용 정보