개발을 하다 보면 알 수 없는 영문 대소문자와 숫자가 섞여 있고, 끝이 = 또는 ==로 끝나는 긴 문자열을 마주칠 때가 있습니다. 바로 Base64 인코딩된 데이터입니다. 오늘은 이 Base64가 도대체 무엇인지, 왜 굳이 데이터 크기가 늘어나는 것을 감수하고 사용하는지, 그리고 파이썬(Python)으로 이를 어떻게 다루는지에 대해 정리해 보려고 합니다.
1. Base64란 무엇인가?
Base64는 이진 데이터(Binary Data)를 텍스트(ASCII 문자)로 변경하는 인코딩 방식 중 하나입니다. 컴퓨터 분야에서 '64'라는 숫자는 26을 의미합니다. 즉, 64진법을 사용한다는 뜻인데, 64개의 문자로 모든 데이터를 표현한다는 것이 핵심입니다.
- 사용되는 문자:
A-Z(26개),a-z(26개),0-9(10개),+,/(2개) = 총 64개 - 패딩(Padding): 데이터를 24비트 단위로 맞추기 위해 끝부분에
=문자를 채워 넣습니다. (그래서 Base64 문자열 뒤에==가 자주 보이는 것입니다.)
2. 왜 사용할까? (Base64의 목적)
"그냥 바이너리 그대로 보내면 되지, 왜 굳이 변환하나요?" 가장 큰 이유는 데이터 전송의 안전성 때문입니다.
우리가 사용하는 이메일(SMTP)이나 HTML 등 많은 통신 프로토콜은 기본적으로 텍스트 기반으로 설계되었습니다. 여기에 이미지나 오디오 같은 바이너리 파일을 그대로 넣으면, 시스템 간의 문자 처리 방식 차이로 인해 데이터가 깨지거나 손실될 위험이 있습니다.
Base64로 인코딩하면 모든 데이터가 안정한 ASCII 문자로만 구성되므로, 어떤 시스템을 거치더라도 데이터가 원본 그대로 전송됨을 보장받을 수 있습니다.
장점:
- 통신 과정에서 바이너리 데이터 손실을 막아준다.
- HTML이나 CSS 파일 내부에 이미지 등을 직접 텍스트 형태로 임베딩할 수 있다. (Data URI Scheme)
단점:
- 6비트씩 묶어서 표현하기 때문에 데이터 크기가 원본보다 약 33% 커진다.
- 사람이 읽을 수 없지만, 암호화 방식은 아니므로 보안 기능은 없다. (누구나 디코딩 가능)
3. Python으로 Base64 다루기
파이썬에서는 기본 내장 라이브러리인 base64를 통해 아주 쉽게 인코딩/디코딩을 할 수 있습니다.
import base64
# 인코딩할 문자열 (바이트로 변환 필요)
original_text = "안녕하세요, 뚝딱툴입니다."
original_bytes = original_text.encode('utf-8')
# 1. Base64 인코딩
encoded_bytes = base64.b64encode(original_bytes)
encoded_str = encoded_bytes.decode('utf-8')
print(f"인코딩 결과: {encoded_str}")
# 결과 예시: 5a6c5yTb... (읽을 수 없는 문자열)
# 2. Base64 디코딩
decoded_bytes = base64.b64decode(encoded_str)
decoded_text = decoded_bytes.decode('utf-8')
print(f"디코딩 결과: {decoded_text}")
# 결과: 안녕하세요, 뚝딱툴입니다.
4. 이미지를 Base64로 변환하기
웹 개발을 하다 보면 작은 아이콘 이미지를 별도 파일 요청 없이 HTML에 바로 넣고 싶을 때가 있습니다. 이럴 때도 유용합니다.
import base64
with open("image.png", "rb") as image_file:
encoded_string = base64.b64encode(image_file.read())
print(encoded_string.decode('utf-8'))
이렇게 나온 문자열을 HTML img 태그에 넣으면 브라우저가 이미지를 그려줍니다.<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgA...">
5. 코딩 없이 바로 변환하고 싶다면?
개발 중에 디버깅을 하거나, 급하게 JWT 토큰 내용을 확인해야 할 때, 혹은 이미지를 텍스트로 바꿔야 할 때 매번 파이썬 코드를 짤 수는 없겠죠?
다양한 도구 사이트에서 Base64 변환 기능을 제공하고 있습니다.
- 텍스트 ↔ Base64 변환
- 실시간 인코딩/디코딩
- 서버 전송 없이 클라이언트 브라우저에서 처리 (보안 안심)
즐겨찾기 해두시면 개발할 때 유용하게 쓰실 수 있을 겁니다.
👉 Base64 간편 변환기 바로가기:
https://ddtool.online/tools/base64-converter
Base64 인코더/디코더 - 뚝딱툴
텍스트와 파일을 Base64로 변환하거나 Base64를 원본으로 복원합니다
ddtool.online
