Base64 인코더·디코더
텍스트를 Base64로 인코딩하거나 Base64 문자열을 원래 텍스트로 디코딩합니다. 한글(UTF-8) 완벽 지원.
🔒 입력한 텍스트와 파일은 서버로 전송되지 않고 브라우저 안에서만 변환됩니다. Base64는 암호화가 아니라 누구나 되돌릴 수 있는 인코딩이므로 비밀번호·개인정보를 감추는 용도로 쓰면 안 됩니다.
Base64 인코더·디코더란?
텍스트나 파일을 Base64로 인코딩하거나, Base64 문자열을 원래 내용으로 디코딩해야 할 때 사용하는 도구입니다. 웹 개발 시 이미지나 폰트 파일을 CSS, HTML에 바로 삽입할 수 있는 data URI 형태로 만들거나, API 연동 시 바이너리 데이터를 안전한 텍스트로 변환하는 등 다양한 용도로 활용할 수 있습니다. 입력창에 내용을 붙여넣는 즉시 변환이 시작되며, 한글·이모지를 포함한 모든 UTF-8 문자를 완벽하게 지원합니다. 텍스트뿐만 아니라 이미지, PDF 등 모든 파일을 끌어다 놓아 Base64와 data URI를 한 번에 생성할 수도 있습니다. URL-safe, MIME(76자 줄바꿈) 같은 고급 옵션도 제공하며, 입력한 모든 데이터는 서버로 전송되지 않고 브라우저 안에서만 안전하게 처리됩니다.
사용 방법
- 인코딩할 텍스트를 '입력' 창에 붙여넣거나, 파일을 회색 점선 영역으로 끌어다 놓습니다.
- 내용을 입력하는 즉시 '결과' 창에 Base64로 변환된 문자열이 실시간으로 나타납니다. 파일을 올린 경우 'data URI'도 함께 생성됩니다.
- 변환 방향을 바꾸려면 '📝 텍스트 → Base64' 또는 '🔓 Base64 → 텍스트' 버튼을 누릅니다.
- 필요에 따라 'URL-safe' 또는 '76자마다 줄바꿈' 옵션을 선택하여 결과 형식을 바꿀 수 있습니다.
- 결과창 우측의 '복사' 버튼으로 변환된 문자열을 가져가거나 '저장' 버튼으로 파일로 다운로드합니다.
Base64 인코더·디코더 사용 가이드
실제 작업에서 이 도구를 어떻게 쓰는지, 무엇을 조심해야 하는지 정리했습니다.
Base64는 암호화가 아닙니다 — 여기서 사고가 납니다
Base64는 바이트를 A–Z a–z 0–9 + / 64개 문자로 바꿔 적는 표기법일 뿐입니다. 열쇠도 비밀도 없고, 이 페이지의 "디코딩" 버튼 하나면 누구나 원문으로 되돌립니다. 그런데도 눈으로 봤을 때 알아볼 수 없다는 이유로 무언가를 감추는 용도로 쓰다가 문제가 되는 경우가 많습니다.
실제로 자주 보이는 잘못된 사용은 이렇습니다. 프런트엔드 코드에 API 키를 Base64로 넣어 두기, 쿠키에 회원 등급을 Base64로 저장하기, 결제 요청 파라미터에 금액을 Base64로 실어 보내기. 셋 다 개발자 도구를 열 줄 아는 사람이면 읽고, 고쳐서, 다시 보낼 수 있습니다.
- 숨기고 싶다 → 암호화(AES 등). 키가 있어야 풀립니다.
- 위조를 막고 싶다 → 서명(HMAC·JWT). 값이 바뀌면 검증이 깨집니다.
- 깨지지 않게 실어 보내고 싶다 → Base64. 이것이 원래 용도입니다.
한글이 깨지는 이유 — UTF-8을 거쳐야 합니다
Base64는 문자가 아니라 바이트를 다룹니다. 그래서 한글을 인코딩하려면 먼저 "한글 → 바이트" 단계가 필요하고, 이때 어떤 문자 인코딩을 쓰느냐에 따라 결과가 완전히 달라집니다. 이 도구는 UTF-8로 고정합니다. "안녕"은 UTF-8에서 6바이트라 인코딩 결과가 8자로 나옵니다.
한글이 깨져 보인다면 대개 양쪽 인코딩이 다른 것입니다. 예전 시스템이나 일부 자바 코드가 EUC-KR(CP949)로 바이트를 만들어 Base64를 찍으면, 그 값을 UTF-8로 디코딩하는 이 도구에서는 물음표나 이상한 글자가 나옵니다. 반대 방향도 마찬가지입니다.
- atob(btoa(한글))로 처리하다 오류가 났다 — 자바스크립트의 btoa 는 문자당 1바이트만 가정하므로 한글에서 예외를 던집니다. 이 도구는 TextEncoder로 UTF-8 바이트를 먼저 만든 뒤 인코딩하므로 한글·이모지 모두 정확합니다.
- 디코딩 결과가 통째로 깨졌다 — 원본이 EUC-KR 바이트일 가능성이 큽니다. 만든 쪽에서 UTF-8로 바꿔 다시 만들어야 합니다.
- "UTF-8 텍스트가 아닙니다 — 바이너리로 보입니다" 경고가 떴다 — 정상입니다. 이미지·PDF 같은 파일을 디코딩한 것이라 글자로 보일 리가 없습니다.
URL-safe 옵션은 언제 켜나
표준 Base64의 + / = 세 문자는 URL에서 다른 뜻을 갖습니다. + 는 쿼리스트링에서 공백으로 해석될 수 있고, / 는 경로 구분자, = 는 키와 값의 구분자입니다. 그래서 값이 주소나 파일명에 들어가야 하면 URL-safe 체크박스를 켜서 + 를 - 로, / 를 _ 로 바꾸고 끝의 = 패딩을 뗍니다.
| 상황 | URL-safe | 이유 |
|---|---|---|
| 쿼리스트링·경로에 값을 넣을 때 | 켬 | + / = 가 URL 문법과 충돌 |
| JWT 토큰을 다룰 때 | 켬 | JWT는 규격 자체가 base64url |
| 파일 이름으로 쓸 때 | 켬 | / 는 파일명에 못 들어감 |
| data URI 를 만들 때 | 끔 | 브라우저는 표준 Base64만 읽음 |
| 이메일 첨부·MIME | 끔 | 표준 Base64 + 76자 줄바꿈이 규격 |
data URI — 파일을 코드 안에 박아 넣기
드롭존에 파일을 끌어다 놓으면 Base64와 함께 data URI 칸이 나타납니다. data:image/png;base64,iVBOR… 형태의 이 문자열은 img 태그의 src 나 CSS의 background-image: url(...) 에 그대로 넣을 수 있어, 파일을 따로 올리지 않고도 화면에 띄울 수 있습니다.
쓸 만한 곳은 정해져 있습니다. 아이콘 몇 개짜리 작은 PNG·SVG, HTML 메일 안의 로고, 외부 파일을 부를 수 없는 환경의 폰트 정도입니다. 반대로 큰 사진에 쓰면 손해입니다. 인코딩하면 용량이 약 33% 늘고, 이미지가 HTML·CSS 안에 박히므로 브라우저가 따로 캐시해 두지 못해 페이지를 열 때마다 같은 데이터를 다시 받습니다.
왜 용량이 늘어나나 · 76자 줄바꿈은 뭔가
3바이트를 4글자로 적기 때문에 결과는 원본의 4/3, 즉 약 33% 커집니다. 통계 영역의 "크기 변화"가 대체로 +33% 근처로 나오는 이유입니다. 이 증가분은 피할 수 없으므로, 첨부 용량 제한이 10MB인 시스템에 Base64로 실어 보낸다면 원본은 7.5MB 정도가 한계라고 계산해야 합니다.
"76자마다 줄바꿈"은 이메일용입니다. MIME 규격이 한 줄 길이를 제한하기 때문에 옛 메일 서버가 긴 한 줄을 잘라 버리는 일이 있습니다. 메일 본문에 직접 넣을 것이 아니라면 켤 필요가 없습니다.
# 큰 파일은 터미널이 빠릅니다 (macOS/Linux)
base64 -i logo.png -o logo.b64 # 인코딩
base64 -d logo.b64 > logo.png # 디코딩
# 브라우저 드롭존은 8MB 까지만 받습니다
자주 묻는 질문
Base64는 암호화인가요?
아닙니다. Base64는 정해진 규칙에 따라 데이터를 다른 문자 형태로 바꾸는 '인코딩' 방식일 뿐, 암호화가 아닙니다. 변환 규칙이 공개되어 있어 누구나 원래 내용으로 되돌릴 수 있으므로, 비밀번호나 개인정보 같은 민감 데이터를 보호하는 용도로 사용해서는 안 됩니다.
한글이나 특수문자가 깨지지 않나요?
네, 깨지지 않습니다. 이 도구는 국제 표준인 UTF-8 인코딩을 기준으로 텍스트를 처리합니다. 따라서 한글, 한자, 일본어, 이모지(🎉) 등 전 세계 모든 문자를 손실 없이 정확하게 Base64로 변환하고 다시 원래대로 복원할 수 있습니다.
파일을 변환하면 나오는 'data URI'는 무엇인가요?
data URI는 이미지 같은 파일을 별도 파일로 저장하지 않고, Base64로 인코딩된 텍스트 자체를 HTML이나 CSS 코드에 직접 포함시키는 방법입니다. 자잘한 아이콘 이미지 등에 사용하면 서버 요청 횟수를 줄여 웹페이지 로딩 속도를 높이는 데 도움이 됩니다. 이 도구는 파일을 올리면 즉시 복사해서 쓸 수 있는 data URI를 자동으로 만들어 줍니다.
'URL-safe'나 '76자마다 줄바꿈' 옵션은 언제 쓰나요?
'URL-safe'는 Base64에 포함된 특수문자 '+'와 '/'를 각각 '-', '_'로 바꾸어 URL 주소나 파일명에 사용해도 문제가 없도록 만듭니다. '76자마다 줄바꿈(MIME)'은 과거 이메일 시스템 등에서 사용하던 표준 규격으로, 아주 긴 Base64 문자열을 76자 단위로 끊어 여러 줄로 표시할 때 사용합니다.