본문 바로가기

Spring Boot/유저 관리 기능

기본 인증, 인코딩 : 인코딩과 Base64URL

- 인코딩이 무엇인가?

- 우리가 이미 쓰고 있는 인코딩의 예시(이모지, 한글, QR코드 등)

- Base64와 Base64URL의 원리

- HTTP 헤더에서 인코딩이 필요한 이유

- 인코딩의 암호화, 압축의 차이


인코딩의 개념, 필요성

1. 인코딩(Encoding)

데이터를 다른 표현 규칙으로 바꾸는 것

중요한 점 : 내용 자체는 변하지 않고, 표현 방식만 달라진다

 

"A"는 컴퓨터 내부에서 2진수로 01000001로 저장된다. 이것을 사람이 보기 편하게 A라고 인코딩해서 표현하는 것.

 

 

2. 왜 필요함?

  1. 소통을 위해서 : 서로 다른 언어나 기기에서도 같은 정보를 주고받기 위해 필요함
  2. 전송 안정성 : 어떤 통로는 한글이나 특수문자를 제대로 못읽는다. 이럴 때 인코딩으로 안전하게 바꾼다.
  3. 저장 호환성 : 텍스트 파일, 이메일, 웹 요청 등에서 문제가 생기지 않도록 돕는다

 

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"

  1. Man을 아스키 코드로 표현 -> 24비트 : 01001101 01100001 01101110
  2. 6비트씩 나눔 : 010011 010110 0000101 1011110
  3. 각 값을 Base64 표에 맵핑함 : T W F u
  4. 인코딩 완료!

 

 

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 등