Base64 인코딩 오버헤드 계산
입력
| 바이너리 크기 | 1 MB |
|---|
Base64 인코딩 오버헤드 계산
바이너리 데이터 크기를 입력하면 Base64 인코딩 후 출력 크기와 인코딩으로 추가되는 여분의 공간을 확인할 수 있습니다.
입력
바이너리 입력
결과
값을 입력하면 계산 결과가 표시됩니다.
인코딩 출력
크기 분석
Base64 인코딩 오버헤드
Base64는 임의의 바이너리 데이터를 64가지 출력 가능한 ASCII 문자로 표현하는 이진-텍스트 인코딩 방식입니다. 이메일 첨부 파일, HTML의 데이터 URI, PEM 인증서, JSON API 페이로드 등 텍스트 전용 채널에 바이너리 콘텐츠를 삽입하는 표준 방법입니다. 인코딩은 무손실이며 복원 가능하지만 데이터 크기가 약 1/3 증가합니다.
Base64 인코딩 동작 방식
Base64는 바이너리 입력을 3바이트(24비트) 그룹 단위로 읽고, 각 그룹을 4개의 문자로 매핑합니다. 각 문자는 6비트를 담습니다.
64가지 문자 각각은 0부터 63까지의 값을 나타내며, A–Z, a–z, 0–9, +, /에서 선택됩니다. 출력에는 제어 문자, 널 바이트, 127 초과의 바이트가 포함되지 않아 ASCII 호환 전송 방식에서 안전합니다.
크기 계산식
입력 3바이트마다 출력 4바이트가 되므로, 인코딩 크기는 다음과 같습니다.
올림 함수(⌈⌉)는 입력 길이가 3의 배수가 아닌 경우 마지막 그룹을 = 문자 하나 또는 두 개로 패딩하여 처리합니다.
원본 크기 대비 오버헤드 비율은 다음과 같습니다.
입력이 3바이트의 정확한 배수인 경우, 이 값은 정확히 입니다.
계산 예시
1 MB 바이너리 파일(1,000,000바이트)의 경우:
실용적 시사점
이메일과 MIME. 첨부 파일은 메시지 본문 안에 Base64로 인코딩되어 삽입됩니다. 3 MB PDF 첨부 파일이 이메일 크기를 약 4 MB로 증가시키는 이유가 바로 이 때문입니다.
데이터 URI. 200 KB PNG를 HTML이나 CSS 파일의 데이터 URI로 삽입하면 약 267 KB의 텍스트가 생성되어 페이지 용량이 증가합니다. 작은 아이콘의 경우 별도 HTTP 요청을 피할 수 있는 이점이 있지만, 큰 이미지에는 일반적으로 불리합니다.
JSON API. 이미지, 오디오 클립, 암호화 서명 등의 바이너리 데이터는 JSON에 네이티브 바이너리 타입이 없으므로 JSON 문자열에 넣기 전에 Base64로 인코딩되는 경우가 많습니다. 페이로드 크기를 계획할 때 인코딩 오버헤드를 반드시 고려해야 합니다.
URL 안전 Base64. 일부 시스템에서는 퍼센트 인코딩 없이 URL 경로 세그먼트와 쿼리 파라미터에서 안전하게 사용할 수 있도록 +를 -로, /를 _로 대체합니다. 크기 계산은 동일합니다.
압축률 계산를 활용하면 인코딩 전에 먼저 압축을 적용하여 오버헤드를 부분적으로 상쇄할 수 있는지 평가할 수 있습니다. 압축된 데이터는 바이트당 더 효율적으로 인코딩되는 경우가 많습니다.
진법 변환기는 Base64가 궁극적으로 인코딩하는 16진수 또는 이진 표현을 다룰 때 유용합니다.
자주 묻는 질문 (FAQ)
Base64가 약 33%의 오버헤드를 추가하는 이유는 무엇입니까?
Base64는 바이너리 데이터 3바이트를 출력 가능한 ASCII 문자 4개로 인코딩합니다. 3바이트는 24비트의 정보를 담고, Base64 문자 4개도 24비트를 담습니다(문자당 6비트). 그러나 각 문자는 텍스트 형태에서 완전한 1바이트를 차지합니다.
결과적으로 3바이트가 4바이트가 되어 정확히 1/3, 즉 약 33.3% 증가합니다. 입력 길이가 3의 배수가 아닌 경우 마지막 4문자 그룹을 완성하기 위해 패딩 문자(=)가 추가되어 오버헤드가 33%를 약간 초과할 수 있습니다.
Base64 인코딩은 언제, 왜 사용됩니까?
Base64는 바이너리 데이터를 출력 가능한 ASCII의 안전한 부분 집합으로 변환하여 텍스트 전용 채널을 통해 손상 없이 전송할 수 있게 합니다. 주요 사용 사례로는 HTML과 CSS에 이미지나 폰트를 직접 삽입하는 데이터 URI, 이메일 바이너리 첨부(MIME), 암호화 키와 인증서 인코딩(PEM 형식), JSON API의 바이너리 페이로드 전송 등이 있습니다. 33%의 오버헤드는 텍스트 안전 전송을 보장하기 위해 감수하는 비용입니다.
Base64와 16진수 인코딩은 어떻게 다릅니까?
16진수(base 16)는 모든 바이트를 두 자리 16진수 문자로 표현하므로 항상 데이터 크기가 두 배, 즉 100% 오버헤드가 발생합니다. Base64는 64가지 문자를 사용하여 문자당 4비트 대신 6비트를 담을 수 있어, 동일한 데이터를 2배가 아닌 4/3배 크기로 인코딩합니다.
출력 크기가 중요한 경우에는 Base64가 표준적인 선택입니다. 가독성이나 디버깅이 우선이라면 16진수가 선호됩니다. 각 16진수 쌍이 1바이트에 직접적이고 명확하게 대응하기 때문입니다.
Base64 출력 끝의 = 패딩은 무엇입니까?
Base64는 입력을 3바이트 그룹 단위로 처리합니다. 마지막 그룹이 1바이트인 경우 = 두 개가 추가되고, 2바이트인 경우 = 하나가 추가됩니다. 이렇게 하면 출력 길이가 항상 4문자의 배수가 되어 디코딩이 간소화됩니다. 패딩 자체에는 정보 내용이 없으며, 일부 시스템(URL 안전 Base64 등)에서는 패딩을 생략하고 디코딩 시 출력 길이로부터 패딩을 재구성합니다.