[가이드]
8분 읽기
[가이드] 완전한 Base64 참조
Base64 인코딩에 대해 알아야 할 모든 것: 이론, 구현, 그리고 모범 사례.
2025년 1월
|
fundamentals
// BASE64란 무엇인가?
Base64는 64개의 ASCII 문자를 사용하여 바이너리 데이터를 나타내는 바이너리-텍스트 인코딩 방식입니다. 텍스트 데이터용으로 설계된 미디어에서 바이너리 데이터를 저장하고 전송하기 위해 설계되었습니다.
Base64 문자 집합에는 A-Z, a-z, 0-9, 그리고 두 개의 추가 문자(일반적으로 +와 /)가 포함되며, 패딩을 위한 =가 있습니다.
// BASE64 작동 원리
Base64 인코딩은 바이너리 데이터를 가져와 ASCII 문자의 문자열로 변환하는 방식으로 작동합니다. 프로세스는 다음과 같습니다:
1. 입력을 6비트 청크로 나누기 (Base64는 문자당 6비트 사용) 2. 각 6비트 값을 Base64 알파벳의 문자에 매핑 3. 필요한 경우 '=' 문자로 패딩 추가
// 예제: 'Man'을 Base64로 인코딩
// 'M' = 01001101, 'a' = 01100001, 'n' = 01101110
// 결합: 010011010110000101101110
// 6비트 그룹으로 분할: 010011 010110 000101 101110
// 십진수 값: 19, 22, 5, 46
// Base64 문자: T, W, F, u
// 결과: 'TWFu'
// 일반적인 사용 사례
- > HTML/CSS에 이미지 임베드 (data URIs)
- > JSON API용 바이너리 데이터 인코딩
- > 이메일 첨부파일 (MIME 인코딩)
- > 데이터베이스에 바이너리 데이터 저장
- > 인증 토큰과 API 키
- > URL 안전 데이터 전송
// JAVASCRIPT 구현
모던 브라우저는 내장된 Base64 인코딩 및 디코딩 함수를 제공합니다:
텍스트를 Base64로 인코딩하려면 btoa() (binary to ASCII)를 사용하세요. Base64를 텍스트로 디코딩하려면 atob() (ASCII to binary)를 사용하세요.
// 텍스트를 Base64로 인코딩
const text = '안녕하세요, 세계!';
const encoded = btoa(text);
console.log(encoded); // 7JWI64WV7ZWY7IS47JqULCDshLjqs4Uh
// Base64를 텍스트로 디코딩
const decoded = atob(encoded);
console.log(decoded); // 안녕하세요, 세계!
// 유니코드 문자열의 경우, TextEncoder/TextDecoder 사용
const encoder = new TextEncoder();
const decoder = new TextDecoder();
const unicodeText = '안녕하세요, 世界!';
const bytes = encoder.encode(unicodeText);
const base64 = btoa(String.fromCharCode(...bytes));
console.log(base64);
// 보안 고려사항
Base64는 암호화나 보안이 아닙니다. 단순히 데이터 표현을 위한 인코딩입니다. 중요한 보안 사항들:
민감한 데이터 보호를 위해 Base64만 사용하지 마세요. 인젝션 공격을 방지하기 위해 항상 Base64 입력을 검증하세요. Base64는 데이터 크기를 약 33% 증가시킨다는 점을 인지하세요.
- > Base64는 쉽게 역방향 변환 가능 - 보안을 제공하지 않음
- > 항상 Base64 입력을 검증하고 정제
- > 민감한 데이터에는 적절한 암호화 사용
- > 웹 애플리케이션에는 URL 안전 Base64 변형 고려
- > 일부 컨텍스트에서 패딩 오라클 공격 주의
// 모범 사례
- > 웹 애플리케이션에는 URL 안전 Base64 사용 (+를 -로, /를 _로 교체)
- > 항상 패딩을 올바르게 처리
- > 입력 길이와 문자 검증
- > 큰 데이터에는 인코딩 전 압축 고려
- > 매우 큰 데이터 세트에는 스트리밍 사용
- > 잘못된 입력에 대한 적절한 오류 처리 구현