문자 인코딩의 이해: UTF-8 vs ASCII 완벽 정리

왜 한글이 깨져서 나올까요? 개발자가 반드시 알아야 할 아스키(ASCII) 코드와 유니코드(UTF-8)의 차이점, 그리고 뷇뛟 같은 글자가 생기는 이유를 설명합니다.

안녕하세요! 치트셋(Cheetset)입니다.

개발을 하다 보면 종종 같은 알 수 없는 문자가 나오거나, 한글이 뷇뛟처럼 깨져서 나오는 현상을 겪게 됩니다. 이를 모지바케(Mojibake)라고 부르는데요.

이 모든 문제는 컴퓨터가 문자를 숫자로 저장하는 방식, 즉 인코딩(Encoding)이 서로 다르기 때문에 발생합니다. 오늘은 개발자라면 반드시 알아야 할 문자 인코딩의 세계를 깊이 파헤쳐 보겠습니다.

1. ASCII: 컴퓨터 언어의 시초

컴퓨터 초창기에는 영미권에서만 컴퓨터를 썼기 때문에, 알파벳 대소문자, 숫자, 특수문자 등 총 128개의 문자만 있으면 충분했습니다. 이것이 바로 ASCII(아스키) 코드입니다.

'A' = 65 (0x41)
'a' = 97 (0x61)
'0' = 48 (0x30)

  • 특징: 7비트(bit)만 사용합니다. (1바이트가 채 안 됨)
  • 한계: 한글, 일본어, 한자 등은 표현할 수 없습니다.

2. Unicode: 전 세계 모든 문자를 하나로

인터넷이 전 세계로 퍼지면서, 각 나라마다 독자적인 인코딩 방식(한국의 EUC-KR, 일본의 Shift_JIS 등)을 쓰다 보니 호환성 문제가 심각했습니다. 그래서 나온 것이 유니코드(Unicode)입니다.

유니코드는 "전 세계 모든 문자에 고유한 번호를 부여하자"는 약속입니다. '가'는 U+AC00, 'A'는 U+0041 이런 식이죠. 하지만 유니코드는 '약속'일 뿐, 실제로 저장하는 방식은 여러 가지가 있습니다.

3. UTF-8: 유니코드를 저장하는 가장 똑똑한 방법

유니코드 번호를 컴퓨터 파일로 저장하는 방식 중 가장 널리 쓰이는 것이 UTF-8입니다.

  • 가변 길이: 영어는 1바이트(ASCII와 동일), 한글은 3바이트로 저장합니다. 용량을 효율적으로 아낄 수 있죠.
  • 호환성: ASCII 코드로 작성된 문서는 UTF-8로 읽어도 완벽하게 호환됩니다.
  • 표준: 현재 웹(Web) 세상의 98% 이상이 UTF-8을 사용합니다.

4. 한글이 깨지는 이유 (EUC-KR vs UTF-8)

오래된 한국 웹사이트는 EUC-KR(또는 CP949) 방식을 씁니다. 하지만 최신 웹 표준은 UTF-8입니다.

브라우저는 UTF-8로 해석하려고 하는데, 서버가 EUC-KR로 보내면 한글이 깨지게 됩니다. 반대로 EUC-KR로 저장된 파일을 UTF-8 편집기에서 열어도 깨집니다.

대표적인 깨짐 현상

  • 뷇뛟...: UTF-8 문서를 EUC-KR로 읽었을 때
  • ...: EUC-KR 문서를 UTF-8로 읽었을 때

💡 해결 방법

1. HTML 파일의 <head> 태그 안에 아래 코드를 꼭 넣어주세요.

<meta charset="UTF-8">

2. VS Code 같은 에디터에서 파일을 저장할 때, 인코딩 형식이 'UTF-8'인지 확인하세요. (우측 하단 상태 표시줄에서 확인 가능)

5. BOM(Byte Order Mark)이란?

가끔 "UTF-8 with BOM"이라는 옵션을 볼 수 있습니다. BOM은 파일의 맨 앞에 "이 파일은 유니코드입니다"라고 알려주는 보이지 않는 표식(EF BB BF)을 넣는 것입니다.

  • Windows: 메모장 등에서는 BOM이 있어야 UTF-8임을 잘 인식합니다.
  • Web/Linux: BOM이 있으면 PHP나 일부 스크립트에서 오류가 날 수 있습니다.
  • 결론: 웹 개발 시에는 "UTF-8 without BOM"을 사용하는 것이 국룰입니다.

마치며

이제 인코딩 때문에 당황하지 마세요! 전 세계 표준인 UTF-8만 기억하면 대부분의 문제는 해결됩니다. 데이터베이스, HTML, 소스 코드 파일 모두 UTF-8로 통일하는 것이 정신 건강에 좋습니다.

더 궁금한 점이 있다면 언제든 치트셋 블로그를 찾아주세요!

Share this post

문자 인코딩의 이해: UTF-8 vs ASCII 완벽 정리