Base64란 무엇이며 어떻게 사용하나요: 인코딩과 디코딩 완전 가이드

읽기 시간 9분

Base64가 무엇인지, 인코딩이 어떻게 작동하는지, 웹 개발에서 언제 사용하는지, 텍스트, 이미지, 파일을 무료로 인코딩 또는 디코딩하는 방법을 배워보세요.

Base64 인코딩이란 무엇인가

Base64는 바이너리 데이터(0과 1)를 64개의 인쇄 가능한 문자를 사용한 텍스트 표현으로 변환하는 인코딩 시스템입니다. 이 64개 문자는 영문자 A-Z, a-z, 숫자 0-9, 기호 +/, 그리고 패딩용 = 문자로 구성됩니다.

핵심 아이디어는 간단합니다: 많은 컴퓨터 시스템은 순수 텍스트만 안전하게 처리할 수 있습니다. 원시 바이너리 데이터(이미지나 압축 파일 등)를 이메일, URL, JSON 필드를 통해 전송하면 데이터가 손상될 수 있습니다. Base64는 바이너리 데이터를 어떤 시스템이든 문제 없이 전송할 수 있는 "안전한" 텍스트로 변환하여 이 문제를 해결합니다.

예를 들어, 3개의 바이너리 바이트 01001000 01101111 01101100("Hol"을 나타냄)은 4개의 Base64 문자 SG9s가 됩니다. 이 과정에서 비트를 8비트가 아닌 6비트 블록으로 그룹화하고 64문자 테이블에 매핑합니다.

NexTools 무료 Base64 인코더로 지금 바로 인코딩을 체험해 보세요.

Base64 작동 원리: 단계별 설명

Base64 알고리즘은 입력 3바이트를 4개의 출력 문자로 변환하는 정밀한 수학적 과정을 따릅니다:

1단계: 바이너리로 변환. 원본 텍스트의 각 바이트를 8비트 바이너리 표현으로 변환합니다. 예를 들어, 문자 "M"은 ASCII에서 바이트 77이며, 바이너리로는 01001101입니다.

2단계: 6비트 블록으로 그룹화. 비트를 8개 그룹에서 6개 그룹으로 재구성합니다. "Man"(3바이트 = 24비트)을 예로 들면, 4개의 6비트 그룹으로 나뉩니다: 010011 | 010110 | 000101 | 101110.

3단계: Base64 테이블에 매핑. 각 6비트 그룹(값 0-63)을 테이블의 문자에 매핑합니다: 19=T, 22=W, 5=F, 46=u. 결과: "Man" → "TWFu".

4단계: "="로 패딩. 원본 바이트가 3의 배수가 아니면 패딩이 추가됩니다. 1바이트가 남으면 "==", 2바이트가 남으면 "="가 추가됩니다.

수치 예제:

텍스트바이트바이너리6비트 그룹Base64
Hi72, 10501001000 01101001010010 000110 100100SGk=
Man77, 97, 11001001101 01100001 01101110010011 010110 000101 101110TWFu
A6501000001010000 010000QQ==

출력은 항상 원본보다 약 33% 큽니다(3바이트당 4문자). NexTools Base64 디코더로 모든 Base64 텍스트를 디코딩할 수 있습니다.

2026년 Base64의 가장 흔한 사용 사례

Base64는 여러분이 생각하는 것보다 현대 기술의 많은 부분에 존재합니다:

1. HTML과 CSS의 Data URI. 별도의 HTTP 요청 없이 이미지를 HTML이나 CSS 코드에 직접 삽입할 수 있습니다. 예: <img src="data:image/png;base64,iVBORw0KGgo...">. 서버 요청 하나를 줄이며, 작은 아이콘(2-3 KB 미만)에 이상적입니다. HTTP Archive에 따르면, 2025년 웹사이트의 18%가 CSS에 최소 하나의 Data URI를 사용했습니다.

2. 이메일 첨부 파일(MIME). 원래 SMTP 프로토콜은 7비트 ASCII 텍스트만 지원합니다. 파일 첨부(PDF, 이미지, 문서)를 보내기 위해 MIME 표준이 이를 Base64로 인코딩합니다. 첨부 파일이 있는 이메일을 받을 때마다, 이메일 클라이언트가 자동으로 Base64를 디코딩합니다.

3. JWT 토큰(JSON Web Tokens). JWT 인증 토큰은 점으로 구분된 3개 부분으로 구성되며, 각각 Base64url(+/ 대신 -_를 사용하는 변형)로 인코딩됩니다. 2026년에는 수백만 개의 API가 JWT를 인증에 사용합니다.

4. REST API와 JSON. JSON 페이로드(텍스트) 내에 바이너리 데이터를 보내야 할 때, Base64가 표준 솔루션입니다.

5. 데이터베이스 저장소. 일부 NoSQL 데이터베이스나 SQL의 텍스트 필드는 Base64로 인코딩된 바이너리 데이터를 저장합니다. BLOB보다 효율은 떨어지지만 시스템 간 이식성이 높습니다.

6. 기본 난독화. 암호화나 보안은 아니지만, Base64는 구성 문자열이나 URL 파라미터처럼 한눈에 읽히면 안 되는 데이터를 난독화하는 데 사용됩니다.

JavaScript와 웹 개발에서의 Base64

JavaScript는 브라우저와 Node.js 모두에서 Base64를 다루기 위한 네이티브 함수를 제공합니다:

브라우저에서:

  • btoa(string) — 문자열을 Base64로 인코딩. 예: btoa("Hello")"SGVsbG8="
  • atob(string) — Base64를 텍스트로 디코딩. 예: atob("SGVsbG8=")"Hello"

유니코드 주의: btoa()는 유니코드 문자(한글, 이모지, CJK)에서 실패합니다. 특수 문자가 포함된 텍스트에는 중간 단계가 필요합니다:

const base64 = btoa(unescape(encodeURIComponent("한글 테스트")));

Node.js에서:

  • Buffer.from(string).toString('base64') — 인코딩
  • Buffer.from(base64String, 'base64').toString('utf-8') — 디코딩

Node.js는 Buffer로 유니코드를 자동 처리하며, btoa/atob 문제가 없습니다.

코드를 작성하지 않으려면, NexTools Base64 인코더를 사용하세요. 브라우저 내에서 모든 것을 처리하며 파일을 서버에 업로드하지 않습니다.

Base64와 다른 인코딩 방식 비교

Base64를 암호화나 다른 인코딩과 혼동하지 않는 것이 중요합니다. 각각 다른 목적이 있습니다:

방식목적키 없이 역변환 가능안전
Base64바이너리를 텍스트로 표현예, 누구나 디코딩 가능아니오
16진수(Base16)바이트를 16진수로 표현아니오
URL 인코딩URL의 특수 문자 이스케이프아니오
AES/RSA(암호화)키로 데이터 보호아니오, 키 필요
SHA-256(해시)데이터 무결성 검증아니오, 단방향부분적

흔한 실수: Base64를 "보안"으로 사용하는 것. Base64는 아무것도 암호화하지 않습니다. 누구나 밀리초 만에 디코딩할 수 있습니다. 데이터 보호가 필요하다면 실제 암호화(예: AES-256)를 사용하세요. 무결성 검증에는 해시 생성기를 사용하세요.

Base64 변형: 표준, URL 안전, MIME

Base64는 하나만 있는 것이 아닙니다. 여러 RFC 표준에서 다양한 변형이 정의되어 있습니다:

표준 Base64(RFC 4648): A-Za-z0-9+/과 패딩 =를 사용합니다. 가장 일반적인 버전으로, MIME, PEM, 대부분의 API에서 사용됩니다.

Base64url(RFC 4648 §5): +-로, /_로 대체합니다. 패딩 =를 삭제하거나 선택적으로 만듭니다. URL과 파일명에 특화하여 설계되었습니다. JWT 토큰은 항상 이 변형을 사용합니다.

MIME Base64(RFC 2045): 표준과 동일하지만 76자마다 줄 바꿈을 삽입합니다. 이메일과 PEM 인증서에 사용됩니다.

Base32: 32개 문자만 사용합니다(A-Z2-7). 효율이 낮지만(5바이트→8문자 vs Base64의 3→4) 대소문자를 구분하지 않습니다. TOTP(Google Authenticator)와 Tor onion 주소에 사용됩니다.

실용적 조언: URL이나 JWT를 다룰 때는 항상 Base64url을 사용하세요. JSON API나 이메일 데이터 인코딩에는 표준 Base64를 사용하세요. NexTools 인코더는 두 변형 모두 지원합니다.

성능과 크기: Base64를 사용하지 말아야 할 때

Base64에는 비용이 있습니다: 인코딩된 데이터는 원본보다 약 33% 큽니다. 이는 중요한 영향을 미칩니다:

인라인 이미지: 2 KB 규칙. Data URI로 이미지를 삽입하는 것은 매우 작은 파일(아이콘, 스프라이트)에만 가치가 있습니다. 100 KB 이미지는 약 133 KB의 Base64 텍스트가 되며, 브라우저는 이를 별도 파일로 캐시할 수 없습니다. 2026년 권장 사항:

  • 2 KB 미만 이미지 → Data URI (HTTP 요청 1개 절약)
  • 2-10 KB 이미지 → 사안별 평가
  • 10 KB 초과 이미지 → 항상 <img src="url">로 별도 파일

API와 JSON 페이로드. API에서 큰 파일을 보내야 한다면, JSON의 Base64는 비효율적입니다. 더 나은 대안:

  • 업로드용 multipart/form-data (인코딩 불필요)
  • 사전 서명된 URL (클라이언트가 스토리지에 직접 업로드)
  • Content-Type: application/octet-stream으로 바이너리 스트리밍

구체적인 오버헤드 수치:

원본Base64오버헤드
1 KB1.33 KB+33%
100 KB133 KB+33 KB
1 MB1.33 MB+330 KB
10 MB13.3 MB+3.3 MB

Base64를 무료로 인코딩하고 디코딩하는 방법

상황에 따라 Base64를 다루는 여러 옵션이 있습니다:

옵션 1: 온라인 도구(가장 빠름). NexTools Base64 인코더는 브라우저에서 모든 것을 처리합니다. 텍스트를 붙여넣거나 파일을 업로드하면 즉시 결과를 얻을 수 있습니다. 데이터는 컴퓨터를 떠나지 않습니다.

옵션 2: 명령줄.

  • Linux/Mac: echo -n "Hello" | base64SGVsbG8=
  • 디코딩: echo "SGVsbG8=" | base64 --decodeHello
  • 파일: base64 image.png > image.b64

옵션 3: Python.

  • import base64
  • base64.b64encode(b"Hello").decode()"SGVsbG8="
  • base64.b64decode("SGVsbG8=").decode()"Hello"

빠르게 인코딩이나 디코딩만 하면 되는 대부분의 사용자에게 온라인 도구가 가장 실용적입니다. API나 개발을 정기적으로 한다면, 터미널이나 선호하는 프로그래밍 언어가 더 효율적입니다.

복잡한 데이터 구조를 다뤄야 한다면, NexTools JSON 변환기로 데이터를 다른 형식으로 변환할 수도 있습니다.

이 도구를 사용해 보세요:

도구 열기

자주 묻는 질문

Base64는 암호화와 같은 건가요

아닙니다. Base64는 인코딩이지 암호화가 아닙니다. 누구나 비밀 키 없이 Base64를 디코딩할 수 있습니다. 다른 알파벳으로 메시지를 쓰는 것과 같습니다: 표현은 바뀌지만 내용은 보호되지 않습니다. 데이터 암호화에는 AES-256이나 RSA 같은 알고리즘이 필요합니다.

왜 Base64 인코딩 데이터는 원본보다 큰가요

Base64는 3바이트(24비트)를 4문자(32비트)로 변환하여 33% 증가합니다. 또한 원본 데이터가 3바이트의 배수가 아니면 '='로 패딩이 추가되어 크기가 약간 증가합니다. 1 MB 파일은 Base64로 약 1.33 MB가 됩니다.

이메일에서 Base64는 어떤 용도로 사용되나요

원래 SMTP 프로토콜은 7비트 ASCII 텍스트만 지원하여 바이너리 파일을 직접 전송할 수 없습니다. MIME은 Base64를 사용하여 파일 첨부를 SMTP가 전송할 수 있는 ASCII 텍스트로 인코딩합니다. 이메일 클라이언트는 전송 시 자동 인코딩하고 수신 시 자동 디코딩합니다.

표준 Base64와 Base64url의 차이점은 무엇인가요

표준 Base64는 URL에서 특별한 의미를 가진 '+'와 '/'를 사용합니다. Base64url은 이를 각각 '-'와 '_'로 대체하고 패딩 '='를 선택적으로 만듭니다. JWT와 URL의 모든 데이터는 Base64url을 사용해야 합니다.

Base64로 인코딩한 민감한 데이터를 URL에 넣어도 안전한가요

안전하지 않습니다. Base64 인코딩은 어떠한 보안도 제공하지 않습니다. URL을 본 사람이라면 누구든 데이터를 즉시 디코딩할 수 있습니다. URL로 민감한 데이터를 전달해야 한다면, 먼저 AES로 암호화한 후 결과를 Base64url로 인코딩하세요.

웹사이트용으로 큰 이미지를 Base64로 인코딩해도 되나요

기술적으로는 가능하지만 권장하지 않습니다. 500 KB 이미지는 HTML에 약 667 KB의 Base64 텍스트가 되어, 페이지 크기 증가, 브라우저 캐싱 방지, 로딩 속도 저하를 초래합니다. Base64 Data URI는 2 KB 미만의 이미지에만 사용하세요.