base64, base62?

이창호·2022년 6월 6일
0

공부

목록 보기
2/2

URL을 줄이고 싶습니다.

이번에 긴 URL을 줄여서 제공하는 Shortener URL을 만드는 과제가 주어졌습니다.

줄이려고 하는데, Base64는 뭔가요?

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=

그럼 Base62를 쓰는 이유는?

Base64를 쓰면 62보다 더 많은 표현을 할 수 있겠지만 그럼에도 불구하고 Base62를 사용하는 이유가 있다.


표와 같이 62,63은 특수문자 +, /다. 이 둘이 포함된다면 query string이 제대로 작동하지 않을 수 있거나 다른 시스템에서 예약어로 사용 될 가능성이 높습니다.

그렇기 때문에 특수문자인 +, /를 제외한 62개의 문자를 표현하는 Base62를 사용하는 것이다.

URL을 줄이는 서비스는 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://www.popit.kr/%EC%9E%85-%EA%B0%9C%EB%B0%9C-base64-%EA%B0%80-%EC%9E%88%EB%8A%94%EB%8D%B0-base62-%EA%B0%99%EC%9D%80%EA%B1%B8-%EC%99%9C-%EC%8D%A8%EC%95%BC-%ED%95%98%EB%82%98%EC%9A%94/

https://nhj12311.tistory.com/389

https://jungahshin.tistory.com/15

https://blog.siyeol.com/26

profile
이타적인 기회주의자

0개의 댓글