배너 이미지

BASE 64

2025. 4. 21. 19:28·CS공부/기타 CS지식

이번 포스트에서는 운영체제 공부의 연장선으로,
데이터 인코딩 방식 중 하나인 BASE64의 구조와 원리를 정리하였다.
파일 전송, 이메일, HTTP 통신 등 다양한 환경에서 사용되는 BASE64는
이진 데이터를 텍스트로 안전하게 변환해주는 기본 기술 중 하나이다.


1. BASE64란?

BASE64는 바이너리 데이터를 텍스트 형식으로 변환하는 인코딩 방식이다.

  • 이름 그대로 64개의 ASCII 문자(A-Z, a-z, 0-9, +, /)를 사용한다.
  • 주로 이진 파일을 텍스트 기반의 전송 경로에서 안전하게 전달하기 위해 사용된다.
  • 출력은 항상 4의 배수 길이의 문자열로 구성된다.

2. 인코딩 과정

BASE64는 3바이트(24비트)를 기준으로 다음과 같은 과정을 거친다:

1. 3바이트 입력 (총 24비트) → 6비트 단위로 나눔 → 4개의 인덱스 생성
2. 각 인덱스를 BASE64 테이블에 매핑 → ASCII 문자로 변환
3. 입력이 3바이트보다 작을 경우 `=` 패딩을 추가하여 길이를 맞춤

예시:

  • 입력 (ASCII): M a n → 바이너리로 변환 → 01001101 01100001 01101110
  • 6비트 단위로 분리 → 010011 010110 000101 101110 → 19 22 5 46
  • BASE64 문자로 변환 → TWFu

3. 디코딩 과정

디코딩은 인코딩과 반대 순서로 이루어진다:

  1. BASE64 문자열을 4자 단위로 자르고, 각 문자의 인덱스를 복원한다.
  2. 6비트 단위로 합쳐 24비트로 만든 후, 이를 다시 3바이트로 분할한다.
  3. = 패딩은 실제 바이트 수 계산 시 제외된다.

4. BASE64의 장단점

장점

  • 텍스트 기반 환경에서 이진 데이터를 안전하게 전달할 수 있다.
  • 이메일, JSON, XML, JWT 등에서 널리 사용된다.

단점

  • 인코딩 결과가 원본보다 약 33% 커진다.
  • 암호화나 압축과는 달리 단순히 표현 형태를 바꾸는 인코딩일 뿐이다.

5. 개발자가 BASE64를 접하는 상황

  • 이미지나 바이너리 데이터를 문자열로 변환할 때 (예: <img src="data:image/png;base64,...">)
  • JWT 토큰 내부의 payload 인코딩
  • API를 통해 파일 업로드 시 BASE64 포맷으로 전송되는 경우

학습 정리

BASE64는 구조적으로 단순하지만,
텍스트 중심의 인터넷 환경에서 이진 데이터를 안전하게 주고받는 데 매우 중요한 역할을 한다.
인코딩과 디코딩의 내부 동작을 이해하면, 단순한 사용을 넘어 디버깅, 보안, 데이터 처리까지 폭넓게 응용할 수 있다.

'CS공부 > 기타 CS지식' 카테고리의 다른 글

락(Lock)의 종류와 적용 전략: Optimistic vs Pessimistic  (0) 2025.05.14
해싱 보안 이슈 및 강화 가이드  (1) 2025.04.26
SK텔레콤 유짐정보 해킹, BPFdoor 악성코드 사건 정리  (3) 2025.04.26
N+1 문제  (0) 2025.04.21
데드락(Deadlock)  (0) 2025.04.21
'CS공부/기타 CS지식' 카테고리의 다른 글
  • 해싱 보안 이슈 및 강화 가이드
  • SK텔레콤 유짐정보 해킹, BPFdoor 악성코드 사건 정리
  • N+1 문제
  • 데드락(Deadlock)
quokkaST
quokkaST
  • quokkaST
    stquokka
    quokkaST
    • 개발자 (77)
      • n8n (2)
      • CS공부 (46)
        • Java & Spring (15)
        • 인프라 (7)
        • 운영체제 & 시스템 (9)
        • 기타 CS지식 (7)
        • 네트워크 (6)
        • 데이터베이스 (2)
      • 알고리즘 (16)
      • 프로젝트 (8)
        • 감정&금융챗봇 (8)
      • 리팩토링 (5)
        • horong (5)
  • 블로그 메뉴

    • 홈
  • 링크

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
상단으로

티스토리툴바