API 문서를 읽다 보면 인증 헤더에 'Basic dXNlcjpwYXNz' 같은 문자열을 넣으라고 한다. 이 알 수 없는 문자열이 Base64로 인코딩된 'user:pass'다. 개발 중에 Base64를 다루는 상황은 생각보다 자주 온다.
Base64가 뭔가
Base64는 바이너리 데이터를 영문 대소문자, 숫자, +, / 총 64개 문자로 표현하는 인코딩 방식이다. 텍스트만 전송할 수 있는 환경에서 이미지나 파일 같은 바이너리 데이터를 안전하게 보내기 위해 만들어졌다.
예시 "Hello" → "SGVsbG8="
원본보다 약 33% 크기가 커지지만, 어디서든 텍스트로 전달할 수 있다.
어디에 쓰이나
- API 인증: HTTP Basic Auth에서 아이디:비밀번호를 Base64로 인코딩해서 헤더에 넣는다
- 이메일: 첨부파일을 MIME 형식으로 전송할 때 Base64로 변환한다
- HTML 이미지 삽입: 작은 아이콘을 Data URL로 바꿔 HTML에 직접 넣으면 HTTP 요청을 줄일 수 있다
- JWT 토큰: 페이로드를 Base64URL로 인코딩해서 전달한다
- 설정 파일: 인증서나 키 데이터를 Base64로 저장하는 경우가 많다
텍스트 변환과 이미지 변환
| 구분 | 입력 | 출력 | 용도 |
|---|---|---|---|
| 텍스트 → Base64 | 일반 문자열 | Base64 문자열 | API 인증, 데이터 전송 |
| Base64 → 텍스트 | Base64 문자열 | 원본 문자열 | 토큰 내용 확인, 디버깅 |
| 이미지 → Base64 | PNG, JPG 등 | Data URL | HTML/CSS에 이미지 내장 |
이미지를 드래그해서 Base64 변환기에 놓으면 Data URL이 바로 생성된다. CSS background-image에 붙여넣거나 HTML img 태그의 src에 넣으면 별도 이미지 파일 없이 표시할 수 있다. 텍스트 인코딩/디코딩도 입력 즉시 결과가 나오니, JWT 토큰의 페이로드를 빠르게 확인할 때 편하다.
Base64는 암호화가 아니라 인코딩이다. 누구나 디코딩할 수 있으니, 민감한 정보를 Base64만으로 보호하면 안 된다.