Base64는 "이미지, 영상, 오디오 같은 데이터를 문자(텍스트)로 변환하는 기술"입니다.
일부 환경에서는 바이너리 데이터를 직접 처리할 수 없기 때문입니다.
바이너리 데이터를 직접 처리할 수 없는 환경(이메일, JSON, URL 등)에서 데이터를 안전하게 저장하고 전송하기 위해 사용
예제: 이메일 첨부파일 전송 ❌ 문제
네트워크 및 텍스트만 처리 가능한 시스템(이메일, JSON 등)은 바이너리 데이터를 직접 처리할 수 없습니다.
Base64는 바이너리 데이터를 ASCII 문자(A~Z, a~z, 0~9, +, /)로 변환하여 안전하게 전송 가능합니다.
JSON에서 바이너리 데이터 전송 문제
{
"filename": "image.png",
"fileData": "PNG... (바이너리 데이터, 직접 포함 불가능)"
}
Base64를 사용하면 JSON에서 바이너리 데이터를 안전하게 포함할 수 있습니다.
{
"filename": "image.png",
"fileData": "iVBORw0KGgoAAAANSUhEUgAA..."
}
이메일 시스템(SMTP)은 ASCII 문자만 허용하므로, 이미지/PDF 첨부파일을 Base64로 변환해야 합니다.
Base64를 사용하면 바이너리 데이터를 ASCII 문자로 변환하여 이메일에서 전송 가능합니다.
Content-Type: application/pdf; name="document.pdf"
Content-Transfer-Encoding: base64
JVBERi0xLjQKJeLjz9MKMSAwIG9iago...
웹사이트에서 이미지를 태그로 불러오려면 별도의 이미지 파일이 필요하지만, Base64를 사용하면 HTML에 직접 포함 가능합니다.
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAA..." />
URL은 ASCII 문자만 허용하므로, 바이너리 데이터를 직접 포함할 수 없습니다.
Base64를 사용하면 URL 내에서 바이너리 데이터를 안전하게 포함할 수 있습니다.
https://example.com/image?data=iVBORw0KGgoAAAANSUhEUgAA...
Base64는 바이너리 데이터를 6비트 단위로 나누고, 이를 ASCII 문자로 변환합니다.
Java에서는 java.util.Base64 클래스를 사용하여 Base64 변환이 가능합니다.
Base64 인코딩
// 인코딩할 원본 문자열
String originalText = "Hello, Base64!";
// 문자열을 Base64로 인코딩
String encodedText = Base64.getEncoder().encodeToString(originalText.getBytes());
System.out.println("Base64 인코딩된 문자열: " + encodedText);
Base64 디코딩
// Base64 인코딩된 문자열
String encodedText = "SGVsbG8sIEJhc2U2NCE=";
// Base64 디코딩하여 원본 문자열로 변환
String decodedText = new String(Base64.getDecoder().decode(encodedText));
System.out.println("디코딩된 문자열: " + decodedText);
JavaScript에서는 btoa()와 atob() 함수를 사용하여 Base64 변환이 가능합니다.
Base64 인코딩
const text = "Hello, World!";
const encodedText = btoa(text);
console.log(encodedText);
// 출력: "SGVsbG8sIFdvcmxkIQ=="
Base64 디코딩
const decodedText = atob("SGVsbG8sIFdvcmxkIQ==");
console.log(decodedText);
// 출력: "Hello, World!"
1. 데이터 크기 증가
2. 보안 기능 없음