[SB] 24. UTF-8

최재원's avatar
Jun 10, 2025
[SB] 24. UTF-8
notion image
notion image
notion image
notion image

유니코드(Unicode)란?

유니코드(Unicode)는 전 세계의 모든 문자와 기호를 컴퓨터에서 일관되게 표현하고 다룰 수 있도록 설계된 국제 표준 문자 집합입니다. 즉, 다양한 언어와 문자 체계를 하나의 통일된 체계로 관리하여, 어떤 플랫폼이나 프로그램, 언어에서도 동일하게 문자를 저장·처리·전송할 수 있도록 만들어졌습니다.

유니코드의 등장 배경

과거에는 영어 기반의 ASCII(아스키) 코드처럼, 언어별로 서로 다른 문자 인코딩 방식이 사용되었습니다. 이로 인해,
  • 같은 숫자 값이 서로 다른 문자로 해석되거나,
  • 여러 언어를 한 번에 표현하거나 교환하는 데 오류가 발생하는 등
여러 문제가 있었습니다.
이런 문제를 해결하기 위해 모든 문자를 고유한 숫자(코드 포인트)로 매핑하는 유니코드가 등장하게 되었습니다.

유니코드의 구조와 특징

  • 코드 포인트(Code Point)
    • 유니코드는 각 문자에 고유한 숫자(코드 포인트)를 부여합니다. 예를 들어, 'A'는 U+0041, '가'는 U+AC00처럼 표기합니다.
  • 문자 집합의 통일
    • 한글, 한자, 라틴 문자, 아랍 문자, 이모지 등 전 세계 거의 모든 문자를 하나의 표로 관리합니다.
  • 다양한 인코딩 지원
    • 유니코드 자체는 문자와 숫자의 매핑(문자 집합)만 정의하며, 실제 저장 방식(인코딩)은 UTF-8, UTF-16, UTF-32 등 여러 방식이 있습니다.
  • 플랫폼/언어 독립적
    • 운영체제, 프로그래밍 언어, 데이터베이스 등 어디서나 동일한 문자 처리가 가능합니다.

UTF-8이란?

UTF-8은 "Unicode Transformation Format - 8 bit"의 약자로, 유니코드(Unicode) 문자를 1~4바이트의 가변 길이로 인코딩하는 문자 인코딩 방식입니다. 오늘날 웹, 운영체제, 데이터베이스 등에서 전 세계적으로 가장 널리 사용되는 문자 인코딩입니다.
MySQL은 UTF-8 = 3바이트까지 처리, UTF-8mb4 = 일반 UTF-8

주요 특징

  • 가변 길이 인코딩
    • 각 문자는 1~4바이트로 표현됩니다.
    • 영어, 숫자 등 ASCII 문자(0~127)는 1바이트
    • 유럽, 중동 문자 등은 2바이트
    • 한글, 한자 등 아시아권 문자는 3바이트
    • 이모지 등 일부 특수문자는 4바이트
  • ASCII와 완벽한 하위 호환성
    • 기존 ASCII로 작성된 파일은 UTF-8에서도 동일하게 해석됩니다.
  • 범용성
    • 유니코드의 모든 문자를 표현할 수 있어, 전 세계 어떤 언어도 하나의 인코딩으로 처리할 수 있습니다.
  • 효율성
    • 자주 쓰이는 영어 등은 1바이트로, 덜 쓰이는 문자는 더 많은 바이트로 표현해 저장 공간을 절약합니다.
  • 자가 동기화(Self-synchronization)
    • 바이트 손실이 발생해도 다음 정상 문자를 쉽게 찾을 수 있도록 설계되어 있습니다

인코딩 방식(동작 원리)

  • 1바이트(0xxxxxxx): ASCII 문자(예: A, 0, !)
  • 2바이트(110xxxxx 10xxxxxx): 라틴 확장, 기타 유럽 문자 등
  • 3바이트(1110xxxx 10xxxxxx 10xxxxxx): 한글, 한자 등
  • 4바이트(11110xxx 10xxxxxx 10xxxxxx 10xxxxxx): 이모지, 드물게 쓰이는 문자 등
각 바이트의 상위 비트 패턴으로 문자 경계를 쉽게 구분할 수 있습니다.
 

스프링에 적용

notion image
Share article

jjack1