unicode utf8 gbk encodings shift-jis web-dev

문자 인코딩 및 유니코드 초보자 가이드

더 이상 깨진 글자를 보지 마세요. UTF-8, UTF-16, GBK, Shift-JIS를 이해하고 바이트 순서 표시(BOM)가 파일에 미치는 영향을 알아보세요.

2026-04-11

문자 인코딩과 Unicode: UTF-8, UTF-16 및 레거시 인코딩 가이드

컴퓨팅 초기에는 텍스트를 표현하는 것이 간단했습니다. 모든 문자가 7비트 또는 8비트(ASCII) 안에 들어갔기 때문입니다. 하지만 컴퓨터가 전 세계적으로 보급되면서 전 세계 모든 언어의 모든 문자를 표현할 방법이 필요해졌습니다. 이것이 바로 유니코드(Unicode)와 이를 지원하는 인코딩들의 이야기입니다.

1. 유니코드(Unicode) 표준

유니코드는 그 자체로 인코딩이 아니라 유니버설 문자 집합입니다. 모든 문자에 코드 포인트라고 불리는 고유한 번호를 할당합니다(예: 'A'는 U+0041). 하지만 이 번호들을 바이너리로 저장하는 방식은 별도로 필요합니다.

UTF-8 (웹의 표준)

UTF-8은 한 문자당 1바이트에서 4바이트를 사용하는 가변 길이 인코딩입니다. ASCII와 하위 호환성을 가집니다.

  • 장점: 서구권 언어에 효율적이며, 데이터 손상에 강하고, 웹의 표준으로 자리 잡았습니다.

UTF-16

2바이트 또는 4바이트를 사용합니다. Windows(NTFS) 시스템과 Java, JavaScript 등 많은 프로그래밍 환경의 내부 인코딩으로 사용됩니다.

UTF-32

모든 문자에 대해 고정적으로 4바이트를 사용합니다. 인덱싱은 간단하지만 메모리 효율이 매우 낮습니다.


2. 레거시 및 지역별 인코딩

유니코드가 대중화되기 전에는 지역마다 고유한 표준을 사용했으며, 그 중 많은 것들이 오늘날에도 여전히 발견됩니다.

한국어 인코딩

  • EUC-KR: 한국어 전용 레거시 인코딩의 표준입니다.

중국어 인코딩 (GB 패밀리)

  • GB2312: 초기 간체 중국어 표준입니다.
  • GBK: GB2312를 확장하여 더 많은 문자를 지원합니다.
  • GB18030: 현재 중국의 국가 표준으로, 간체와 번체를 모두 지원하며 유니코드와 완전히 매핑됩니다.

일본어 및 번체 중국어

  • Shift-JIS: 역사적으로 일본에서 가장 널리 사용된 인코딩입니다.
  • Big5: 대만, 홍콩 등에서 사용되는 번체 중국어 표준입니다.

3. 서구권 레거시 인코딩

ISO-8859-1 (Latin-1)

대부분의 서유럽 언어를 커버하는 8비트 인코딩입니다.

Windows-1252

ISO-8859-1의 변형으로, 과거 Windows 시스템의 기본 인코딩이었습니다.


4. 기술적 상세: BOM과 엔디언(Endianness)

Byte Order Mark (BOM)

BOM은 텍스트 파일 시작 부분의 특수한 바이트 시퀀스입니다(예: UTF-8은 EF BB BF). 소프트웨어에 어떤 인코딩과 바이트 순서가 사용되는지 알려줍니다. UTF-16에서는 유용하지만, 웹 환경의 UTF-8에서는 사용하지 않는 것이 권장됩니다.

Little Endian vs. Big Endian

UTF-16 및 UTF-32와 관련이 있으며, 메모리에 바이트가 저장되는 순서를 의미합니다.


비교 요약

인코딩 문자당 바이트 호환성 최적의 용도
UTF-8 1-4 ASCII 웹, 리눅스, 맥
UTF-16 2 또는 4 없음 윈도우, 자바, JS
GB18030 1, 2, 또는 4 GBK 중국 정부 표준 준수
ASCII 1 범용 레거시 시스템, 영어 전용

결론

전 세계는 데이터 교환의 표준으로 UTF-8을 선택했습니다. 하지만 레거시 시스템이나 특정 지역용 소프트웨어를 다룰 때는 EUC-KR이나 Shift-JIS 같은 지식이 여전히 필요합니다. 현대적인 애플리케이션 개발에서는 특별한 이유가 없는 한 BOM이 없는 UTF-8을 사용하세요.