티스토리 뷰
Base64란?
Base64는 "이미지, 영상, 오디오 같은 데이터를 문자(텍스트)로 변환하는 기술"입니다.
일부 환경에서는 바이너리 데이터를 직접 처리할 수 없기 때문입니다.
바이너리 데이터를 직접 처리할 수 없는 환경(이메일, JSON, URL 등)에서 데이터를 안전하게 저장하고 전송하기 위해 사용
예제: 이메일 첨부파일 전송 ❌ 문제
- 이메일 시스템은 문자(텍스트)만 처리할 수 있음 → 이미지 파일 직접 전송 불가
- 따라서, 이미지를 문자(텍스트)로 변환해야 함
Base64 사용 예시
1. 문자(텍스트)만을 처리할 수 있는 환경
네트워크 및 텍스트만 처리 가능한 시스템(이메일, JSON 등)은 바이너리 데이터를 직접 처리할 수 없습니다.
Base64는 바이너리 데이터를 ASCII 문자(AZ, az, 0~9, +, /)로 변환하여 안전하게 전송 가능합니다.
JSON에서 바이너리 데이터 전송 문제
{
"filename": "image.png",
"fileData": "PNG... (바이너리 데이터, 직접 포함 불가능)"
}
Base64를 사용하면 JSON에서 바이너리 데이터를 안전하게 포함할 수 있습니다.
{
"filename": "image.png",
"fileData": "iVBORw0KGgoAAAANSUhEUgAA..."
}
2. 이메일 첨부파일 전송
이메일 시스템(SMTP)은 ASCII 문자만 허용하므로, 이미지/PDF 첨부파일을 Base64로 변환해야 합니다.
Base64를 사용하면 바이너리 데이터를 ASCII 문자로 변환하여 이메일에서 전송 가능합니다.
Content-Type: application/pdf; name="document.pdf"
Content-Transfer-Encoding: base64
JVBERi0xLjQKJeLjz9MKMSAwIG9iago...
3. HTML에서 이미지 직접 포함
웹사이트에서 이미지를 <img> 태그로 불러오려면 별도의 이미지 파일이 필요하지만, Base64를 사용하면 HTML에 직접 포함 가능합니다.
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAA..." />
4. URL에서 바이너리 데이터를 안전하게 전송
URL은 ASCII 문자만 허용하므로, 바이너리 데이터를 직접 포함할 수 없습니다.
Base64를 사용하면 URL 내에서 바이너리 데이터를 안전하게 포함할 수 있습니다.
https://example.com/image?data=iVBORw0KGgoAAAANSUhEUgAA...
Base64 변환 예제
Base64는 바이너리 데이터를 6비트 단위로 나누고, 이를 ASCII 문자로 변환합니다.
1. Java
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);
2. JavaScript
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!"
Base64의 단점
1. 데이터 크기 증가
- 원본보다 약 33% 크기가 증가합니다.
2. 보안 기능 없음
- Base64는 암호화가 아닙니다. 보안 용도로 사용하면 안 됩니다.
- 누구나 쉽게 디코딩하여 원본 데이터를 복원할 수 있습니다.
