정의
유니코드에 등록된 전 세계 모든 문자를 컴퓨터가 다루는 0과 1의 이진수로 변환하는 표준 문자 인코딩 방식이에요. 글자의 종류에 따라 저장 공간의 크기를 1바이트부터 4바이트까지 유연하게 바꾸는 가변 길이 구조를 사용해요.
웹페이지 글자가 외계어로 깨지던 이유
인터넷 초창기에는 외국 웹사이트를 열거나 다른 나라의 문서 파일을 내려받으면 글자가 외계어처럼 심하게 깨지는 일이 흔했어요. 컴퓨터는 원래 인간의 글자를 알지 못하고 오직 0과 1로 이루어진 숫자 신호만 다룰 수 있기 때문이에요. 그래서 글자마다 특정 숫자를 일대일로 짝지어 놓은 약속 표를 만들어 썼는데, 이를 문자 인코딩이라고 불러요.
문제는 나라와 운영체제마다 자기들만의 약속 표를 제각각 따로 만들었다는 점이에요. 미국에서 만든 초기 표에는 영문 알파벳만 들어 있었고, 한국에서는 한글만을 위해 독자적인 번호표를 만들어 썼어요. 미국 프로그램에 한글 번호표를 넣으면 컴퓨터는 글자를 전혀 엉뚱한 문자로 해석해 화면에 깨진 글씨를 띄울 수밖에 없었죠.
이런 혼란을 끝내기 위해 전 세계 모든 문자에 인류 공통의 고유 번호를 붙인 거대한 디지털 사전인 '유니코드'가 등장했어요. 그리고 이 거대한 사전에 적힌 글자들을 컴퓨터 파일 안에 가장 효율적으로 저장하고 전송하기 위해 널리 쓰이는 표준 약속이 바로 UTF-8 방식이에요.
글자 크기에 맞춰 봉투 크기를 바꿔요
UTF-8의 가장 큰 장점은 글자의 종류에 따라 차지하는 데이터 용량이 달라지는 유연한 구조에 있어요. 전 세계 모든 글자를 가장 큰 글자 기준에 맞춰 똑같은 크기의 큰 상자에 담으면 저장 공간이 심하게 낭비되기 때문이에요.
상자 크기는 글자가 유니코드에서 받은 번호에 따라 정해져요. 번호가 가장 앞쪽(0~127번)에 있는 알파벳과 숫자, 기본 문장부호는 가장 작은 크기인 1바이트(8비트) 상자에 쏙 담겨요. 반면 더 뒤쪽 번호를 받은 한글이나 대부분의 한자는 3바이트 크기의 상자에 담기고, 최근 스마트폰에서 널리 쓰는 다채로운 그림 문자나 이모티콘은 대부분 4바이트 크기로 저장돼요.
이렇게 글자의 특성에 맞춰 1바이트부터 4바이트까지 가변적으로 길이를 조절해요. 덕분에 영문 문서는 과거 옛날 방식처럼 아주 가볍게 유지할 수 있어요. 동시에 전 세계 어떤 언어나 이모티콘도 한 페이지 안에 어색함 없이 자연스럽게 섞어 쓸 수 있게 됐어요.
조금 더 정확히 말하면: 옛 문서와의 호환 범위
조금 더 정확히 말하면, UTF-8이 옛날에 쓰던 방식을 별도 변환 없이 그대로 읽어 들일 수 있는 범위는 기존 아스키(ASCII) 규격 하나뿐이에요. 아스키는 1960년대 미국에서 만들어진 가장 기초적인 영문 알파벳, 숫자, 특수기호 번호표예요.
UTF-8은 처음 1바이트 영역의 숫자 배열을 이 옛 아스키코드와 완전히 똑같은 구조로 맞추어 설계했어요. 덕분에 수십 년 전에 영어로만 작성된 방대한 옛 텍스트 문서나 시스템 프로그램 코드는 아무런 수정 없이도 UTF-8 환경에서 완벽하게 열려요.
하지만 과거 한국에서 널리 쓰이던 완성형이나 EUC-KR 방식으로 작성된 한글 문서는 사정이 완전히 달라요. 이들도 영문·숫자는 아스키와 같지만, 한글과 한자는 UTF-8과 전혀 다른 두 바이트 번호로 적기 때문에 UTF-8 설정으로 열면 한글 부분이 깨져버려요. UTF-8의 하위 호환성은 오직 영문 아스키에만 적용되므로, 옛 한글 문서를 열 때는 지금도 올바른 문자셋을 지정하거나 변환해 주어야 해요.
흔한 오해
UTF-8은 과거 한국에서 작성된 옛날 한글 문서도 변환 없이 그대로 다 읽을 수 있다.
UTF-8이 그대로 읽을 수 있는 옛 규격은 영문 중심의 아스키(ASCII) 하나뿐이에요. 과거 한국에서 쓰던 완성형이나 EUC-KR로 적힌 문서는 UTF-8로 열면 글자가 깨지므로 별도의 변환이 필요해요.
유니코드(Unicode)와 UTF-8은 이름만 다를 뿐 완전히 똑같은 개념이다.
유니코드는 세상 모든 글자에 고유한 일련번호를 매겨둔 '문자 사전'이고, UTF-8은 그 번호를 컴퓨터 메모리에 0과 1의 데이터로 어떻게 효율적으로 배치해 저장할지 정한 '규칙(인코딩)'이에요.
일상에서 만나요
웹페이지 HTML 문서 맨 위에 <meta charset="UTF-8"> 태그를 적어 전 세계 방문자의 브라우저에서 글자가 깨지지 않도록 설정해요.
모바일 메신저 대화방에서 한국어 문장 사이에 영어 단어와 얼굴 표정 이모티콘을 함께 입력해도 오류 없이 전송돼요.
그러니까 한마디로
전 세계 문자를 유니코드 번호에 맞춰 1바이트에서 4바이트 크기로 유연하게 변환해 글자 깨짐 없이 표현하는 표준 문자 저장 방식이에요.