기본 개념 질문
Base64는 64개의 ASCII 문자로 바이너리를 표현하는 인코딩입니다. 데이터 용량이 원래보다 약 33% 늘어나는 대신 텍스트 환경에서 안전하게 전달할 수 있습니다. '=' 패딩은 문자열 길이를 4의 배수로 맞추는 채움재입니다. 끝에 =이 하나나 두 개 붙는 것은 정상이니 지우지 마세요. 패딩을 임의로 제거하면 표준 디코더가 거부할 수 있습니다.
암호화와 달리 키가 필요 없고, 누구나 디코딩할 수 있습니다. 그래서 비밀번호 보호 용도로는 절대 쓰면 안 됩니다. 한글이 깨져 보인다면 인코딩할 때의 문자 인코딩과 디코딩 환경이 다른 경우입니다. UTF-8 기준으로 처리하면 대부분 해결됩니다. 디코딩이 실패하는 가장 흔한 원인은 문자열이 중간에 잘리거나 공백·줄바꿈이 섞인 경우입니다. 원본 문자열을 통째로 다시 복사해 보세요. API에서 바이너리를 JSON으로 보낼 때도 Base64가 쓰입니다. 다만 대용량 파일 전송에는 적합하지 않으니 용도에 맞게 선택하세요.
Base64를 '텍스트로 바꾸는 포장'이라고 이해하면 쉽습니다. 택배 상자(바이너리)를 그대로 보낼 수 없을 때 종이봉투(텍스트)에 다시 싸는 것과 같습니다. 내용물은 그대로고 포장만 바뀌는 것이니, 보안과는 무관합니다. 대소문자를 구분한다는 점도 자주 묻습니다. Base64 알파벳은 대소문자를 구분합니다. 'Ab'와 'aB'는 완전히 다릅니다. 복사·붙여넣기 과정에서 대소문자가 바뀌지 않았는지 확인하세요. 특히 수기 입력은 금물입니다.
사용 중 생기는 질문
용량이 늘어나는 것도 포장의 대가입니다. 3바이트를 4문자로 표현하니 약 33%가 늘어납니다. 작은 데이터에는 부담 없지만 대용량에는 치명적입니다. CSS에 data URI를 넣을 때는 url() 안에 따옴표 처리를 신경 쓰세요. Base64 문자열 자체에는 따옴표가 없으니 큰따옴표로 감싸면 안전합니다. 처리 속도가 느리면 입력 길이를 의심하세요. 긴 문자열은 브라우저가 처리하는 데 시간이 걸립니다. 기다리면 대부분 끝납니다. 그래도 안 되면 문자열을 나누세요. 짧은 문자열은 빠릅니다. 속도는 입력 길이에 비례합니다.
문자열 중간에 공백이나 줄바꿈이 있으면 디코딩 전에 제거하세요. MIME 규격에서는 76자마다 개행을 넣기도 하는데, 디코딩할 때는 이를 무시하거나 제거해야 합니다. 이미지를 Base64 data URI로 삽입하면 HTTP 요청을 줄일 수 있지만, 파일이 크면 HTML 자체가 무거워집니다. 작은 아이콘급에만 쓰는 것이 좋습니다.
data URI로 쓸 때는 접두사 형식을 정확히 지켜야 합니다. data:[MIME];base64, 다음에 문자열이 바로 이어져야 하고, 중간에 공백이 들어가면 안 됩니다. 브라우저 콘솔에 오류가 찍히면 접두사 오타를 먼저 의심하세요. Base64가 암호화가 아니라는 점을 팀에 공유하세요. 난독화로 착각하는 사람이 많습니다. 민감한 값을 Base64로 '감춰' API에 실어 보내는 실수가 실제로 일어납니다. 누구나 디코딩할 수 있으니, 비밀은 암호화를 쓰세요.
활용 관련 질문
난독화로 착각하는 사람이 많습니다. 특히 수기 입력은 금물입니다.
인코딩된 문자열을 DB에 저장할 때는 컬럼 길이를 넉넉히 잡으세요. 원본의 4/3배에 여유를 더해 잡습니다. 길이가 모자라 잘리면 복원이 안 됩니다. TEXT 타입을 쓰면 마음이 편합니다. 한글을 인코딩했는데 결과가 매번 같냐는 질문도 있습니다. 같은 입력이면 결과는 항상 같습니다. 다르게 나왔다면 입력이 달랐던 겁니다. 보이지 않는 공백이나 줄바꿈 차이를 의심하세요.
긴 인코딩 문자열을 옮길 때는 메모장에 먼저 붙여넣어 줄바꿈을 정리하는 게 안전합니다.
자주 묻는 질문
Base64로 비밀번호를 저장해도 되나요?
안 됩니다. Base64는 인코딩일 뿐 암호화가 아니라 누구나 디코딩할 수 있습니다. 비밀번호는 해시 등 적절한 방식으로 보호해야 합니다.
인코딩하면 용량이 얼마나 늘어나나요?
약 33% 늘어납니다. 3바이트가 4문자로 바뀌는 구조라서, 1MB 파일은 약 1.37MB의 문자열이 됩니다.
디코딩 결과가 이상한 문자로 나와요.
입력 문자열이 완전한지 먼저 확인하세요. 메신저나 문서 프로그램을 거치며 특수문자가 바뀌거나 잘린 경우가 많습니다. 원본을 다시 복사해 붙여넣어 보세요.
Base64 문자열인지 어떻게 알 수 있나요?
A-Z, a-z, 0-9, +, / 문자로만 이루어지고 끝이 =로 끝날 수 있으며 길이가 4의 배수인 경우가 많습니다. 하지만 확정하려면 디코딩해 보는 것이 가장 확실합니다.