Base64 인코딩이란? 언제 왜 사용하나요?
Base64 인코딩이란?
Base64는 바이너리 데이터(이미지, 파일 등)를 텍스트 형태로 변환하는 인코딩 방식입니다. 이름의 “64”는 사용하는 문자 집합의 수에서 유래합니다 — 영문 대소문자(A-Z, a-z), 숫자(0-9), 그리고 +와 / 기호, 총 64개의 문자만 사용합니다.
Base64로 인코딩된 데이터는 어디서나 안전하게 전송할 수 있는 ASCII 텍스트가 됩니다. 이메일, URL, HTML, JSON 등 텍스트만 허용하는 환경에서 바이너리 데이터를 전달해야 할 때 특히 유용합니다.
왜 Base64가 필요한가?
컴퓨터의 모든 데이터는 근본적으로 0과 1의 이진수(바이너리)로 구성됩니다. 이미지 파일, PDF, 음악 파일 등은 모두 바이너리 데이터입니다. 문제는 많은 시스템과 프로토콜이 텍스트 데이터만 처리하도록 설계되어 있다는 점입니다.
예를 들어:
- 이메일(SMTP): 원래 7비트 ASCII 텍스트만 지원했습니다. 첨부 파일을 보내려면 Base64로 변환해야 했습니다.
- HTML/CSS: 이미지를 별도 파일 없이 HTML/CSS 안에 직접 포함시킬 수 있습니다.
- JSON API: 이미지나 파일을 JSON 페이로드에 담아 전송할 때 사용합니다.
- 인증 토큰: HTTP Basic 인증에서
사용자명:비밀번호를 Base64로 인코딩해 전송합니다.
Base64 인코딩 원리
Base64는 3바이트(24비트)를 4개의 6비트 그룹으로 나누고, 각 그룹을 64개 문자 중 하나로 매핑합니다.
예시: 문자 Man을 Base64로 인코딩해봅시다.
M a n
77 97 110 (ASCII 코드)
01001101 01100001 01101110 (이진수)
6비트씩 나누기:
010011 010110 000101 101110
Base64 문자 매핑:
T W F u
결과: TWFu
원본 3바이트가 4개의 Base64 문자로 변환됩니다. 이 때문에 Base64로 인코딩하면 데이터 크기가 약 33% 증가합니다.
실제 활용 사례
1. HTML에 이미지 직접 삽입 (Data URI)
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNk+M9QDwADhgGAWjR9awAAAABJRU5ErkJggg==" alt="1px 이미지" />
이 방식을 사용하면 작은 아이콘이나 로고를 별도 HTTP 요청 없이 페이지에 포함시킬 수 있습니다. 특히 아이콘이 많은 경우 HTTP 요청 수를 줄여 페이지 로딩 속도를 높이는 데 도움이 됩니다.
2. CSS 배경 이미지
.icon {
background-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==');
}
3. API를 통한 파일 전송
JSON API로 이미지를 업로드할 때:
{
"filename": "profile.jpg",
"content_type": "image/jpeg",
"data": "/9j/4AAQSkZJRgABAQEASABIAAD/..."
}
4. HTTP Basic 인증
Authorization: Basic dXNlcm5hbWU6cGFzc3dvcmQ=
dXNlcm5hbWU6cGFzc3dvcmQ= 를 디코딩하면 username:password 가 됩니다.
5. JWT 토큰
JSON Web Token(JWT)의 헤더와 페이로드는 Base64URL로 인코딩됩니다(URL-safe 버전으로 +→-, /→_).
Base64 인코딩 vs 암호화
중요한 오해를 짚고 넘어가겠습니다. Base64는 암호화가 아닙니다.
| 비교 항목 | Base64 | 암호화 |
|---|---|---|
| 목적 | 형식 변환 | 데이터 보호 |
| 키 필요 | 없음 | 있음 |
| 복원 가능 | 누구나 디코딩 가능 | 키 없이 복원 불가 |
| 보안성 | 없음 | 높음 |
Base64로 인코딩된 데이터는 누구나 쉽게 디코딩할 수 있습니다. 비밀번호나 민감한 정보를 Base64로 “숨긴다”는 것은 보안상 아무 의미가 없습니다.
URL-Safe Base64
표준 Base64의 +와 /는 URL에서 특수한 의미를 가지므로, URL에 Base64를 포함시킬 때는 URL-Safe Base64를 사용합니다.
+→-/→_- 패딩
=→ 생략하거나%3D로 인코딩
JWT, OAuth 토큰, 많은 웹 API에서 URL-Safe Base64를 사용합니다.
Base64 인코딩/디코딩 방법
JavaScript
// 인코딩
const encoded = btoa('Hello, World!');
console.log(encoded); // SGVsbG8sIFdvcmxkIQ==
// 디코딩
const decoded = atob('SGVsbG8sIFdvcmxkIQ==');
console.log(decoded); // Hello, World!
Python
import base64
# 인코딩
encoded = base64.b64encode(b'Hello, World!')
print(encoded) # b'SGVsbG8sIFdvcmxkIQ=='
# 디코딩
decoded = base64.b64decode('SGVsbG8sIFdvcmxkIQ==')
print(decoded) # b'Hello, World!'
명령줄(터미널)
# 인코딩
echo -n "Hello, World!" | base64
# SGVsbG8sIFdvcmxkIQ==
# 디코딩
echo "SGVsbG8sIFdvcmxkIQ==" | base64 --decode
# Hello, World!
마무리
Base64는 복잡한 암호화 기술이 아니라, 단순히 바이너리 데이터를 텍스트로 변환하는 도구입니다. 언제 사용해야 하는지, 그리고 보안 측면에서 어떤 한계가 있는지를 이해하는 것이 중요합니다.
빠르게 텍스트나 파일을 Base64로 변환하고 싶다면 Base64 인코더/디코더 도구를 사용해보세요. 텍스트 입력부터 파일 업로드까지 간편하게 변환할 수 있습니다.