2026. 03. 03
Base64 인코딩 — 텍스트로 파일 데이터를 보내는 방식
Base64가 이진 데이터를 ASCII 텍스트로 바꾸는 원리와 3바이트가 4문자로 늘어나는 이유를 설명합니다. JWT, 이메일 첨부, data URL에서의 쓰임과 암호화가 아니라는 점도 정리했습니다.
이미지 파일이나 PDF는 원래 텍스트가 아닙니다. 그런데 이메일 첨부, JSON API, JWT 토큰 안에서는 파일이나 바이너리 값을 텍스트처럼 다뤄야 할 때가 있습니다. 이때 Base64가 쓰입니다.
Base64는 이진 데이터를 64개의 안전한 문자로 표현합니다. 사용하는 문자는 A-Z, a-z, 0-9, +, /이고, 길이를 맞추기 위해 끝에 = 패딩이 붙을 수 있습니다.
3바이트가 4문자가 되는 이유
Base64는 입력을 3바이트, 즉 24비트씩 나눕니다. 이 24비트를 6비트씩 4개로 쪼개고, 각 값을 문자 하나로 바꿉니다. 그래서 결과는 원본보다 약 33% 커집니다. 3MB 이미지를 Base64로 바꾸면 대략 4MB가 됩니다.
이 특징 때문에 큰 이미지를 HTML 안에 전부 넣는 방식은 조심해야 합니다. 작은 아이콘에는 편할 수 있지만, 큰 사진은 별도 파일로 두는 편이 로딩에 유리합니다.
어디에서 쓰이나
| 상황 | 예시 | 주의 |
|---|---|---|
| 이메일 첨부 | 파일을 텍스트로 전송 | 사용자가 직접 볼 일은 적음 |
| HTTP Basic Auth | user:pass를 인코딩 |
암호화가 아니므로 HTTPS 필수 |
| JWT | 헤더와 페이로드 | 누구나 디코딩 가능 |
| data URL | HTML 안에 작은 이미지 삽입 | 큰 파일은 페이지 용량 증가 |
JWT에서 점(.)으로 나뉜 앞의 두 부분은 Base64URL로 인코딩된 JSON입니다. 디코딩하면 내용을 읽을 수 있으므로 주민등록번호, 전화번호, 비밀 키 같은 값은 넣으면 안 됩니다.
한글 처리에서 생기는 문제
브라우저의 btoa()는 기본적으로 바이트 문자열을 다루므로 한글을 그대로 넣으면 오류가 날 수 있습니다. 한국어 문장을 다룰 때는 UTF-8 바이트로 바꾼 뒤 Base64로 인코딩해야 합니다.
const text = "안녕하세요";
const bytes = new TextEncoder().encode(text);
const base64 = btoa(String.fromCharCode(...bytes));
디코딩할 때도 반대로 UTF-8 문자열로 되돌려야 한글이 깨지지 않습니다.
Base64는 보안 기능이 아니다
Base64는 인코딩이지 암호화가 아닙니다. 누구나 다시 디코딩할 수 있습니다. 비밀번호를 Base64로 바꿔 저장하거나, API 키를 Base64로 숨겼다고 생각하면 위험합니다.
파일이 바뀌었는지 확인하려면 SHA 해시를 쓰고, 비밀번호 저장에는 bcrypt나 Argon2 같은 전용 방식이 필요합니다.
따라하기: 텍스트를 Base64로 바꾸기
이 도구는 텍스트를 Base64로 바꾸는 인코딩(입력을 다른 표현 방식으로 변환) 전용 화면입니다. 문구는 영어로 표시됩니다.
- Enter text to Base64(Base64로 바꿀 텍스트) 칸에 변환할 내용을 입력합니다.
- Convert to Base64(Base64로 변환) 버튼을 누릅니다.
- 아래 Base64 String(Base64 문자열) 칸에 결과가 나타나고, 옆의 Copy(복사) 버튼으로 복사할 수 있습니다.
영문·숫자·기호로 된 문장은 이대로 바로 변환됩니다.
여기서 막히면
한글을 넣었더니 오류가 나거나 값이 이상해요. 이 도구는 브라우저의 btoa() 방식을 쓰기 때문에, 한글처럼 1바이트를 벗어나는 문자는 그대로 처리하지 못합니다. 한국어 문장은 위에서 설명한 대로 UTF-8 바이트로 바꾼 뒤 인코딩하는 방식(코드 예시 참고)이 필요합니다.
반대로 Base64를 원래 텍스트로 되돌리고 싶어요. 이 화면은 인코딩(텍스트 → Base64) 전용이라 되돌리기(디코딩) 기능이 없습니다. Base64 → 텍스트 도구를 쓰세요.
이미지 파일을 Base64로 바꾸고 싶어요. 이 도구는 글자만 다룹니다. 그림 파일을 data URL로 넣으려면 이미지 → Base64 도구가 따로 있습니다.
자주 묻는 질문
Base64로 바꾸면 내용이 안전하게 숨겨지나요? 아닙니다. Base64는 암호화가 아니라 표현 방식을 바꾸는 인코딩입니다. 누구나 디코딩(원래 값으로 되돌리기)할 수 있으므로 비밀번호나 개인정보를 감추는 용도로 쓰면 안 됩니다.
변환하면 길이가 왜 늘어나나요? Base64는 3바이트를 4글자로 표현하기 때문에 결과가 원본보다 약 33% 깁니다. 그래서 큰 파일을 통째로 Base64로 넣으면 용량 부담이 커집니다.
주소(URL)에 넣을 값도 이걸로 바꾸면 되나요? 용도가 다릅니다. 주소에 안전하게 넣을 값은 URL 인코더로, 되돌릴 때는 URL 디코더로 처리하세요. Base64와 URL 인코딩은 서로 다른 규칙입니다.