Text Input

📖 Base64란?

🔤 Base64 인코딩의 개념

Base64는 바이너리 데이터를 ASCII 문자열로 변환하는 인코딩 방식입니다. 8비트 바이너리 데이터를 6비트 단위로 나누어 64개의 안전한 ASCII 문자(A-Z, a-z, 0-9, +, /)로 표현합니다. 이메일, URL, JSON 등 텍스트만 지원하는 환경에서 바이너리 데이터를 안전하게 전송할 수 있습니다.

인코딩 예시:
원본: Hello World
Base64: SGVsbG8gV29ybGQ=

💡 Base64 사용 사례

  • 이메일 첨부파일: SMTP 프로토콜에서 바이너리 파일을 텍스트로 변환하여 전송
  • 이미지 임베딩: HTML/CSS에서 작은 이미지를 Data URI로 직접 삽입 (HTTP 요청 감소)
  • JSON 데이터: API 응답에서 바이너리 데이터를 안전하게 포함
  • 인증 토큰: HTTP Basic Authentication에서 사용자명:비밀번호 인코딩
  • URL 안전 문자열: 바이너리 데이터를 URL 파라미터로 전달
  • 데이터베이스 저장: 바이너리 컬럼 대신 텍스트 컬럼에 저장

🔧 Base64 Encoder/Decoder 사용 방법

  1. 인코딩 (Encode): 왼쪽에 일반 텍스트를 입력하면 자동으로 Base64로 변환
  2. 디코딩 (Decode): 오른쪽에 Base64 문자열을 입력하면 원본 텍스트로 복원
  3. 양방향 변환: 실시간으로 입력한 내용이 즉시 변환되어 표시
  4. 복사 기능: 변환된 결과를 클릭하여 클립보드에 복사
  5. 초기화: Clear 버튼으로 입력 영역 전체 초기화

📚 Base64 인코딩 원리

변환 과정:
  1. 텍스트를 8비트 바이너리로 변환
  2. 바이너리를 6비트 단위로 분할
  3. 각 6비트를 Base64 문자표에서 해당하는 문자로 변환
  4. 부족한 비트는 '=' 기호로 패딩 처리
Base64 문자 세트 (64개):
  • 대문자: A-Z (0-25)
  • 소문자: a-z (26-51)
  • 숫자: 0-9 (52-61)
  • 특수문자: + (62), / (63)
  • 패딩: = (끝부분 채우기용)
상세 변환 예시:
텍스트: "Man"
ASCII: 77, 97, 110
Binary: 01001101 01100001 01101110
6bit 분할: 010011 010110 000101 101110
Base64 값: 19, 22, 5, 46
Base64: T W F u

🌐 Base64 변형 (URL-Safe)

일반 Base64는 URL에서 문제를 일으킬 수 있는 '+', '/' 문자를 사용합니다. URL-Safe Base64는 이를 '-', '_'로 대체하고 패딩 '='를 제거합니다.

표준 Base64:
VGhpcyBpcyBhIHRlc3Q+Pz8/
URL-Safe Base64:
VGhpcyBpcyBhIHRlc3Q-Pz8_

사용처: JWT 토큰, URL 파라미터, 파일명 등

⚡ Base64 특징과 한계

✅ 장점:
  • 호환성: 모든 텍스트 기반 시스템에서 사용 가능
  • 안전성: 특수문자나 제어문자로 인한 오류 방지
  • 표준화: RFC 4648로 표준화되어 다양한 언어/플랫폼 지원
  • 가역성: 언제든지 원본 데이터로 복원 가능
❌ 단점:
  • 크기 증가: 원본 대비 약 33% 크기 증가 (3바이트 → 4바이트)
  • 암호화 아님: 단순 인코딩일 뿐 보안 기능 없음
  • 성능: 인코딩/디코딩 과정에서 CPU 사용
  • 가독성: 인코딩된 문자열은 사람이 읽기 어려움

💻 프로그래밍 언어별 사용 예시

JavaScript:
// 인코딩
const encoded = btoa("Hello World");
// "SGVsbG8gV29ybGQ="

// 디코딩
const decoded = atob("SGVsbG8gV29ybGQ=");
// "Hello World"
Python:
import base64

# 인코딩
encoded = base64.b64encode(b"Hello World")
# b'SGVsbG8gV29ybGQ='

# 디코딩
decoded = base64.b64decode(encoded)
# b'Hello World'
Java:
import java.util.Base64;

// 인코딩
String encoded = Base64.getEncoder()
    .encodeToString("Hello World".getBytes());

// 디코딩
byte[] decoded = Base64.getDecoder()
    .decode(encoded);

❓ 자주 묻는 질문 (FAQ)

Q: Base64는 암호화인가요?

A: 아니요. Base64는 단순한 인코딩(데이터 형식 변환)이지 암호화가 아닙니다. 누구나 쉽게 디코딩할 수 있으므로 보안 목적으로는 사용할 수 없습니다. 민감한 데이터는 AES, RSA 같은 실제 암호화 알고리즘을 사용해야 합니다.

Q: Base64 문자열 끝의 '='는 무엇인가요?

A: 패딩(padding) 문자입니다. Base64는 3바이트(24비트)를 4개 문자로 인코딩하는데, 원본 데이터가 3의 배수가 아니면 부족한 부분을 '='로 채웁니다. '='가 1개면 1바이트 부족, 2개면 2바이트 부족을 의미합니다.

Q: 한글도 Base64로 변환할 수 있나요?

A: 네, 가능합니다. 한글은 먼저 UTF-8 바이트로 변환된 후 Base64로 인코딩됩니다. 한글 한 글자는 보통 3바이트이므로 Base64로는 4문자로 표현됩니다.

Q: 파일도 Base64로 변환할 수 있나요?

A: 네, 이미지, 문서 등 모든 파일을 Base64로 인코딩할 수 있습니다. 하지만 파일 크기가 33% 증가하므로 작은 파일(아이콘, 로고 등)에만 권장됩니다. 큰 파일은 별도 파일로 저장하고 URL로 참조하는 것이 효율적입니다.

Q: Base64를 언제 사용하면 좋나요?

A: 텍스트만 지원하는 환경(JSON, XML, 이메일)에서 바이너리 데이터를 전송할 때, 작은 이미지를 HTML에 직접 임베딩할 때, HTTP Basic Auth 같은 표준 프로토콜에서 사용됩니다. 대용량 파일이나 보안이 중요한 데이터에는 적합하지 않습니다.

💡 Base64 사용 팁

  • 작은 파일만: 5KB 이하의 아이콘이나 로고 이미지에만 사용
  • 캐싱 고려: Base64 임베딩 이미지는 캐시되지 않으므로 재사용되는 리소스는 별도 파일로
  • 보안 주의: Base64는 암호화가 아니므로 민감한 데이터 보호에 부적합
  • URL-Safe 변형: URL이나 파일명에 사용할 때는 URL-Safe Base64 사용
  • 개행 처리: 긴 Base64 문자열은 76자마다 개행을 넣는 것이 MIME 표준
  • 성능 측정: 대량 데이터 처리 시 인코딩/디코딩 시간 고려

⚠️ 주의사항

  • Base64는 데이터 크기를 33% 증가시키므로 대용량 파일에는 비효율적입니다
  • Base64 인코딩은 보안 기능이 아닙니다. 누구나 쉽게 디코딩할 수 있습니다
  • 브라우저의 btoa/atob 함수는 Unicode를 직접 지원하지 않으므로 한글 사용 시 주의
  • 서로 다른 Base64 변형(표준, URL-Safe)을 혼용하지 마세요