Base64 웹 개발 활용 사례 7가지 - 이미지 인라인부터 데이터 전송까지
이미지를 코드에 직접 넣고, JSON으로 파일을 주고받고, 인증 토큰을 만드는 일까지. 웹 개발 곳곳에 숨어 있는 Base64의 실제 쓰임새를 원리부터 정리했습니다.
![]()
HTML에 작은 아이콘 하나를 넣으려고 이미지 파일을 따로 업로드하고, 경로가 깨지지 않게 신경 쓴 경험이 있을 겁니다. 그런데 어떤 코드를 보면 이미지가 파일이 아니라 긴 문자열 형태로 코드 안에 박혀 있습니다. 이게 바로 Base64입니다. 이름은 자주 들어봤지만 정작 언제 어떻게 쓰는지는 헷갈리는 경우가 많습니다. 이 글에서는 Base64가 무엇이고, 웹 개발 현장에서 실제로 어디에 쓰이는지 구체적인 사례로 정리합니다.
Base64가 정확히 무엇인가
Base64는 이진(바이너리) 데이터를 텍스트로 바꾸는 인코딩 방식입니다. 암호화가 아닙니다. 누구나 디코딩하면 원본을 그대로 복원할 수 있기 때문에 보안과는 관계가 없습니다. 핵심 목적은 단 하나, 텍스트만 다룰 수 있는 환경에서 이미지나 파일 같은 이진 데이터를 안전하게 실어 나르는 것입니다.
이름의 64는 사용하는 문자 개수를 뜻합니다. 알파벳 대문자 26개, 소문자 26개, 숫자 10개에 +와 / 두 기호를 더해 총 64개의 문자만 사용합니다. 여기에 길이를 맞추기 위한 패딩 문자 =가 붙기도 합니다. 이 64개 문자는 대부분의 시스템에서 깨지지 않고 전송되는 안전한 문자라서, 데이터가 중간에 손상될 걱정 없이 주고받을 수 있습니다.
Base64는 데이터를 숨기는 기술이 아니라, 이진 데이터를 텍스트 통로에 통과시키기 위한 포장 기술입니다. 보안이 필요하면 별도의 암호화를 함께 써야 합니다.
3바이트를 4글자로 바꾸는 원리
Base64는 원본 데이터를 3바이트(24비트)씩 끊은 뒤, 이를 6비트 단위 4조각으로 다시 나눕니다. 6비트로 표현할 수 있는 경우의 수가 정확히 64가지여서, 각 조각을 앞서 말한 64개 문자 중 하나로 매핑합니다. 결과적으로 원본 3바이트가 4개의 문자로 변환됩니다.
이 구조 때문에 Base64로 변환하면 데이터 크기가 약 33% 늘어납니다. 3바이트가 4글자가 되니 4 나누기 3, 즉 약 1.33배입니다. 이 점은 활용 사례를 판단할 때 중요한 기준이 됩니다.
btoa()로 인코딩, atob()로 디코딩합니다. 다만 한글처럼 다국어 문자는 그대로 넣으면 오류가 나므로 encodeURIComponent나 TextEncoder로 먼저 처리해야 합니다.웹 개발에서 쓰이는 대표 활용 사례
Base64는 화면 뒤에서 생각보다 자주 동작합니다. 실제로 마주치는 대표적인 쓰임새를 정리하면 다음과 같습니다.
| 활용 사례 | 설명 | 대표 형태 |
|---|---|---|
| 데이터 URI 이미지 | 작은 이미지를 파일 대신 코드에 직접 삽입 | data:image/png;base64,... |
| CSS 인라인 폰트/아이콘 | HTTP 요청 없이 폰트나 아이콘을 CSS에 포함 | url(data:font/woff2;base64,...) |
| JSON 안의 파일 전송 | API로 이미지나 첨부파일을 텍스트로 주고받기 | {"file":"iVBORw0..."} |
| 이메일 첨부(MIME) | 메일 본문에 이진 파일을 텍스트로 인코딩 | Content-Transfer-Encoding: base64 |
| Basic 인증 헤더 | 아이디:비밀번호를 인코딩해 헤더에 전달 | Authorization: Basic ... |
| JWT 토큰 | 토큰의 헤더와 페이로드를 URL 안전 Base64로 인코딩 | eyJhbGci... |
가장 흔한 사례: 데이터 URI로 이미지 인라인
웹 페이지에서 1KB 안팎의 아주 작은 아이콘이나 로딩 스피너 이미지는 별도 파일로 두기보다 Base64로 변환해 HTML이나 CSS에 직접 넣는 경우가 많습니다. 이렇게 하면 서버에 추가 요청을 보내지 않아도 되어 작은 파일이 많을 때 로딩이 빨라질 수 있습니다.
- HTTP 요청 횟수를 줄여 자잘한 리소스 로딩 지연을 막습니다
- 이미지 경로 관리나 배포 누락 문제에서 자유롭습니다
- 단일 파일로 배포해야 하는 위젯이나 이메일 템플릿에 유리합니다
API에서 파일을 텍스트로 주고받기
JSON은 텍스트 기반 포맷이라 이미지 같은 이진 데이터를 그대로 담을 수 없습니다. 그래서 클라이언트에서 파일을 Base64 문자열로 바꿔 JSON 필드에 넣어 보내고, 서버가 다시 디코딩하는 방식이 자주 쓰입니다. 다만 33% 크기 증가가 부담되는 큰 파일은 이 방식 대신 멀티파트 업로드가 권장됩니다.
쓸 때와 쓰지 말아야 할 때
Base64는 만능이 아닙니다. 잘못 쓰면 오히려 성능을 떨어뜨립니다. 판단 기준은 명확합니다.
- 쓰면 좋은 경우 - 수 KB 이하의 작은 이미지, 요청 횟수를 줄이고 싶은 자잘한 리소스, 텍스트 통로로만 보내야 하는 데이터
- 피해야 할 경우 - 수십 KB 이상의 큰 이미지, 여러 페이지에서 캐싱이 필요한 리소스, 트래픽이 민감한 대용량 파일 전송
큰 파일을 Base64로 인라인하면 33% 커진 데이터가 캐싱도 안 되고 매번 함께 전송되어, 차라리 일반 파일로 두는 편이 훨씬 빠릅니다.
실무 적용 팁과 변환 도구
실제로 Base64를 다룰 때 알아두면 좋은 점이 몇 가지 있습니다. 첫째, URL이나 파일 이름에 Base64 결과를 넣어야 한다면 +와 /가 문제를 일으키므로 이를 -와 _로 바꾼 URL 안전 Base64를 사용합니다. JWT 토큰이 이 방식을 씁니다. 둘째, 한글이 포함된 문자열은 인코딩 전에 UTF-8 처리를 반드시 거쳐야 깨지지 않습니다.
간단한 문자열을 빠르게 인코딩하거나 디코딩해 확인하고 싶을 때는, 코드를 짜기보다 웹 기반 도구를 쓰는 편이 편합니다. Base64 변환을 포함해 다양한 텍스트 인코딩과 변환을 한곳에서 처리할 수 있는 텍스트 변환기 같은 도구를 활용하면, 결과 문자열이 올바른지 즉시 검증할 수 있습니다.
한편 짧은 텍스트나 인코딩한 식별자를 인쇄물이나 오프라인 환경에서 공유해야 한다면, 그 데이터를 QR코드 형태로 담는 방법도 있습니다. 이럴 때는 바코드 생성기로 인코딩한 값을 바로 코드 이미지로 만들어 활용할 수 있습니다.
정리하면 두 가지만 기억하면 됩니다. 작은 리소스와 텍스트 전송에는 Base64가 효율적이지만, 큰 파일에는 일반 파일 방식이 빠릅니다. 그리고 Base64는 암호화가 아니므로 민감 정보를 숨기는 용도로는 절대 쓰지 마세요. 지금 다루는 데이터의 크기와 목적부터 먼저 따져보면, 어디에 Base64를 적용할지 판단이 훨씬 쉬워집니다.