정의
컴퓨터가 글자를 이해하고 화면에 보여줄 수 있도록 문자마다 고유한 숫자 값을 짝지어 주는 규칙이에요. 컴퓨터는 0과 1로 된 전기 신호만 다룰 수 있기 때문에 글자의 모양을 직접 기억하지 못해요. 사람이 쓰는 모든 문자 데이터를 정해진 이진수 코드로 변환하는 규격과 과정 전체를 뜻해요.
왜 글자에 번호표를 붙여야 할까요?
외국인 친구와 비밀 암호로 쪽지를 주고받을 때, 숫자 1은 사과, 숫자 2는 바나나로 정해둔 암호 수첩을 떠올려 보세요. 컴퓨터와 사람이 대화를 나눌 때도 이와 똑같은 비밀 번역 수첩이 필요해요.
컴퓨터 내부에는 스위치가 켜지고 꺼지는 전기 신호만 흘러요. 컴퓨터는 사람이 쓰는 'A'나 '가' 같은 글자의 모양이나 뜻을 스스로 이해하지 못하죠. 전기가 통하는지(1) 통하지 않는지(0)를 나타내는 두 가지 숫자만 기억하고 계산할 수 있어요.
그래서 사람이 컴퓨터에 글자를 입력하려면 문자를 숫자로 바꾸는 번역 과정이 반드시 필요해요. 예를 들어 알파벳 'A'는 65번, 'B'는 66번처럼 미리 약속된 번호표를 정해두는 식이에요. 키보드로 'A'를 누르면 컴퓨터는 65라는 숫자를 기억장치에 저장해요.
이처럼 문자와 숫자를 일대일로 짝지어 기록하는 규칙을 문자 인코딩이라고 불러요. 글자를 파일에 저장할 때는 숫자로 바꾸고, 화면에 띄울 때는 그 숫자를 다시 글자 모양으로 바꾸어 그려내요.
외계어처럼 글자가 깨지는 이유
인터넷 서핑을 하거나 오래된 텍스트 문서를 열었을 때 알 수 없는 한자나 특수문자로 글자가 와르르 깨진 경험이 있을 거예요. 컴퓨터가 고장 난 것이 아니라, 글자를 기록한 쪽과 화면에 띄우는 쪽의 암호 장부가 서로 달라서 생긴 문제예요.
예를 들어 문서를 작성한 사람은 옛 한국식 번호표(EUC-KR)를 기준으로 글자를 저장했는데, 문서를 연 프로그램이 국제 표준 번호표(UTF-8) 장부를 기준으로 읽어버리면 전혀 엉뚱한 글자가 튀어나와요. 한글을 표현하는 번호 조합과 해석 규칙이 각 장부마다 완전히 다르니 해석이 엉망진창이 되는 것이죠.
이처럼 글자를 저장할 때 사용한 인코딩 규칙과 화면에 불러올 때 해석한 규칙이 어긋나는 현상이 바로 글자 깨짐의 진짜 원인이에요. 서로 같은 번호 장부를 기준으로 맞춰야만 글자가 본래 모양대로 깨끗하게 나타나요.
조금 더 정확히 말하면: 유니코드와 UTF-8
초창기 컴퓨터 세상에서는 영문 알파벳과 숫자, 기본 기호에 줄바꿈 같은 제어 신호까지 128개를 담은 '아스키(ASCII)'라는 규칙 하나만으로 충분했어요. 하지만 컴퓨터가 전 세계로 보급되면서 한글, 한자, 아랍어 등 각국의 수많은 문자를 표현하기 위해 나라마다 제각각의 독자적인 번호표를 만들기 시작했어요.
규칙이 수백 가지로 갈라져 혼란이 커지자 전 세계의 모든 글자에 단 하나의 고유 번호를 붙이자는 거대한 약속이 나왔는데, 이것이 바로 '유니코드'예요. 그리고 이 유니코드 번호를 컴퓨터가 효율적으로 읽고 저장할 수 있게 만든 현대의 대표적인 표준 방식이 'UTF-8'이에요.
조금 더 정확히 말하면, UTF-8이 옛 문서를 그대로 읽어낼 수 있는 범위는 영문과 기호가 담긴 아스키 규격뿐이에요. 과거 한글 문서에 널리 쓰이던 완성형이나 EUC-KR로 작성된 글은 UTF-8로 열면 어김없이 글자가 깨져요. 새로운 만능 규격이라도 옛 한글 번호표까지 자동으로 맞춰주지는 못하기 때문이에요.
흔한 오해
유니코드나 UTF-8 규격은 옛날에 작성된 모든 한국어 문서도 오류 없이 그대로 읽어낸다.
UTF-8이 과거 문서를 그대로 읽을 수 있는 대상은 영문과 기호 중심인 아스키(ASCII)뿐이에요. 과거 완성형이나 EUC-KR로 저장된 한글 문서는 UTF-8로 열면 글자가 깨져요.
문자 인코딩은 글자의 모양을 예쁘게 꾸며주는 폰트(글씨체)와 같은 개념이다.
인코딩은 문자를 특정 숫자로 바꾸어 기록하는 규칙이고, 폰트는 그 숫자에 해당하는 문자를 화면에 그려내는 시각적 디자인이에요.
일상에서 만나요
메모장에서 오래된 한글 문서를 열었을 때 외계어처럼 깨져서 인코딩 설정을 EUC-KR로 바꾸어 해결하는 경우
웹페이지 코드 맨 위에 UTF-8 인코딩 선언을 넣어 전 세계 사용자의 브라우저에서 한글과 영문이 깨지지 않게 만드는 작업
그러니까 한마디로
컴퓨터가 글자를 다룰 수 있게 문자마다 고유 번호를 매기는 규칙이며, 저장할 때와 읽을 때 같은 규칙을 써야 글자가 깨지지 않아요.