변수의 기록

(컴퓨터 구조) 문자 인코딩 완전 정리: ASCII, Unicode, UTF-8, UTF-16, 그리고 URL/Base64 인코딩 본문

CS지식/컴퓨터 구조 (Computer Architecture)

(컴퓨터 구조) 문자 인코딩 완전 정리: ASCII, Unicode, UTF-8, UTF-16, 그리고 URL/Base64 인코딩

불광동 물주먹 2025. 6. 15. 22:44

문자 인코딩 완전 정리: ASCII, Unicode, UTF-8, UTF-16, 그리고 URL/Base64 인코딩


1. 문자 인코딩의 시작: ASCII

개요

  • ASCII (American Standard Code for Information Interchange)
  • 1960년대 등장
  • 7비트(0~127)로 구성되어 총 128개의 문자만 표현 가능
    • 알파벳 대/소문자, 숫자, 일부 특수기호만 포함

한계

  • 한글, 한자, 일본어 등 비영어권 문자 표현 불가
  • 다국어 처리에 적합하지 않음

2. 확장 ASCII와 완성형 인코딩 (한글 등장 배경)

완성형(예: EUC-KR, CP949)

  • 한글 표현을 위해 만들어진 한국어 문자 집합
  • 한글의 완성된 글자 조합만 저장 (예: 가, 나, 다 등)
  • 초성/중성/종성을 나눠 표현하지 못함
  • MS Windows는 CP949, UNIX 계열은 EUC-KR 사용

문제점

  • 국가별 문자표가 다 달라서, 문자 깨짐 현상 다수 발생
  • 인터넷 시대에 이 문제는 더 심각해짐

3. 유니코드 (Unicode): 전 세계 문자 통일

개념

  • 모든 문자에 고유한 번호(Code Point)를 부여하는 국제 표준
  • 예시:
    • A → U+0041
    • 가 → U+AC00
    • 你 → U+4F60
    • 🐶 → U+1F436

구조

  • 처음엔 **16비트 고정 길이(65536문자)**로 시작했지만,
    한자, 이모지 등으로 부족해져 현재는 21비트 범위 사용 (U+0000 ~ U+10FFFF)

중요한 포인트

  • 유니코드는 문자 자체가 아니라, 문자에 부여된 고유 번호이다.
  • 실제 저장은 반드시 인코딩 방식을 거쳐야 한다.

4. UTF-8: 유니코드를 바이트로 저장하는 방식

등장 배경

  • 인터넷에서는 영어(ASCII)와 호환성이 매우 중요했음
  • 유니코드 자체는 영어와 호환되지 않음 → 새로운 인코딩 방식 필요

구조

  • 가변 길이 인코딩 (1~4바이트)
    • U+0000 ~ U+007F → 1바이트 (ASCII 그대로)
    • U+0080 ~ U+07FF → 2바이트
    • U+0800 ~ U+FFFF → 3바이트 (한글 대부분 포함)
    • U+10000 ~ U+10FFFF → 4바이트 (이모지, 희귀 문자)

특징

  • 영어 중심 사이트에서는 공간 효율성 매우 높음
  • ASCII와 완벽 호환
  • 웹, HTML, JSON 등 인터넷 표준 인코딩 방식
  • UTF-8은 유니코드의 가장 널리 쓰이는 인코딩 방식

5. UTF-16: 유니코드를 2바이트 단위로 표현

구조

  • 기본적으로 2바이트(16비트) 단위로 표현
  • U+0000 ~ U+FFFF → 2바이트
  • U+10000 이상 → Surrogate Pair라는 특수한 4바이트 조합 사용

방식

  • 엔디안(Endian) 방식에 따라 저장 순서 달라짐
    • UTF-16LE (Little Endian)
    • UTF-16BE (Big Endian)
  • BOM(Byte Order Mark)로 저장 순서 구분

사용처

  • Windows 내부 시스템
  • Java, .NET 환경의 내부 문자 표현 방식

6. URL 인코딩 (Percent Encoding)

개요

  • URL에 사용할 수 없는 문자들을 % 기호와 16진수로 치환
    • 공백 → %20
    • 한글 ‘가’ → %EA%B0%80 (UTF-8 바이트 기반)

목적

  • URL에서 특수문자, 공백, 한글 등이 깨지지 않게 하기 위함
  • 웹 서버와의 통신 안정성 확보

7. Base64 인코딩

개요

  • 이진 데이터를 텍스트로 안전하게 변환하는 방식
  • 3바이트(24비트)를 6비트씩 나눠 4개의 문자로 표현
  • AZ, az, 0~9, +, / 등의 안전한 문자만 사용

용도

  • 이메일 첨부 파일 (MIME)
  • JWT 토큰
  • 이미지 데이터 인코딩 (Data URI)

8. ASCII, Unicode, UTF-8/16 간 비교


구분 ASCII Unicode UTF-8 UTF-16
문자 수 128 100,000+ 동일 동일
바이트 수 1 정의만 있고 인코딩 없음 1~4 2 or 4
가변 길이 -
영어 호환성
인터넷 사용 일부
다국어 지원
 

9. 실무에서 인코딩을 다룰 때 주의할 점

  • 파일 저장 시: 파일 인코딩을 명시적으로 지정해야 함 (UTF-8 권장)
  • 네트워크 통신 시: Content-Type 헤더에 charset=UTF-8 지정 필요
  • 데이터베이스 설정: 문자셋/콜레이션 확인 (예: MySQL은 utf8mb4)
  • 문자 깨짐 방지: 서버/클라이언트/DB 모두 인코딩 일치 필수

결론

  • 유니코드는 문자에 부여된 "번호" 체계,
  • UTF-8/UTF-16은 그 번호를 컴퓨터가 저장/이해 가능한 "바이트"로 바꾸는 인코딩 방식이다.
  • UTF-8은 현재 웹과 시스템에서 가장 널리 사용되는 문자 인코딩이며,
    기존 ASCII 기반 시스템과도 호환성을 유지하는 훌륭한 표준이다.