Base64 File Encoder

모든 파일을 Base64로 인코딩 — PDF, ZIP, 이미지 등

파일을 여기에 드래그하거나 클릭하여 업로드

모든 파일 형식 지원: PDF, ZIP, 이미지, 바이너리 파일

Base64 파일 인코딩이란?

Base64 파일 인코딩은 PDF, ZIP, 이미지, 실행 파일, 폰트, 오디오 등 바이너리 파일을 RFC 4648에 정의된 알파벳을 사용해 순수 ASCII 텍스트로 변환합니다. 바이너리 입력 3바이트마다 4개의 Base64 문자가 생성되며, 그 결과는 텍스트 전용 채널인 JSON API 페이로드, XML 문서, 이메일 본문, HTML 속성, 환경 변수 등을 통해 안전하게 전송할 수 있습니다.

문자열을 대상으로 하는 텍스트-Base64 인코딩과 달리, 파일-Base64 인코딩은 파일 형식에 관계없이 원시 바이트 스트림을 그대로 읽습니다. PDF의 바이너리 헤더, ZIP의 압축 블록, PNG의 픽셀 데이터 모두 동일하게 처리됩니다 — 옥텟(octet) 시퀀스로서 재인코딩됩니다. 결과물은 항상 유효한 ASCII이며, 인쇄 가능한 문자를 허용하는 어디서든 안전하게 삽입할 수 있습니다.

단점은 크기입니다. Base64 출력은 원본 바이너리보다 약 33% 더 큽니다. 1 MB PDF라면 약 1.33 MB의 Base64 텍스트가 됩니다. 이 오버헤드는 8비트 바이트를 6비트 문자로 표현하는 데서 오는 본질적인 비용이며, 어떤 구현으로도 피할 수 없습니다. 그럼에도 Base64 파일 인코딩은 MIME(RFC 2045), 데이터 URI(RFC 2397), JSON Web Token(RFC 7519)에 걸쳐 명시된, 텍스트 전용 형식에 바이너리 데이터를 삽입하는 표준 방법으로 남아 있습니다.

이 Base64 파일 인코더를 사용하는 이유

이 도구는 브라우저에서 FileReader API를 사용해 직접 파일을 Base64로 인코딩합니다. 파일이 서버에 업로드되지 않으며, 전체 변환이 JavaScript로 클라이언트 측에서 이루어집니다.

🛡
프라이버시 우선 처리
파일이 기기를 벗어나지 않습니다. FileReader API가 파일을 로컬 메모리에 읽어들이고, Base64 출력이 전적으로 브라우저 내에서 생성됩니다. 네트워크 요청이 전혀 발생하지 않습니다.
즉시 드래그 앤 드롭
도구 위에 파일을 드롭하면 즉시 Base64 출력을 확인할 수 있습니다. 업로드 대기 시간, 진행 표시줄, 서버가 부과하는 파일 크기 제한이 없습니다.
📁
모든 파일 형식 지원
PDF, ZIP, 이미지, 폰트, 오디오 파일, WebAssembly 모듈, 그 밖의 모든 바이너리 형식을 인코딩할 수 있습니다. 인코더는 모든 파일을 원시 바이트 스트림으로 처리하므로 형식은 중요하지 않습니다.
🔒
계정 불필요
회원 가입, 로그인, 쿠키 동의 없이 즉시 사용할 수 있습니다. 결과물은 클릭 한 번으로 복사하거나 .b64.txt 파일로 다운로드할 수 있습니다.

Base64 파일 인코딩 활용 사례

프론트엔드 개발자
작은 아이콘, 폰트, SVG를 데이터 URI로 CSS나 HTML에 직접 삽입해 추가 HTTP 요청을 제거하세요. 2 KB 아이콘을 Base64로 인라인하면 50-200 ms의 지연 시간을 유발하는 네트워크 왕복을 절약할 수 있습니다.
백엔드 엔지니어
전송 프로토콜이 멀티파트 업로드를 지원하지 않을 때 JSON API 페이로드에 파일 첨부를 포함시키세요. PDF, 보고서, 서명된 문서를 인코딩한 후 REST 또는 GraphQL 응답의 문자열 필드로 전송할 수 있습니다.
DevOps / 인프라
바이너리 설정 파일(TLS 인증서, SSH 키, 라이선스 파일)을 환경 변수, Kubernetes Secret, Terraform tfvars에 Base64 문자열로 저장하세요 — 원시 바이너리 값을 허용하지 않는 곳에서 사용할 수 있습니다.
QA / 테스트 엔지니어
버전 관리에 바이너리 테스트 파일을 관리하지 않고도, 업로드 엔드포인트, 이메일 첨부 처리, 문서 처리 파이프라인을 검증하는 자동화 테스트용 Base64 파일 픽스처를 생성하세요.
데이터 엔지니어
Parquet 메타데이터, Protobuf 스키마, 소형 바이너리 자산 등의 바이너리 블롭을 JSON 기반 데이터 카탈로그, 설정 저장소, 마이그레이션 스크립트에 저장하기 위해 Base64로 직렬화하세요.
학생 / 학습자
작은 파일을 인코딩하고 출력을 살펴보면서 바이너리 파일이 텍스트로 변환되는 과정을 관찰하세요. Base64 길이를 원본 파일 크기와 비교해 RFC 4648에 설명된 33% 오버헤드를 직접 확인할 수 있습니다.

Base64 파일 크기 오버헤드

Base64 인코딩은 데이터 크기를 정확히 1/3 증가시킵니다. 입력 3바이트마다 4개의 출력 문자(각각 6비트를 표현)가 생성됩니다. 입력 길이가 3의 배수가 아닐 경우 패딩 문자(=)가 추가됩니다. 아래 표는 원본 파일 크기와 인코딩된 출력 크기의 관계를 보여줍니다.

파일 크기원시 바이트Base64 바이트오버헤드
1 KB1,024 B1,368 B+33.3%
10 KB10,240 B13,656 B+33.4%
100 KB102,400 B136,536 B+33.3%
1 MB1,048,576 B1,398,104 B+33.3%
5 MB5,242,880 B6,990,508 B+33.3%
10 MB10,485,760 B13,981,016 B+33.3%

데이터 URI 및 MIME 타입 참조

데이터 URI는 data:[MIME 타입];base64,[인코딩된 데이터] 형식을 사용해 파일 내용을 HTML, CSS, JavaScript에 직접 삽입합니다. MIME 타입은 브라우저에게 디코딩된 바이트를 어떻게 해석할지 알려줍니다. 아래는 일반적인 파일 확장자, MIME 타입, 그리고 해당 데이터 URI 접두사입니다.

확장자MIME 타입데이터 URI 접두사
.pdfapplication/pdfdata:application/pdf;base64,...
.zipapplication/zipdata:application/zip;base64,...
.pngimage/pngdata:image/png;base64,...
.jpgimage/jpegdata:image/jpeg;base64,...
.gifimage/gifdata:image/gif;base64,...
.svgimage/svg+xmldata:image/svg+xml;base64,...
.woff2font/woff2data:font/woff2;base64,...
.mp3audio/mpegdata:audio/mpeg;base64,...
.wasmapplication/wasmdata:application/wasm;base64,...
.binapplication/octet-streamdata:application/octet-stream;base64,...

코드 예제

아래 실행 가능한 예제는 JavaScript, Python, Node.js, bash, Go에서 바이너리 파일을 읽고 Base64로 인코딩하는 방법을 보여줍니다. 각 코드는 패딩이 포함된 표준 Base64(RFC 4648 섹션 4)를 출력합니다.

JavaScript (browser)
// Read a file from an <input> element and encode to Base64
const input = document.querySelector('input[type="file"]')
input.addEventListener('change', (e) => {
  const file = e.target.files[0]
  const reader = new FileReader()
  reader.onload = () => {
    const base64 = reader.result.split(',')[1]
    console.log(base64) // → "JVBERi0xLjQK..." (raw Base64, no data URI prefix)
  }
  reader.readAsDataURL(file)
})

// Convert a Blob to Base64 with async/await
async function blobToBase64(blob) {
  const buffer = await blob.arrayBuffer()
  const bytes = new Uint8Array(buffer)
  let binary = ''
  bytes.forEach(b => binary += String.fromCharCode(b))
  return btoa(binary) // → standard Base64 string
}
Python
import base64
from pathlib import Path

# Encode a file to Base64
file_bytes = Path('document.pdf').read_bytes()
encoded = base64.b64encode(file_bytes).decode('ascii')
print(encoded[:40])  # → "JVBERi0xLjQKJeLjz9MKMSAwIG9iago8PA..."

# Write encoded output to a text file
Path('document.b64.txt').write_text(encoded)

# Build a data URI from a file
mime_type = 'application/pdf'
data_uri = f'data:{mime_type};base64,{encoded}'
print(data_uri[:60])  # → "data:application/pdf;base64,JVBERi0xLj..."
Node.js
import { readFileSync, writeFileSync } from 'fs'

// Encode a file to Base64
const buffer = readFileSync('archive.zip')
const base64 = buffer.toString('base64')
console.log(base64.length) // → 1398104 (for a ~1 MB file)

// Save Base64 output to a file
writeFileSync('archive.b64.txt', base64)

// Build a data URI
const mime = 'application/zip'
const dataUri = `data:${mime};base64,${base64}`
CLI (bash)
# Encode a file to Base64 (macOS / Linux)
base64 < document.pdf > document.b64.txt

# Encode with no line wrapping (GNU coreutils)
base64 -w 0 < document.pdf > document.b64.txt

# Encode and copy to clipboard (macOS)
base64 < image.png | pbcopy

# Encode with OpenSSL (available everywhere)
openssl base64 -in archive.zip -out archive.b64.txt

# Pipe directly into curl for API upload
base64 -w 0 < photo.jpg | curl -X POST -d @- https://api.example.com/upload
Go
package main

import (
	"encoding/base64"
	"fmt"
	"os"
)

func main() {
	data, err := os.ReadFile("document.pdf")
	if err != nil {
		panic(err)
	}
	encoded := base64.StdEncoding.EncodeToString(data)
	fmt.Println(len(encoded)) // → 1398104 (for a ~1 MB file)

	// Write to file
	os.WriteFile("document.b64.txt", []byte(encoded), 0644)
}

자주 묻는 질문

Base64로 인코딩할 수 있는 최대 파일 크기는?
이 도구는 전적으로 브라우저에서 실행되므로 제한은 사용 가능한 메모리에 따라 다릅니다. 현대 브라우저는 50-100 MB 이하의 파일을 문제없이 처리합니다. 그보다 큰 파일의 경우, 파일을 청크 단위로 처리하고 전체 출력을 한 번에 메모리에 로드하지 않는 base64(macOS/Linux) 명령줄 도구나 Python의 base64 모듈을 사용하세요.
Base64 출력은 원본 파일보다 얼마나 더 큰가요?
Base64 출력은 항상 입력보다 약 33.3% 더 큽니다. 정확한 공식은 ceil(n / 3) * 4이며, 여기서 n은 입력 바이트 수입니다. 1 MB 파일은 약 1.33 MB의 Base64 텍스트를 생성합니다. 이 오버헤드는 인코딩의 본질적인 특성으로 줄일 수 없습니다.
파일을 Base64로 인코딩해 데이터 URI로 사용할 수 있나요?
네. Base64 문자열 앞에 MIME 타입 접두사를 추가하면 됩니다: data:application/pdf;base64, 뒤에 인코딩된 내용을 붙입니다. 브라우저는 데이터 URI를 일반 파일처럼 디코딩해 렌더링합니다. 데이터 URI는 img src, link href, CSS url(), 앵커 download 속성에서 동작합니다.
Base64 파일 인코딩은 암호화와 같은 건가요?
아닙니다. Base64는 인코딩이지 암호화가 아닙니다. 바이너리 데이터를 텍스트 표현으로 변환하는 것으로, 쉽게 되돌릴 수 있습니다 — Base64 디코더가 있는 누구든 원본 파일을 복원할 수 있습니다. Base64는 기밀성, 무결성, 인증 기능을 제공하지 않습니다. 파일 내용을 보호해야 한다면 먼저 파일을 암호화(예: AES-256-GCM)한 후, 전송을 위해 암호문을 Base64로 인코딩하세요.
Base64 문자열 끝에 = 문자가 하나 또는 두 개 있는 이유는?
= 문자는 패딩입니다. Base64는 입력을 3바이트 그룹으로 처리해 그룹당 4개의 출력 문자를 생성합니다. 파일 크기가 3의 배수가 아닐 경우, 출력 길이가 항상 4의 배수가 되도록 하나 또는 두 개의 패딩 문자가 추가됩니다. = 하나는 마지막 그룹이 2바이트였음을, == 두 개는 마지막 그룹이 1바이트였음을 의미합니다.
명령줄에서 파일을 Base64로 인코딩하려면?
macOS와 Linux에서는 base64 명령을 사용하세요: base64 < file.pdf > file.b64.txt. GNU/Linux에서는 줄 바꿈을 억제하려면 -w 0을 추가하세요. OpenSSL도 사용할 수 있습니다: openssl base64 -in file.pdf -out file.b64.txt. Windows PowerShell에서는: [Convert]::ToBase64String([IO.File]::ReadAllBytes('file.pdf')).
Base64 파일 인코딩과 multipart/form-data 중 언제 무엇을 써야 하나요?
전송 방식이 텍스트 전용 형식을 요구할 때 Base64를 사용하세요 — JSON API, XML-RPC, 환경 변수, Kubernetes Secret이 그 예입니다. HTML 폼이나 바이너리 스트림을 지원하는 REST 엔드포인트로 파일을 업로드할 때는 multipart/form-data를 사용하세요. Multipart는 33% 크기 오버헤드를 피할 수 있어 더 효율적이지만, 서버가 멀티파트 경계를 파싱해야 합니다.