IT·개발

Base64 완벽 가이드 — 인코딩 원리, 사용처, 크기 증가와 보안 오해 정리

9분 읽기 · 꿀도구 에디터 · 2026.04.22
Base64 인코딩 완벽 가이드

"Base64는 암호화인가요?"

아닙니다. Base64는 인코딩(encoding)이지 암호화가 아닙니다. 이 오해 하나 때문에 보안사고가 종종 발생합니다. Base64는 이진 데이터를 텍스트로 표현하는 방식으로, 이메일·JSON·URL·JWT에서 바이너리를 안전하게 전송하기 위해 사용됩니다. 이번 글에서는 Base64의 원리와 실무 활용, 흔한 오해를 정리합니다.

Base64가 필요한 이유

이메일·JSON·URL 등은 텍스트 기반 프로토콜입니다. 이미지·PDF 같은 이진 파일을 그대로 넣으면 깨지거나 잘립니다. Base64는 6비트 단위로 끊어 64개 ASCII 문자로 매핑해 이진 데이터를 텍스트로 변환합니다.

  • 사용 문자: A~Z(26) + a~z(26) + 0~9(10) + + + / = 64개
  • 패딩: 끝에 = 기호로 길이 맞춤 (4의 배수)
  • URL 안전 변형: + → -, / → _ (Base64URL)

인코딩 원리 — 예제

원문: "Man"
1. ASCII: M=77, a=97, n=110
2. 2진수 (8비트×3=24비트):
   01001101 01100001 01101110
3. 6비트씩 자르기:
   010011 010110 000101 101110
4. 10진수: 19, 22, 5, 46
5. Base64 테이블 매핑:
   19=T, 22=W, 5=F, 46=u
6. 결과: "TWFu"

크기 33% 증가 — 왜?

3바이트(24비트)를 4글자로 표현하기 때문. 따라서 크기가 4/3 ≈ 1.33배로 증가합니다. 100KB 이미지는 Base64로 약 133KB가 됩니다.

원본 크기Base64 크기증가율
1 KB1.37 KB+37%
100 KB133 KB+33%
1 MB1.33 MB+33%
10 MB13.3 MB+33%

Base64 실무 활용 6가지

① Data URL (이미지를 HTML에 직접 포함)

<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUg...">

아이콘·썸네일 등 작은 이미지를 HTTP 요청 없이 표시. 단, 큰 이미지는 캐시 불가로 비추.

② JSON에 이진 데이터 포함

{ "profileImage": "iVBORw0KGgo...", "signature": "MEUCIQCc..." }

③ JWT 토큰 (3부분 모두 Base64URL)

Header.Payload.Signature 각각 Base64URL 인코딩. eyJhbGci...으로 시작하는 건 JSON의 {"alg":"... 헤더가 인코딩된 것.

④ 이메일 첨부파일 (MIME)

SMTP는 7비트 ASCII만 전송. 첨부파일은 Base64로 변환 후 전송. 받는 쪽이 디코딩.

⑤ CSS background-image

.icon { background: url(data:image/svg+xml;base64,PHN2Zy...) }

⑥ Basic Authentication

// user:pass → dXNlcjpwYXNz
Authorization: Basic dXNlcjpwYXNz

Base64 vs 암호화 — 절대 헷갈리지 말 것

중요 — Base64는 누구나 디코딩 가능합니다. 비밀번호·신용카드·개인정보를 Base64만으로 "숨기지" 마세요. 실제 보안이 필요하면 AES·RSA 등 암호화를 사용해야 합니다.

Base64 vs Base64URL — 차이점

항목Base64Base64URL
62번 문자+-
63번 문자/_
패딩(=)필수생략 가능
용도이메일·일반URL·JWT

언어별 사용법

// JavaScript
btoa("Hello")       // "SGVsbG8="
atob("SGVsbG8=")    // "Hello"

# Python
import base64
base64.b64encode(b"Hello")      # b'SGVsbG8='
base64.b64decode("SGVsbG8=")    # b'Hello'

// Node.js
Buffer.from("Hello").toString("base64")       // "SGVsbG8="
Buffer.from("SGVsbG8=", "base64").toString()  // "Hello"

# Shell
echo -n "Hello" | base64          # SGVsbG8=
echo "SGVsbG8=" | base64 -d       # Hello

언제 Base64를 쓰지 말아야 하나?

  • 대용량 파일(1MB+) — 33% 증가로 네트워크·메모리 낭비. 바이너리 업로드 + URL 참조 방식이 나음
  • 이미지 CDN 캐시 목적 — Data URL은 브라우저가 파일로 캐시 못함
  • DB 저장 — BLOB 또는 파일 경로가 효율적
  • 보안 목적 — Base64는 암호화 아님

Base64 인코더·디코더 무료

Base64 변환기 →

참고
• RFC 4648 — The Base16, Base32, and Base64 Data Encodings.
• MDN: Base64 encoding and decoding.
• IETF RFC 7515 — JSON Web Signature (JWS).

#Base64 #인코딩 #디코딩 #Data URL #Binary #JWT #이미지 인코딩 #MIME

이 글에서 다룬 도구를 직접 사용해보세요

꿀도구 - 무료 온라인 도구 모음

연봉 실수령액 계산기, QR코드 생성기, 단위 변환기, 글자수 세기 등 167개 이상의 무료 온라인 유틸리티를 제공합니다. 회원가입 없이 바로 사용하세요.

인기 도구

  • 사다리타기 - 인원수를 정하고 공정한 사다리 게임을 즐기세요. 회식 장소 정하기, 벌칙 정하기, 당번 정하기 등에 활용하세요.
  • 로또번호 생성기 - 로또 6/45 자동 번호를 생성하는 무료 프로그램입니다. 여러 세트 생성과 번호 복사를 지원합니다.
  • 퍼센트 계산기 - 퍼센트(%)를 쉽고 빠르게 계산. 할인 가격 계산, 증감률 계산, 비율 구하기를 지원합니다.
  • BMI 계산기 - 키와 몸무게로 BMI(체질량지수)를 계산하고 대한비만학회 기준으로 비만도를 판정합니다.
  • D-Day 계산기 - 두 날짜 사이의 일수를 계산합니다. 수능 디데이, 100일 기념일, 1주년 등 중요한 날 확인.
  • 단위 변환기 - 길이, 무게, 넓이, 부피, 온도 등 모든 단위를 즉시 변환하는 무료 도구입니다.
  • 연봉 실수령액 - 2026년 기준 연봉 실수령액 계산. 4대보험료와 소득세 자동 공제하여 월급을 확인하세요.
  • 글자수 세기 - 글자수, 공백 포함/제외, 바이트 수, 단어 수, 줄 수를 실시간 계산하는 무료 도구입니다.
  • QR코드 생성기 - URL, 텍스트, Wi-Fi, 연락처(vCard), 위치, SMS 메시지까지 6가지 유형의 QR코드를 무료로 생성합니다. 12가지 색상 프리셋, 200~512px 크기 조절, PNG·SVG 벡터 다운로드 지원. 명함·포스터·메뉴판·매장·이벤트용 예쁜 QR코드 제작에 최적화.
  • JSON 포맷터 - JSON 데이터를 보기좋게 정리(Prettify)하고 유효성을 검증하는 무료 도구입니다.
  • MBTI 검사 - 48문항 정밀 MBTI 성격유형 검사와 상세 분석 리포트를 제공합니다.
  • 아파트 실거래가 - 국토교통부 공식 데이터 기반 아파트 매매/전세 실거래가를 지역별로 조회합니다. 시세차트, 평당가 자동 계산, 면적대 필터, 지도 뷰 제공.