Base64 인코딩이란?
한 줄 요약: 8비트 이진 데이터(이미지, 영상, 실행 파일 등)를 문자 코드에 영향을 받지 않는 공통 ASCII 문자들로 바꾸는 인코딩 방식입니다.
쉽게 말해, 컴퓨터가 사용하는 이진(Binary) 데이터를 사람이 읽을 수 있는 텍스트(Text) 형태로 잠시 변환하는 규칙
1. 왜 사용할까요? (The ‘Why’)
컴퓨터 시스템 중에는 텍스트 데이터만 안전하게 처리할 수 있도록 설계된 환경이 많습니다. (예: 이메일 전송 프로토콜, HTML/CSS 문서 등)
이런 환경에 이미지나 영상 같은 이진 데이터를 직접 넣으면, 데이터의 특정 바이트(Byte) 값이 시스템이 사용하는 제어 문자(예: 줄바꿈, Null 등)와 충돌하여 데이터가 깨지거나 왜곡될 수 있습니다.
Base64는 이러한 문제를 해결하기 위해, 어떤 시스템에서든 안전하게 전송될 수 있는 64개의 ‘안전한’ 출력 문자들로 데이터를 변환하는 것입니다.
이 64개의 문자는 알파벳 대소문자(A-Z, a-z), 숫자(0-9), 그리고 ’+‘와 ’/’ 기호로 이루어져 있습니다.
2. 어떻게 동작하나요? (The ‘How’)
Base64는 이진 데이터를 6비트(bit) 단위로 잘라서 처리합니다.
예시: “Man”이라는 텍스트를 Base64로 인코딩하는 과정
-
원본 데이터를 아스키 코드로 변환
M→ 77a→ 97n→ 110
-
아스키 코드를 8비트 이진수로 변환
77→0100110197→01100001110→01101110
-
모든 비트를 하나로 이어붙임 (총 24비트)
010011010110000101101110
-
6비트 단위로 자름
010011010110000101101110
-
6비트 덩어리를 10진수로 변환
010011→ 19010110→ 22000101→ 5101110→ 46
-
10진수 값을 Base64 색인표에서 찾아 문자로 치환
- 19 →
T - 22 →
W - 5 →
F - 46 →
u
- 19 →
결과: “Man” → “TWFu”
패딩(Padding)이란? 원본 데이터가 3바이트(24비트)의 배수가 아닐 경우, 남는 공간을 채우기 위해
=문자를 사용합니다. 데이터가 부족해서 6비트 덩어리를 만들 수 없을 때, 모자란 부분은 0으로 채우고 결과 문자열의 끝에=또는==를 붙여 원래 데이터의 길이를 유추할 수 있게 합니다.
3. 주요 사용처 (Use Cases)
-
이메일(MIME 인코딩)
- 이메일에 첨부된 이미지나 파일은 Base64로 인코딩되어 텍스트 메일 본문에 포함된 채로 전송됩니다.
-
HTML/CSS에서 이미지나 폰트 포함 (Data URI Scheme)
- 작은 이미지를 서버에 요청하지 않고 HTML이나 CSS 코드에 직접 포함시킬 때 사용합니다.
<img src="data:image/png;base64,iVBORw0KGgo...">와 같은 형태입니다.
-
웹 토큰 (JSON Web Token, JWT)
- JWT의 헤더(Header)와 페이로드(Payload)는 Base64 URL Safe 방식으로 인코딩됩니다.
-
인증 정보 전달
- HTTP 기본 인증(Basic Authentication)에서
username:password문자열을 Base64로 인코딩하여 서버에 전송합니다.
- HTTP 기본 인증(Basic Authentication)에서
4. 핵심 특징 및 주의사항
- 크기 증가: Base64로 인코딩하면 원본 데이터보다 크기가 약 33% 커집니다. (3바이트가 4개의 문자로 변환되기 때문)
- 암호화가 아님: Base64는 데이터를 숨기기 위한 암호화(Encryption)가 아닙니다. 정해진 규칙에 따라 변환하는 **인코딩(Encoding)**일 뿐이므로, 누구나 원래 데이터로 쉽게 되돌릴(디코딩) 수 있습니다. 따라서 보안 목적으로 사용해서는 안 됩니다.
- 가독성: 이진 데이터를 사람이 읽을 수 있는 텍스트 형태로 보여준다는 장점이 있습니다.
결론적으로 Base64는 이진 데이터를 텍스트 기반 시스템에서 안전하게 전송하고 처리하기 위한 필수적인 변환 도구라고 할 수 있습니다.