인코딩이란, 정보의 형태나 형식을 표준화, 보안, 처리 속도 향상, 저장 공간 절약 등을 위해서 다른 형태나 형식으로 변환하는 처리 혹은
처리 방식을 뜻한다.
즉, 컴퓨터가 이해할 수 있는 형식으로 바꾸어 주는 것을 말한다.
형태를 변환하는 것이지 내용을 바꾸는 것은 아니며, 암호화로는 사용이 불가능하다.
디코딩은 변환된 형태를 원래의 형태로 되돌리는 것을 말한다.
인코딩/디코딩 종류로는 ASCII, URL, Base 64, Base 62 등이 있으며, 이를 자세히 살펴보자.
URL 인코딩이란 URL로 사용할 수 없는 문자 혹은 URL로 사용할 수 있지만
의미가 왜곡될 수 있는 문자들을 이스케이프 처리하여 변환하는 것을 말한다.
URL 인코딩은 퍼센트 인코딩이라고도 한다.
그리고 URL 디코딩이란 변환된 URL을 다시 원래의 형태로 되돌리는 것을 말한다.
그렇다면, URL 인코딩/디코딩은 왜 필요한 것일까?
이것을 이해하면, 왜 URL 인코딩/디코딩이 위 그림과 같이 이뤄지는지 이해할 수
있게 될 것이다.
첫번째로, 인터넷을 통해 전송할 수 있는 문자는 오로지 ASCII 문자이기 때문이다.
따라서, ASCII 문자가 아닌 문자는 인터넷을 통해 전송할 수 있는 형태로 변환해줘야 한다.
위 그림에서 빨간색으로 표시된 ‘피그’라는 문자와 파란색으로 표시된 ‘브라더’라는 문자가
바로 그 예시이다.
한글은 ASCII문자가 아니므로 변환이 필요하다. 그리고 이때 변환하는 규칙은
UTF-8을 따른다.
UTF-8에 따르면 한글 문자 1개는 3바이트로 인코딩 된다.
따라서 ‘피그’는 6바이트로, ‘브라더’는 9바이트로 인코딩 된 모습을 볼 수 있다.
두번째로, ASCII 문자라 하더라도 예약된 의미를 가지고 있는 문자의 경우, 그 문자 자체의 의미를
전달하고 싶은 경우에는 이스케이프 처리가 필요하기 때문이다.
이러한 문자의 대표적인 예시로는 ‘/’, ‘&’, ‘=’ 등이 있다.
‘/’은 URL의 각 레벨을 구분해주는 역할을 맡고, ‘&’는 쿼리 파라미터들을 구분해주는 역할을 맡으며,
‘=’ 은 쿼리 파라미터의 값을 지정해주는 역할을 맡는다.
이처럼 문자들은 ASCII 문자이지만 URL 내에서 특별한(예약된) 의미를 가지고 있다.
따라서 이러한 문자들을 문자 그 자체의 의미로서 전달하고 싶다면 이스케이프 처리가 필요하다.
위 그림처럼 keyword라는 쿼리 파라미터의 값으로 ‘피그&브라더’ 를 보내고 싶은 경우가 바로 그 예시이다.
여기서 ‘&’를 이스케이프 해주지 않으면 쿼리 파라미터의 구분자로 인식되어 왜곡된 의미가 전달이 될 것이다.
따라서, ‘&’를 ‘%26’ 으로 인코딩을 하여 문자 그대로의 ‘&’을 전달하고자 한다는 것을 나타내야만 한다.
참고로, URL에서는 공백 문자가 허용되지 않기 때문에 공백 문자는 ‘%20’ 또는 ‘+’로 인코딩 된다.
Base 64를 글자 그대로 변역하여 보면 64진법이란 뜻이다.
Base 62의 경우에는 ‘+’, ‘/’, ‘=’ 문자를 제외한 62개의 값을 표현한다.
긴 URL을 Shorten URL로 만들 때 적합하게 사용될 수 있다.
왜냐하면, URL의 예약어인 ( '/', '=' ) 등의 특수 문자를 사용하지 않기 때문이다.
알파벳 숫자 조합으로 Shorten URL 시퀀스 정보를 표현 가능하다.
https://wonyong-jang.github.io/spring/2021/02/17/Spring-UriComponentsBuilder-restTemplate.html 와 같은 긴 URL을 http://localhost/1000000와 같이 시퀀스 값으로 shorten url을 만들 수 있고, 해당 시퀀스를 base62 인코딩을 통해 더 줄일 수 있다.
1000000 은 10진수로 표현되었으니, 16진수로 표현하면 어떨까?
총 268,435,455 개를 만들 수 있고, 268배 더 만들 수 있다.
그럼 62진수로 표현하면 같은 자릿수이지만 더욱 많은 수를 표현하여 Shorten URL을 제공할 수 있게 된다.
Referrence
https://medium.com/monday-9-pm/%EC%B4%88%EB%B3%B4-%EA%B0%9C%EB%B0%9C%EC%9E%90-url-shortener-%EC%84%9C%EB%B2%84-%EB%A7%8C%EB%93%A4%EA%B8%B0-1%ED%8E%B8-base62%EC%99%80-%EC%B6%A4%EC%9D%84-9acc226fb7eb
https://it-eldorado.tistory.com/143