Base64란?
Base64는 바이너리 데이터를
ASCII 문자열로 인코딩하는 방식입니다. 텍스트 기반 시스템에서 이진 데이터를 안전하게 전송하기 위해 사용됩니다.왜 필요한가?
일부 시스템(예: 이메일, JSON)은 바이너리 데이터를 처리하지 못하기 때문에, 이를 텍스트로 변환하는 인코딩 방식이 필요합니다.
Base64의 탄생 배경
1. 바이너리 데이터를 전송하기 어려운 환경
1980~90년대의 전자통신 시스템(특히 이메일과 초기 네트워크 프로토콜)은 다음과 같은 제한사항이 있었습니다.- 7비트 ASCII 문자만 안정적으로 처리 가능
- 바이너리 파일(예: 이미지, 실행파일, PDF 등)을 전송하면 깨지거나 손실 발생
- 인코딩되지 않은 바이너리 데이터는 전송 도중 오류가 생길 수 있음
2. MIME 표준의 등장 (RFC 2045~2049)
1990년대 초반, 이메일을 통해 텍스트 외의 콘텐츠(이미지, 첨부파일 등)를 안전하게 전송하기 위한 표준인 MIME (Multipurpose Internet Mail Extensions)이 등장했습니다.- MIME은 텍스트 기반의 이메일에서 바이너리 파일을 전송할 수 있게 만들기 위해 Base64 인코딩을 채택
- RFC 2045에서 Base64가 정식 정의됨 (1996년)
3. 전송 안정성과 호환성
Base64는 다음과 같은 장점 덕분에 널리 사용되었습니다.- 바이너리 전송 불안정 - ASCII 문자로 안전하게 변환
- 이메일에서 첨부파일 깨짐 - Base64로 인코딩하여 안정적인 전송 가능
- 네트워크에서 제어 문자 오작동 - 제어 문자를 포함하지 않는 안전한 문자셋 사용
- 프로그래밍 언어 간 호환성 - 언어에 무관한 문자열 기반 처리
🧮 인코딩 원리
| 1단계 | 원본 데이터를 3바이트(24비트)씩 읽음 |
|---|---|
| 2단계 | 6비트씩 나누어 총 4개의 숫자로 분리 (2⁶ = 64 → Base64) |
| 3단계 | 아래 64개의 문자로 매핑하여 출력 |
| Index | Character |
|---|---|
| 0 | A |
| 1 | B |
| 2 | C |
| 3 | D |
| 4 | E |
| 5 | F |
| 6 | G |
| 7 | H |
| 8 | I |
| 9 | J |
| 10 | K |
| 11 | L |
| 12 | M |
| 13 | N |
| 14 | O |
| 15 | P |
| 16 | Q |
| 17 | R |
| 18 | S |
| 19 | T |
| 20 | U |
| 21 | V |
| 22 | W |
| 23 | X |
| 24 | Y |
| 25 | Z |
| 26 | a |
| 27 | b |
| 28 | c |
| 29 | d |
| 30 | e |
| 31 | f |
| 32 | g |
| 33 | h |
| 34 | i |
| 35 | j |
| 36 | k |
| 37 | l |
| 38 | m |
| 39 | n |
| 40 | o |
| 41 | p |
| 42 | q |
| 43 | r |
| 44 | s |
| 45 | t |
| 46 | u |
| 47 | v |
| 48 | w |
| 49 | x |
| 50 | y |
| 51 | z |
| 52 | 0 |
| 53 | 1 |
| 54 | 2 |
| 55 | 3 |
| 56 | 4 |
| 57 | 5 |
| 58 | 6 |
| 59 | 7 |
| 60 | 8 |
| 61 | 9 |
| 62 | + |
| 63 | / |
✅ 인코딩 예제
- 입력 문자열: Hello
- ASCII 값: H(72) e(101) l(108) l(108) o(111)
- Base64 인코딩 결과: SGVsbG8=
- ASCII 값: H(72) e(101) l(108) l(108) o(111)
- Base64 인코딩 결과: SGVsbG8=
✅ 디코딩 예제
- Base64 문자열: SGVsbG8=
- 디코딩 결과: Hello
- 디코딩 결과: Hello
📌 활용 예시
- MIME 이메일 첨부파일
- HTML/CSS 인라인 이미지
- JWT Payload
- HTTP Basic Auth
⚠️ 주의사항
- 보안 목적의 암호화가 아님 (디코딩 가능)
- 약 33% 데이터 크기 증가
🛠️ JavaScript 예제
const encoded = btoa('Hello');const decoded = atob(encoded);

