- 인코딩이 무엇인가?
- 우리가 이미 쓰고 있는 인코딩의 예시(이모지, 한글, QR코드 등)
- Base64와 Base64URL의 원리
- HTTP 헤더에서 인코딩이 필요한 이유
- 인코딩의 암호화, 압축의 차이
인코딩의 개념, 필요성
1. 인코딩(Encoding)
데이터를 다른 표현 규칙으로 바꾸는 것
중요한 점 : 내용 자체는 변하지 않고, 표현 방식만 달라진다
"A"는 컴퓨터 내부에서 2진수로 01000001로 저장된다. 이것을 사람이 보기 편하게 A라고 인코딩해서 표현하는 것.
2. 왜 필요함?
- 소통을 위해서 : 서로 다른 언어나 기기에서도 같은 정보를 주고받기 위해 필요함
- 전송 안정성 : 어떤 통로는 한글이나 특수문자를 제대로 못읽는다. 이럴 때 인코딩으로 안전하게 바꾼다.
- 저장 호환성 : 텍스트 파일, 이메일, 웹 요청 등에서 문제가 생기지 않도록 돕는다
3. 실생활 속 인코딩 예시
| 예시 | 설명 |
| 문자 인코딩 | 카톡에서 보낸 이모지가 상대방에게 똑같이 보이는 이유 (UTF-8로 같은 규칙으로 표현하기 때문) |
| URL 인코딩 | 주소창에 공백 대신 %20이 들어가는 것 (https://example.com/hello%20world) |
| 동영상 인코딩 | 유튜브에서 같은 영상을 다른 프레임로 선택할 수 있는 이유 (영상 데이터를 다른 규칙으로 표현함) |
| QR코드 | 단순한 흑백 점들이 문자, 링크, 숫자로 변환되는 과정도 인코딩이다 |
안녕하세요 - > UTF-8 - > 바이트로 변환 - > 다른 기기에서 디코딩됨 - > 안녕하세요
Base64 인코딩
1. 또다른 인코딩이 필요한 이유
이메일, HTTP 헤더 같은 통로는 특수문자나 바이너리(사진, 음악, 파일)를 직접 담기 어렵다
그래서 모든 데이터를 알파벳 + 숫자만으로 바꿔서 안전하게 보내는 방식이 필요한데, 이게 Base64임
2. Base64의 원리
- 3바이트(24비트) -> 6비트씩 잘라서 -> 4개의 문자로 바꿈
- 총 64개의 안전한 문자(A-Z, a-z, 0-9, /)만 사용한다
- 나머지가 부족하면 = 기호로 채운다
예 : "Man" - > "TWFu"
- Man을 아스키 코드로 표현 -> 24비트 : 01001101 01100001 01101110
- 6비트씩 나눔 : 010011 010110 0000101 1011110
- 각 값을 Base64 표에 맵핑함 : T W F u
- 인코딩 완료!
3. 간단한 예
import java.util.Base64;
public class Base64Test {
public static void main(String[] args) {
String text = "hello world";
String encoded = Base64.getEncoder().encodeToString(text.getBytes());
String decoded = new String(Base64.getDecoder().decode(encoded));
System.out.println("encoded : " + encoded);
System.out.println("decoded : " + decoded);
}
}
결과
encoded : aGVsbG8gd29ybGQ=
decoded : hello world
Base64URL 인코딩
1. 이건 뭐임?
URL에서는 +, /, = 와 같은 문자가 문제를 일으킬 수 있다고 한다.
그래서 안전하게 +는 _, /는 -, =는 제거하도록 바꾼게 Base64URL이라고 함
Base64: QWxhZGRpbjpvcGVuIHNlc2FtZQ==
Base64URL: QWxhZGRpbjpvcGVuIHNlc2FtZQ # ==가 제거됨
HTTP 헤더에서의 인코딩 활용
Basic 인증에서 아이디, 비밀번호를 username:password로 합친 후 Base64로 인코딩한다
서버는 이를 디코딩해서 사용자를 확인한다
Authorization: Basic dXNlcm5hbWU6cGFzc3dvcmQ=
흐름 다이어그램
팁
* 인코딩은 암호화가 아니다. 누구나 다시 디코딩 할 수 있음
* Base64는 데이터가 약 4/3배로 늘어나므로 대용량 데이터에는 적합하지 않다고 한다.
* 하지만 텍스트 전송만 가능한 채널에서는 안전한 포장지 역할을 한다고 함.
정리
| 항목 | 설명 |
| 인코딩 | 표현 방식을 바꿔서 호환성을 높인다 |
| 실생활 예시 | 이모지, URL, 유튜브 화질, QR코드 |
| Base64 | 임의의 바이트를 안전한 문자로 표현함 |
| Base64URL | URL에 친화적인 표현 사용(-, _, = 제거) |
| 활용 | HTTP 헤더, 이메일, 토큰, Data URI 등 |
'Spring Boot > 유저 관리 기능' 카테고리의 다른 글
| Authorization 헤더, 토큰 기반 인증 : Authorization 헤더 (1) | 2026.03.13 |
|---|---|
| 기본 인증, 인코딩 : 기본 인증 보안 고려사항 (1) | 2026.03.10 |
| 기본 인증, 인코딩 : 기본 인증 (0) | 2026.03.09 |
| 쿠키와 세션 기반 인증 : 쿠키와 세션 보안 설정 (0) | 2026.03.08 |
| 쿠키와 세션 기반 인증 : 세션 기반 인증 (0) | 2026.03.07 |