·3분 읽기
Base64 인코딩 5가지 실전 활용 - 이메일·이미지·API·인증·웹훅
Base64 인코딩이 어디에 쓰이는지 5가지 실전 사례로 정리했어요. 이메일 첨부·이미지 임베딩·API 헤더·Basic 인증·웹훅 검증 코드 예시 포함.

🔤
Base64 인코더/디코더 바로 사용하기
텍스트를 Base64로 인코딩하거나 디코딩하세요
→
Base64 기본 원리
**Base64는 무엇인가**
- 이진 데이터(바이너리)를 텍스트 64개 문자로 변환
- 사용 문자: A-Z, a-z, 0-9, +, /, = (패딩)
- 데이터 크기 약 33% 증가
- 인코딩이지 암호화 아님 (보안 X)
**왜 필요한가**
- 텍스트만 처리하는 시스템에 바이너리 전달
- 이메일·HTTP 헤더·JSON 등
- URL 안전 변환
**기본 변환 예시**
- 원본: `Hello`
- Base64: `SGVsbG8=`
**URL Safe Base64**
- 일반 Base64의 `+`, `/`을 `-`, `_`로 대체
- URL 파라미터·쿼리스트링에 안전
- JWT 토큰 등에 사용
**디코딩**
- Base64 → 원본 바이너리
- 텍스트·이미지·PDF 등 복원
활용 1·2 — 이메일·이미지
**활용 1 — 이메일 첨부 (MIME)**
이메일 표준은 텍스트만 전송. 첨부파일은 Base64 인코딩.
```
Content-Type: image/png; name="photo.png"
Content-Transfer-Encoding: base64
iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAA...
```
**활용 사례**
- 자동화 이메일 발송 (Python·Node.js)
- API로 이메일 첨부 보내기 (SendGrid·Mailgun)
- 첨부 데이터 데이터베이스 저장
**활용 2 — 이미지 인라인 임베딩 (Data URL)**
HTML·CSS에 이미지를 외부 파일 없이 직접 삽입.
```
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEU..." />
```
**언제 좋은가**
- 작은 아이콘 (10KB 이하)
- 외부 요청 줄여 빠른 로딩
- 이메일 본문 이미지 (외부 차단 회피)
**언제 나쁜가**
- 큰 이미지 (Base64는 33% 증가)
- HTTP 캐싱 안 됨
- 가독성 떨어짐 (HTML 길어짐)
활용 3·4 — API·인증
**활용 3 — API 헤더 (바이너리 전송)**
HTTP 헤더는 텍스트만 — 바이너리 전송 시 Base64.
**예시 — 이미지 업로드 API**
```
POST /upload
X-Image-Data: iVBORw0KGgoAAAANSUhEU...
Content-Type: application/json
{"filename": "photo.png"}
```
**JSON 안에 바이너리 포함**
```json
{
"name": "photo.png",
"data": "iVBORw0KGgoAAAANSUhEU...",
"size": 12345
}
```
**활용 4 — Basic 인증 (HTTP)**
HTTP Basic Auth 표준.
```
Authorization: Basic dXNlcjpwYXNz
```
**디코딩**
- `dXNlcjpwYXNz` → `user:pass`
- 형식: `username:password`
**보안 주의**
- Base64는 암호화 아님 — HTTPS 필수
- 누구나 디코딩 가능 → 평문 노출
- 운영에선 OAuth·JWT 권장
활용 5 + Toolkio + 보안
**활용 5 — 웹훅 서명 검증**
웹훅 (GitHub·Slack·Stripe) 서명에 Base64 사용.
**Stripe 웹훅 예시**
```
Stripe-Signature: t=1614556800,v1=Base64인코딩서명...
```
**검증 단계**
1. 페이로드 + 시크릿 → HMAC SHA256
2. 결과를 Base64 인코딩
3. 헤더의 v1과 비교
4. 일치하면 정상 웹훅
**Node.js 검증 코드**
```javascript
const crypto = require('crypto');
const hash = crypto.createHmac('sha256', secret)
.update(payload)
.digest('base64');
const valid = hash === signature;
```
**Toolkio Base64 변환기**
- 텍스트 ↔ Base64 양방향
- 파일 → Base64 (이미지·PDF)
- URL Safe 옵션
- 결과 즉시 복사
**보안 주의**
- Base64는 암호화 아니에요 — 누구나 디코딩
- 비밀번호·API 키를 Base64로 "숨겼다"고 안전한 게 아님
- 진짜 보안은 AES·RSA 같은 암호화
- HTTPS는 필수 (Base64만으론 평문 노출)
**활용 결정 가이드**
- 바이너리 → 텍스트 전송: ✅ Base64
- 이메일 첨부: ✅ Base64 (MIME 표준)
- API 인증: ⚠️ HTTPS + Basic 또는 OAuth
- 비밀번호 저장: ❌ Base64 X (해시 사용)
- 데이터 암호화: ❌ Base64 X (AES 사용)