이번에 긴 URL을 줄여서 제공하는 Shortener URL을 만드는 과제가 주어졌습니다.
https://velog.io/ 를 byte(8bit)로 표현하면 아래와 같이 된다.
68:74:74:70:73:3a:2f:2f:76:65:6c:6f:67:2e:69:6f:2f (length=17)
URL을 byte로 변경하는 이유는 네트워크 통신을 할 땐, byte 단위로 데이터를 주고 받기 때문이다. ( 사실 7bit인데 나머지 1bit는 데이터에 오류가 있는지 확인하는 패리티 비트다 )
이 byte들을 아스키 문자로 변형하는 Base64 인코딩 방식을 사용하면 아래와 같이 변형된다.
aHR0cHM6Ly92ZWxvZy5pby8=
Base64를 쓰면 62보다 더 많은 표현을 할 수 있겠지만 그럼에도 불구하고 Base62를 사용하는 이유가 있다.
표와 같이 62,63은 특수문자 +, /다. 이 둘이 포함된다면 query string이 제대로 작동하지 않을 수 있거나 다른 시스템에서 예약어로 사용 될 가능성이 높습니다.
그렇기 때문에 특수문자인 +, /를 제외한 62개의 문자를 표현하는 Base62를 사용하는 것이다.
다른 방법들도 있겠지만 지금 이야기 할 방법은 DB에 저장된 ID를 Base62로 인코딩 한 값을 URL로 사용하는 것이다.
사용되는 컬럼은 id(인덱스), url(접속하고자 하는 URL), encoded_id(인코딩된 id)다.
id는 mysql의 경우 auto_increment를 사용하거나 uuid를 사용하거나 여러 방법으로 할 수 있다.
https://metalkin.tistory.com/53
https://en.wikipedia.org/wiki/Base64
https://nhj12311.tistory.com/389