피드로 돌아가기
Base64 Encoder Decoder: Complete Guide for Developers
Dev.toDev.to
Backend

Base64 Encoder Decoder: Complete Guide for Developers

Base64 인코딩/디코딩의 올바른 사용법과 언어별 구현 방식을 정리한 개발자 가이드

楊東霖2026년 3월 25일10beginner

Context

Base64 인코딩은 웹 개발에서 API 인증 헤더, JWT 토큰, 이미지 Data URI, 이메일 첨부파일 등 다양한 용도로 사용되지만, 암호화와 혼동하거나 유니코드 처리, 이진 데이터 디코딩 시 발생하는 문제들을 올바르게 이해하지 못하는 경우가 많다.

Technical Solution

  • 언어별 기본 인코딩/디코딩 메서드 구분: JavaScript의 btoa()/atob()는 Latin-1만 지원하므로 유니코드는 Buffer 또는 TextEncoder 사용
  • Node.js에서 파일 처리: Buffer.from().toString('base64')로 파일을 읽어 인코딩하고, toString('utf8')로 디코딩
  • URL-safe Base64 사용: JWT, OAuth2 등에서 + → - , / → _ 로 변환하고 패딩(=) 제거
  • 이진 데이터 보호: atob() 결과를 문자열로 처리하면 데이터 손상되므로 Uint8Array로 변환
  • HTTP Basic Authentication 구현: username:password를 Base64로 인코딩하여 Authorization 헤더에 전송
  • 이미지 Data URI 임베드: 작은 아이콘은 data:image/png;base64로 HTML에 직접 삽입 가능

Impact

Base64 인코딩은 데이터 크기를 약 33% 증가시킨다. (원본 1000바이트 → 인코딩 후 약 1333바이트)

Key Takeaway

Base64는 인코딩(텍스트 안전 포맷 변환)이지 암호화가 아니므로 누구나 밀리초 단위로 디코딩할 수 있다. 따라서 JWT 페이로드나 Base64 문자열로 민감 데이터를 보호하려는 시도는 보안 착각이며, 대신 HTTPS 전송 및 필요시 JWE 암호화를 적용해야 한다.


JWT 토큰을 처리하는 프론트엔드에서는 Base64URL 디코딩 시 atob() 대신 Buffer.from(str, 'base64url').toString('utf8')를 사용하면 패딩 제거와 문자 치환을 안전하게 처리할 수 있고, 이진 파일 업로드 API를 구현할 때는 FileReader.readAsDataURL() 후 data: 접두사를 제거한 Base64 문자열만 JSON 바디에 포함하면 된다.

원문 읽기
Base64 Encoder Decoder: Complete Guide for Developers | Devpick