반응형
Base64 인코딩/디코딩을 사용하는 핵심 이유는 바이너리 데이터를 텍스트 형태로 안전하게 전달하기 위해서입니다.
예를 들어 이미지, DICOM, PDF, 인증서, 암호화 키 같은 데이터는 원래 바이너리 데이터입니다. 그런데 HTTP, JSON, XML, 이메일, URL, 로그 시스템 등은 보통 텍스트 중심으로 데이터를 다루기 때문에 바이너리를 그대로 넣으면 깨지거나 전송 중 문제가 생길 수 있습니다. 이때 Base64로 인코딩하면 바이너리를 A-Z, a-z, 0-9, +, /, = 같은 문자 조합으로 바꿔서 안전하게 전달할 수 있습니다.
대표적인 사용 이유는 다음과 같습니다.
- JSON/XML 안에 파일 데이터를 넣기 위해
이런 식으로 이미지나 문서를 Base64 문자열로 넣을 수 있습니다.{ "fileName": "image.png", "fileData": "iVBORw0KGgoAAAANSUhEUgAA..." } - JSON은 문자열은 잘 다루지만, 바이너리 파일 자체를 직접 넣기 어렵습니다.
- HTTP API에서 바이너리 데이터를 안전하게 전송하기 위해예를 들어:서버에서는 다시:
- byte[] bytes = Convert.FromBase64String(base64);
- byte[] bytes = File.ReadAllBytes("test.dcm"); string base64 = Convert.ToBase64String(bytes);
- API 요청/응답에서 파일을 텍스트 필드로 포함해야 할 때 사용합니다.
- URL, 이메일, 토큰, 인증 정보 등에 포함하기 위해
- 일부 시스템은 특수문자나 바이너리를 허용하지 않기 때문에 Base64로 변환해서 전달합니다. JWT 토큰도 내부적으로 Base64URL 인코딩을 사용합니다.
- 문자 인코딩 문제를 피하기 위해
- 시스템마다 UTF-8, EUC-KR, ASCII 등 문자 인코딩 처리가 다를 수 있습니다. 바이너리 데이터를 그대로 문자열처럼 다루면 깨질 수 있는데, Base64는 비교적 안전한 ASCII 문자로 바꿔줍니다.
다만 중요한 점은 Base64는 암호화가 아닙니다. 누구나 디코딩할 수 있습니다.
hello → aGVsbG8=
위 문자열은 쉽게 다시 hello로 복원됩니다. 그래서 비밀번호나 개인정보를 보호하려는 목적이라면 Base64가 아니라 암호화, 해싱, HTTPS 등을 사용해야 합니다.
또한 Base64는 원본보다 데이터 크기가 약 33% 정도 커집니다. 그래서 큰 파일을 많이 전송할 때는 multipart/form-data, 파일 업로드 API, S3 presigned URL 같은 방식이 더 적합할 수 있습니다.
정리하면, Base64는 데이터를 숨기기 위한 기술이 아니라, 바이너리 데이터를 텍스트 환경에서 안전하게 주고받기 위한 인코딩 방식입니다.
반응형
'[====== Development ======] > Etc' 카테고리의 다른 글
| Ubuntu 에 Docker를 설치방법 (0) | 2025.11.05 |
|---|---|
| 윈도우에서 ppk 파일을 pem 파일로 변환하는 방법 (1) | 2025.10.30 |
| 윈도우 CMD에서 github 연동방법 (0) | 2025.10.29 |
| Ubuntu Github 로그인 및 Clone 방법 (0) | 2025.10.23 |
| Docker 명령어 모음 (0) | 2025.07.23 |