Base64URL은 Base64 인코딩 방식의 변형입니다. 이 방식은 URL과 파일 시스템에서 안전하게 사용할 수 있게끔 특수 문자를 변경하는 것을 기반으로 합니다.
먼저, Base64 인코딩에 대해 간략하게 이해하겠습니다. Base64는 바이너리 데이터를 ASCII 문자열로 변환하는 인코딩 방식입니다. 원래 8비트 바이너리 데이터를 6비트 단위로 분리하여, 각 6비트를 하나의 문자로 표현합니다. 이 때 문자로 변환할 때 사용하는 64개의 문자가 Base64 인코딩의 이름의 기원입니다.
이 64개의 문자는 대소문자 알파벳(A-Z, a-z), 숫자(0-9), 그리고 '+'와 '/'로 구성됩니다. 이 외에 바이너리 데이터의 길이가 6의 배수가 아닐 경우 패딩을 위해 '=' 문자를 사용합니다.
그런데 Base64 인코딩에 사용되는 '+', '/', '=' 문자는 URL과 파일 시스템에서 특별한 의미를 가지거나 문제를 일으킬 수 있습니다. 예를 들어, '+'는 URL에서 공백을 나타내고, '/'는 경로 구분자로 사용되며, '='은 URL 쿼리 문자열에서 다른 값을 구분하는 데 사용됩니다.
이러한 문제를 해결하기 위해 Base64URL이라는 변형 방식이 제안되었습니다. Base64 인코딩과 동일하게 바이너리 데이터를 ASCII 문자열로 변환하지만, URL과 파일 시스템에서 안전하게 사용할 수 있도록 특수 문자를 변경합니다:
따라서 Base64URL 인코딩된 문자열은 URL과 파일 시스템에서 안전하게 전송하고 저장할 수 있습니다. Base64와 Base64URL은 인코딩 방식이 거의 동일하므로, 한 방식으로 인코딩된 문자열을 다른 방식으로 디코딩할 수 있습니다 (단, 알맞게 문자를 대체하거나 패딩을 추가하는 등의 처리가 필요합니다).
마지막으로, Base64URL은 Base64와 마찬가지로 인코딩된 데이터를 복호화하지 않고도 원래의 바이너리 데이터 크기를 추정할 수 있다는 장점이 있습니다. 이는 Base64URL 인코딩된 문자열의 길이가 원래의 바이너리 데이터 크기의 대략 4/3임을 의미합니다.