·2분 읽기
Base64 URL-Safe 인코딩 — 일반 Base64와 차이점과 실전 사용 예시
일반 Base64와 URL-Safe Base64의 차이를 정리했어요. JWT 토큰, URL 파라미터, 파일명에 안전한 인코딩까지 실전 예시로 보여드려요.

🔤
Base64 인코더/디코더 바로 사용하기
텍스트를 Base64로 인코딩하거나 디코딩하세요
→
일반 Base64를 URL에 넣으면 왜 깨지나
**Base64**는 바이너리 데이터를 64가지 문자로 표현하는 인코딩이에요. 기본 문자셋은 A-Z, a-z, 0-9, `+`, `/`, `=` 이에요.
그런데 `+`, `/`, `=`는 **URL에 특수 의미**가 있어요. `+`는 공백으로, `/`는 경로 구분자로 해석돼요. URL 쿼리에 Base64 문자열을 그대로 넣으면 깨져요.
**URL-Safe Base64**는 이 세 문자를 URL 안전한 대체 문자로 바꾼 변종이에요.
1. 문자 대체 규칙
| 일반 Base64 | URL-Safe Base64 | 이유 |
|-----------|----------------|------|
| + | - (하이픈) | URL에서 공백으로 해석됨 |
| / | _ (언더스코어) | 경로 구분자 |
| = (패딩) | 생략 또는 . | URL 인코딩 필요 |
변환은 단순 replace 한 번이면 끝이에요.
```javascript
// 일반 → URL-Safe
const urlSafe = standard
.replace(/\+/g, '-')
.replace(/\//g, '_')
.replace(/=+$/, '');
```
2. JWT 토큰은 URL-Safe 필수
JWT(JSON Web Token)는 `header.payload.signature` 세 부분이 URL-Safe Base64로 인코딩돼요. HTTP Authorization 헤더, 쿠키, URL 쿼리 어디에 넣어도 안전하게요.
```
eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ1c2VyMSJ9.abc123-xyz_456
```
`.` 구분자도 URL 안전한 문자예요. JWT 구현 시 반드시 URL-Safe 버전 사용하세요.
3. 언어별 URL-Safe 인코딩
```javascript
// Node.js
Buffer.from('hello').toString('base64url');
// JavaScript (브라우저)
btoa('hello').replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, '');
```
```python
import base64
base64.urlsafe_b64encode(b'hello').decode().rstrip('=')
# 'aGVsbG8'
```
```java
// Java 8+
Base64.getUrlEncoder().withoutPadding().encodeToString("hello".getBytes());
```
4. 주요 활용처 5가지
- **JWT 토큰**: 인증 표준
- **URL 단축 서비스**: 짧은 ID 인코딩
- **OAuth 2.0 state·code_verifier**: PKCE 표준
- **파일명 저장**: 윈도우·리눅스 둘 다 안전
- **QR 코드 내 데이터**: 일부 QR 규격에서 특수문자 문제 회피
5. Toolkio Base64 Converter로 확인
Toolkio에 일반 Base64와 URL-Safe 전환 옵션이 있어요. JWT 페이로드 디코딩 테스트하거나 API 응답 검증할 때 빠르게 확인할 수 있어요.