한 번 짚으면 헷갈림이 사라진다
도구 쓰다 보면 비슷한 질문이 자주 나온다. 한 번 정리해 두면 다음에 다시 헷갈리는 일이 줄어든다.
Q1. 결과가 왜 4의 배수야?
Base64는 3바이트(24비트)를 4개 문자(각 6비트)로 변환. 입력이 3의 배수가 아니면 = 패딩으로 4의 배수 맞춤.
Q2. 6비트로 64개 문자?
2의 6제곱 = 64. 6비트로 0~63 표현 가능. 64개 문자(A-Z 26, a-z 26, 0-9 10, +/ 2)로 매핑.
Q3. 왜 +와 /를 쓰지?
역사적 이유. 처음 표준에서 채택된 문자. URL에서 특별 의미가 있어 URL-safe 변형(-, _)이 추가됐다.
Q4. 이미지를 텍스트로 만드는 이유?
이메일·HTML 같은 텍스트 환경에서 이미지를 직접 임베딩 가능. 별도 파일 없이 한 자료에 모든 게 들어간다. Base64 인코더로 작은 이미지 즉시 변환.
Q5. 큰 파일도 가능?
가능하지만 결과가 1.33배 커진다. 1MB 파일 → 1.33MB Base64. 너무 큰 파일은 일반 URL로 처리하는 편이 효율적.
Q6. JWT는 표준 Base64야?
아니다. JWT는 Base64URL 형식. + 대신 -, / 대신 _, 패딩 생략. URL에 그대로 사용 가능.
Q7. atob/btoa의 차이?
JavaScript 함수. btoa() = "binary to ASCII" 인코딩. atob() = "ASCII to binary" 디코딩. 헷갈리기 쉬운 이름.
Q8. 한글이 이상해 보여
JavaScript btoa()는 ASCII만 처리. 한글은 사전 UTF-8 처리 필요. encodeURIComponent → btoa 흐름. Base64 디코더는 보통 UTF-8 호환.
마무리
Base64 관련 질문은 한두 번 짚으면 다음부터 헷갈리지 않는다.