파일을 Base64로 변환하는 방법
- 파일을 하나 이상 상자에 놓거나, 파일 선택 창을 쓰거나, 복사한 파일을 Ctrl+V로 붙여넣으세요.
- 출력 형식을 고르세요: 일반 Base64(이 페이지의 기본값), Data URI, HTML
<a download>, JSON, 그리고 이미지와 글꼴용 래퍼가 있습니다. - 선택 사항: URL-safe는
+와/를-와_로 바꾸고, 76자에서 줄 바꿈은 MIME 이메일용으로 줄을 나눕니다. - 출력 복사를 누르거나, .txt로 저장으로
filename.ext.b64.txt를 받으세요.
파일이 여러 개면 목록에 각 이름과 원래 크기, 인코딩된 크기가 표시됩니다. 표시는 결과 하나를 보여 주고, 모두 JSON으로 복사는 모든 파일을 {name, type, size, data} 객체 배열로 복사합니다. 픽스처 파일이나 시드 스크립트에 바로 붙여넣기 좋습니다.
이미지가 아닌 파일에서 출력 형식의 의미
| 출력 형식 | report.zip의 결과 | 용도 |
|---|---|---|
| 일반 Base64 | UEsDBBQAAAAI... | API 필드, 환경 변수, 설정 값 |
| Data URI | data:application/zip;base64,UEsDBBQA... | HTML이나 JavaScript 안의 URL |
HTML <a download> | <a href="data:application/zip;base64,..." download="report.zip">report.zip</a> | 자체 완결형 다운로드 링크 |
| JSON | {"name": "report.zip", "type": "application/zip", "size": 323, "data": "UEsDBBQA..."} | 테스트 픽스처, 직접 만든 업로드 엔드포인트 |
JSON 키는 고정되어 있습니다(name, type, size, data). API가 다른 이름을 기대하면 붙여넣은 뒤 이름을 바꾸세요. size는 원래 파일 크기(바이트)이므로, 받는 쪽은 디코딩한 길이가 맞는지 확인할 수 있습니다.
data URI의 MIME 형식과 JSON의 type은 브라우저에서 옵니다. 브라우저가 파일을 모르면 도구가 확장자로 추측하고, 그것도 실패하면 application/octet-stream을 씁니다. 이 값에 따라 달라지는 것은 라벨뿐이고, Base64는 어느 쪽이든 같습니다.
CI 시크릿과 설정 속의 바이너리 파일
파일 전체를 인코딩하는 흔한 이유는 텍스트만 담을 수 있는 시크릿 저장소입니다. CI 변수, .env 파일, Kubernetes Secret이 그렇습니다. 서명용 키스토어, 인증서, 서비스 계정 파일은 Base64 한 줄로 들어갔다가 파이프라인에서 복원됩니다.
echo "$KEYSTORE_B64" | base64 -d > release.keystore
이때는 76자에서 줄 바꿈을 꺼 두세요. 줄 바꿈이 들어간 값은 시크릿 UI나 셸에서 망가지는 경우가 많습니다. Kubernetes는 data: 아래의 모든 값을 이렇게 저장하며, Kubernetes Secret 디코더로 다시 읽을 수 있습니다.
첫 문자로 무엇을 인코딩했는지 알아보기
대부분의 파일 형식은 첫 바이트가 고정된 시그니처라서, 디코딩하지 않아도 Base64의 시작 부분으로 형식을 알 수 있습니다. 흔한 예는 다음과 같습니다.
| 파일 형식 | Base64 시작 부분 |
|---|---|
JVBERi0 | |
| ZIP, DOCX, XLSX, PPTX, JAR, APK | UEsDB |
gzip (.gz, .tgz) | H4sI |
| 7-Zip | N3q8ryc |
| Windows EXE 또는 DLL | TVqQ(대부분의 파일), 항상 TV |
| Linux ELF 바이너리 | f0VMRg |
| SQLite 데이터베이스 | U1FMaXRlIGZvcm1hdCAz |
| ID3 태그가 있는 MP3 | SUQz |
| PNG | iVBORw0KGgo |
| JSON 객체 | eyJ ({"의 경우) |
더 긴 목록은 자주 보는 Base64 접두사에 있습니다. Base64를 파일로로 디코딩할 때도 같은 방식으로 형식을 알아냅니다.
크기, 메모리, 큰 파일
Base64 출력은 입력의 4/3이며, 4의 배수 문자로 올림됩니다. 1 MB 파일은 1,398,104문자가 되고, 76자에서 줄 바꿈을 켜면 줄 바꿈 문자 18,396개가 더해집니다. 출력 아래의 카운터에 두 크기와 오버헤드 비율이 표시됩니다.
모든 작업이 브라우저 탭에서 실행되므로 실질적인 한계는 기기의 메모리입니다.
- 텍스트 상자에는 출력의 처음 4 MB만 표시됩니다. 출력 복사와 .txt로 저장은 항상 전체 결과를 사용합니다.
- 출력이 약 48 MB를 넘으면 출력 복사가 비활성화됩니다.
- 약 48 MB보다 큰 파일은 나누어 인코딩되며 결과는 .txt로 저장으로만 제공됩니다.
파일이 그렇게 크다면 Base64가 알맞은 전송 방식인지 생각해 보세요. multipart 업로드나 바이너리 직접 전송은 33% 오버헤드와 양쪽의 메모리 급증을 피할 수 있습니다. 크기 계산기로 시작하기 전에 인코딩 후 크기를 확인하세요.
명령줄이나 코드에서 파일 인코딩하기
Linux, GNU coreutils(-w 0은 기본 76자 줄 바꿈을 끕니다):
base64 -w 0 report.zip > report.zip.b64
macOS(여기의 base64는 기본으로 줄 바꿈하지 않습니다):
base64 -i report.zip -o report.zip.b64
Windows PowerShell:
[Convert]::ToBase64String([IO.File]::ReadAllBytes("C:\data\report.zip")) | Set-Content report.zip.b64
Python:
import base64
from pathlib import Path
encoded = base64.b64encode(Path("report.zip").read_bytes()).decode("ascii")
큰 파일을 메모리에 다 올리지 않고 스트리밍하는 방법은 Python의 Base64, Node.js, Java, PHP를 참고하세요.
자주 생기는 문제
- 출력에 줄 바꿈이 있습니다. GNU
base64는 기본으로 76자에서,openssl base64는 64자에서 줄 바꿈하고,certutil -encode는 헤더 줄까지 붙입니다. 많은 JSON API와 환경 변수는 한 줄이어야 합니다.-w 0,openssl base64 -A를 쓰거나, 이 도구에서 줄 바꿈을 끄세요. - data URI에
application/octet-stream이 들어갑니다. 브라우저가 형식을 몰랐고 확장자도 도구 목록에 없었습니다. 바이트는 그래도 정확합니다. 받는 쪽이 신경 쓴다면 접두사의 MIME 형식을 바꾸세요. - 출력 복사가 회색으로 비활성화됩니다. 결과가 약 48 MB인 복사 한도를 넘었습니다. .txt로 저장은 여전히 되며, 문자열이 필요한 도구는 대부분 파일에서 읽을 수 있습니다.
- JSON에서 파일 하나가
"data": null입니다. 일괄 처리에서 약 48 MB가 넘는 파일은 다운로드 전용으로 나누어 인코딩되므로, 모두 JSON으로 복사에서 데이터가 빠집니다. 그 파일만 따로 인코딩해 .txt로 저장하세요. - 디코딩한 파일이 원본보다 작습니다. 문자열이 잘렸습니다. 디코딩된 길이를 JSON 출력의
size값과 비교하세요. - 입력이 텍스트였는데 출력이 깨집니다. Base64는 원래 문자 인코딩을 포함해 바이트를 그대로 유지합니다. UTF-16 텍스트 파일은 UTF-8이 아니라 UTF-16으로 디코딩되고, EUC-KR로 저장한 파일은 EUC-KR 바이트 그대로 나옵니다. 직접 입력하는 텍스트라면 문자 인코딩을 고를 수 있는 텍스트를 Base64로를 사용하세요.
자주 묻는 질문
어떤 형식의 파일을 Base64로 변환할 수 있나요?
모든 파일이 됩니다. Base64는 바이트를 인코딩할 뿐 그 의미는 신경 쓰지 않으므로, 실행 파일, 압축 파일, 데이터베이스, 문서도 텍스트와 똑같이 처리됩니다. PDF를 Base64로 같은 형식별 페이지는 해당 형식에 대한 안내만 더합니다.
파일 크기 제한이 있나요?
작업이 브라우저에서 이루어지므로 고정된 제한은 없습니다. 약 48 MB까지의 출력은 복사할 수 있고, 그보다 크면 .txt로 저장을 사용하세요. 약 48 MB가 넘는 파일은 나누어 인코딩되며 다운로드로만 제공됩니다.
Windows에서 별도 도구 없이 파일을 Base64로 인코딩하려면 어떻게 하나요?
PowerShell 한 줄이면 됩니다: [Convert]::ToBase64String([IO.File]::ReadAllBytes("C:\path\file.bin")). certutil -encode도 되지만 -----BEGIN CERTIFICATE----- 줄을 붙이고 출력을 줄 바꿈하므로 나중에 지워야 합니다.
data URI에는 어떤 MIME 형식이 쓰이나요?
브라우저가 해당 파일에 대해 알려 주는 형식입니다. 알려 주지 않으면 도구가 확장자로 추측하고, 그래도 모르면 application/octet-stream을 씁니다. 받는 쪽이 특정 형식을 요구하면 접두사를 직접 고치세요.
Base64를 다시 파일로 디코딩하려면 어떻게 하나요?
Base64를 파일로를 사용하세요. 디코딩된 바이트로 파일 형식을 알아내고 맞는 확장자를 제안합니다.