25.01.07 TIL Base64 인코딩

신성훈·2025년 1월 7일

TIL

목록 보기
114/162

1. Base64란?

Base64는 이진 데이터를 텍스트 형식으로 변환하는 인코딩 방식입니다.
네트워크 전송, 이메일 첨부, 또는 텍스트 기반 시스템에서 이진 데이터를 안전하게 표현하기 위해 자주 사용됩니다.

Base64는 64개의 문자(A-Z, a-z, 0-9, +, /)를 사용하며, 변환된 결과는 3바이트 데이터를 4바이트로 표현하고, 데이터 길이가 3의 배수가 아닐 경우 패딩 문자(=)를 사용합니다.


2. Base64의 주요 특징

  1. 텍스트 표현: 바이너리 데이터(1과 0)를 텍스트로 변환하여 네트워크 전송에 적합
  2. 크기 증가: 변환 후 데이터 크기가 약 33% 증가
  3. 플랫폼 독립성: 모든 시스템에서 호환 가능

3. Base64의 동작 원리

1. 데이터 분할

  • 원본 데이터를 3바이트(24비트)씩 나눕니다.

2. 비트 그룹화

  • 각 3바이트 데이터를 6비트(0~63) 단위로 나누어 4개의 그룹으로 분리합니다.

3. 매핑

  • 6비트 값을 Base64 인코딩 표에 매핑하여 텍스트로 변환합니다.

4. 패딩 처리

  • 데이터가 3의 배수가 아닐 경우, 부족한 바이트를 = 문자로 채웁니다.

4. Base64의 주요 사용 사례

  1. 이메일 첨부파일(MIME)

    • 이메일 전송 시 바이너리 데이터를 텍스트로 변환해 첨부
  2. JWT (JSON Web Token)

    • JWT의 Header와 Payload를 Base64 URL-safe 방식으로 인코딩
  3. 네트워크 통신

    • HTTP 요청/응답에서 바이너리 데이터를 안전하게 전송하기 위해 사용
  4. 이미지 인코딩

    • 이미지를 텍스트로 변환해 HTML 또는 JSON에 포함

5. Base64 예시

Java로 Base64 인코딩/디코딩

import java.util.Base64;

public class Base64Example {
    public static void main(String[] args) {
        String data = "Hello, Base64!";

        // Base64 인코딩
        String encodedData = Base64.getEncoder().encodeToString(data.getBytes());
        System.out.println("Encoded: " + encodedData);

        // Base64 디코딩
        byte[] decodedBytes = Base64.getDecoder().decode(encodedData);
        String decodedData = new String(decodedBytes);
        System.out.println("Decoded: " + decodedData);
    }
}

출력 결과

Encoded: SGVsbG8sIEJhc2U2NCE=
Decoded: Hello, Base64!

6. Base64의 장단점

장점

  1. 데이터 안전성: 텍스트 기반 시스템에서도 바이너리 데이터를 안전하게 전송 가능
  2. 간편성: 구현이 간단하고 효율적

단점

  1. 데이터 크기 증가: 약 33% 데이터 크기 증가
  2. 암호화가 아님: 단순 변환이므로 보안에는 취약

7. 마무리

Base64는 네트워크 및 파일 전송에서 데이터를 안전하게 변환하는 데 매우 유용합니다. Spring 환경에서도 JWT 사용 시 Base64를 다루는 일이 많아 실제 프로젝트에서 활용도가 높았습니다. 하지만 데이터 크기 증가와 보안 이슈를 고려하여 적절한 상황에 사용하는 것이 중요하다는 점을 느꼈습니다.

profile
조급해하지 말고, 흐름을 만들고, 기록하면서 쌓아가자.

0개의 댓글