UTF-8을 Base64URL로 변환하는 가이드 (2026)

A clean, modern visual representing the conversion from text data to secure web URL strings.

UTF-8을 Base64URL로 변환하려면 4단계를 거칩니다: (1) 텍스트를 UTF-8 바이트로 인코딩, (2) 표준 Base64 적용, (3) +-로, /_로 교체, (4) 끝의 = 패딩 제거. 이렇게 하면 RFC 4648을 준수하는URL 안전 문자열이 생성되며, JWT와 API 헤더에 널리 사용됩니다.

표준 Base64와 Base64URL의 차이

항목 표준 Base64 Base64URL 이유
62번째 문자 + - +는 URL에서 공백을 의미함
63번째 문자 / _ /는 URL의 경로 구분자
패딩 = 필수 생략 =는 URL에서 %3D가 됨
URL 안전 아니요 쿼리 문자열과 파일명에 직접 사용 가능

RFC 4648 §5에 따라, 이 「URL 및 파일명 안전 알파벳」은 시스템 간 호환성을 보장합니다.

표준 Base64와 Base64URL의 안전하지 않은 문자에 대한 간단한 비교 그림.

4단계 변환 프로세스

단계 작업 예시 (“Hello”)
1 UTF-8 텍스트 → 바이트 H e l l o → 바이트 배열
2 바이트 → 표준 Base64 SGVsbG8=
3 +-로, /_로 교체 여기서는 변경 불필요
4 끝의 = 패딩 제거 SGVsbG8

위키백과에 따르면, Base64 인코딩은 데이터 크기를 약 33% 증가시킵니다.

4단계 변환 파이프라인: 텍스트 → 바이트 → Base64 → Base64URL.

유니코드 및 이모지 처리

NextUtils에 따르면, Base64는인코딩이지 암호화가 아닙니다—텍스트 전용 채널을 통해 데이터를 전송하는 것입니다. 깨진 문자(「Mojibake」)를 방지하려면 반드시 TextEncoder를 사용하여 UTF-8 바이트로 먼저 변환해야 합니다.

입력 TextEncoder 미사용 TextEncoder 사용
Hello 세계! 🌍 깨진 문자 / TypeError 올바른 Base64URL

코드 예시

JavaScript (브라우저) — 유니코드 안전

function toBase64Url(str) {
    const bytes = new TextEncoder().encode(str);
    const base64 = btoa(String.fromCharCode(...bytes));
    return base64.replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, '');
}

Python 3 — 표준 라이브러리

AskPython에 따른 설명:

import base64

data = "Hello 세계! 🌍"
encoded = base64.urlsafe_b64encode(data.encode('utf-8')).decode('utf-8').rstrip('=')
print(encoded)

Node.js — Buffer 변환

const str = "API_Payload_Data";
const base64url = Buffer.from(str, 'utf8')
    .toString('base64')
    .replace(/\+/g, '-')
    .replace(/\//g, '_')
    .replace(/=/g, '');

문제 해결: 패딩 오류

오류 원인 해결 방법
binascii.Error: Incorrect padding = 패딩 누락 길이가 4의 배수가 될 때까지 = 추가
atob()에서 TypeError 비 ASCII 문자 포함 먼저 TextEncoder 사용
출력이 깨짐 UTF-8 인코딩 건너뜀 Base64 전에 항상 바이트로 인코딩

AskPython에 따르면, 누락된 패딩 계산 방법: padding_needed = (4 - len(data) % 4) % 4, 그 다음 해당 개수만큼 = 문자를 추가합니다.

사용 사례: JWT와 Data URI

JWT (JSON Web Token) 구조

부분 내용 인코딩 방식
헤더 알고리즘 + 토큰 유형 Base64URL
페이로드 클레임 (사용자 데이터, 만료 시간) Base64URL
서명 HMAC 또는 RSA 서명 Base64URL

JWT는 보통 eyJ로 시작합니다—이것은 {(JSON 여는 중괄호)의 Base64URL 인코딩입니다.

JWT 구조의 시각화 다이어그램. 3개의 Base64URL 파트를 보여줍니다.

사용 사례별 Base64와 Base64URL 선택

사용 사례 인코딩 방식 패딩
JWT 토큰 Base64URL 생략
Data URI (임베디드 이미지) 표준 Base64 필수
HTTP Basic 인증 표준 Base64 필수
URL 쿼리 매개변수 Base64URL 생략

결론

4단계: UTF-8 바이트 → Base64 → +/-_로 교체 → 패딩 제거. JavaScript에서는 TextEncoder를, Python에서는 base64.urlsafe_b64encode()를, Node.js에서는 Buffer를 사용하세요. RFC 4648을 준수하여 시스템 간 호환성을 확보하세요. Base64URL은인코딩이지 암호화가 아닙니다—보안을 위해서는 AES-256 또는 TLS를 사용하세요.

자주 묻는 질문

Base64URL은 암호화와 같은 건가요?

아닙니다.Base64URL은 가역적인 인코딩입니다—누구나 키 없이 디코딩할 수 있습니다. 민감한 데이터 보호에는 AES-256 또는 TLS/SSL을 사용하세요.

Base64URL이 표준 Base64 디코더에서 실패하는 이유는?

표준 디코더는 +, /, 그리고 = 패딩을 기대합니다. Base64URL은 -, _를 사용하고 패딩을 생략합니다. 디코딩 전에 문자 교체를 되돌리고 패딩을 복원해야 합니다.

JWT에서 패딩이 생략되는 이유는?

= 문자는 URL에서 %3D가 되어 문자열이 더 길어지고 읽기 어려워집니다. RFC 4648은 디코더가 패딩 마커 없이도 원래 길이를 재구성할 수 있으므로 생략을 허용합니다.

코멘트

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다