컴퓨터와 디지털 · 데이터와 기록

유니코드 — 다른 컴퓨터에서도 같은 글자를 읽는 약속

한글 한 글자가 화면에 도착하기까지

약 6분의 작은 발견

내 읽기 목록 ↗
서로 다른 기기를 사용하는 두 사람이 책이 꽂힌 공간에서 마주 앉아 대화하는 AI 장면.
KnowledgeWalk 제작 AI 삽화 · 실제 문자표·프로그램 화면·문자 전송 구조를 재현한 자료가 아닌 대화의 분위기 삽화.

휴대전화로 안녕하세요라고 보내면 상대방은 다른 기기에서도 같은 말을 읽는다. 너무 익숙해서 신기하게 느껴지지 않는다. 하지만 서로 다른 기계가 같은 글자를 알아보려면 어떤 약속이 필요할까. 컴퓨터가 우리가 쓴 문장을 사진으로 찍어 보내는 것은 아니다.

유니코드는 이런 문제를 다루는 공통 표준이다. 핵심은 세계의 여러 문자에 공통의 번호를 부여하는 데 있다. 복잡한 숫자표를 외울 필요는 없다. 글자의 번호와 화면에 그려지는 모양이 서로 다른 일이라는 사실만 알면, 평소의 작은 불편도 꽤 잘 설명된다.

01. 같은 번호를 다른 뜻으로 읽는다면

어떤 상자의 17번 칸에는 연필이, 다른 상자의 17번 칸에는 지우개가 있다고 생각해 보자. 상자 이름을 빼고 17번만 알려 주면 엉뚱한 물건을 꺼낼 수 있다. 이는 이해를 위한 비유지만 과거의 여러 문자 부호 체계가 왜 혼란을 일으킬 수 있었는지 보여 준다.

숫자와 글자를 연결하는 방식이 다르면 같은 데이터를 다른 문자로 읽을 수 있다. 문자 깨짐은 원래 문장에 이상한 외국어를 썼다는 뜻이 아니라, 저장하거나 전달한 숫자를 해석하는 약속이 어긋난 결과일 수 있다. 문제는 글의 뜻보다 그 앞 단계에 있는 셈이다.

02. 한글 가에 붙은 공통 번호

유니코드에서 한글 음절 가에는 U+AC00이라는 번호가 붙어 있다. 이 번호를 코드 포인트라고 한다. 낯선 기호처럼 보여도 이 글자를 가리키는 표준 번호라는 뜻이다. 번호 앞의 U+ 표기는 유니코드의 값을 적을 때 쓰는 관례다.

이 공통 번호 덕분에 프로그램은 어떤 글자를 다루고 있는지 같은 기준으로 이야기할 수 있다. 한국어와 영어, 다른 언어의 문자가 한 문서 안에 있어도 각 글자를 공통 체계에서 식별한다. 글자마다 같은 그림 파일을 주고받는 것과는 다른 방식이다.

03. 번호를 정하는 것과 저장하는 것은 다르다

번호가 정해졌어도 그것을 파일과 통신에서 어떤 바이트 배열로 표현할지는 따로 정해야 한다. 바이트는 컴퓨터가 데이터를 저장하는 작은 단위다. UTF-8이나 UTF-16은 이 표현 방식의 이름이다. 유니코드라는 표준과 이를 저장하는 방법을 구별하면 낯선 용어가 조금 정리된다.

UTF-8에서는 코드 포인트에 따라 필요한 바이트 수가 달라진다. 따라서 글자 수가 같다고 파일에서 차지하는 크기까지 같지는 않다. 화면에 두 글자가 나란히 놓이는 일과 저장 장치에 같은 양의 공간을 사용하는 일은 서로 다른 문제다.

04. 같은 글자인데 모양은 왜 다를까

친구의 휴대전화에서 본 글자가 내 화면에서는 조금 다르게 보일 수 있다. 번호가 같아도 글꼴이 다르면 획과 굵기, 균형이 달라진다. 유니코드는 글자를 식별하는 약속이지 모든 기기에 똑같은 서체를 설치하는 제도는 아니다.

ICU의 공식 문서는 문자와 글리프를 구별한다. 글리프는 실제로 그려지는 모양을 뜻한다. 우리가 읽는 추상적인 글자와 그 글자를 표현하는 시각적 형태가 반드시 일대일로만 대응하지는 않는다. 공통 번호와 디자인의 자유가 동시에 존재할 수 있는 이유다.

05. 가 한 글자에도 두 표현이 가능하다

조금 더 흥미로운 일도 있다. 가를 완성된 한 음절의 번호로 나타낼 수도 있고, 조합용 초성 ᄀ과 중성 ᅡ를 이어 나타낼 수도 있다. 화면에서는 비슷하게 읽히지만 내부의 코드 포인트 배열은 다르다. 이것이 한글이 잘못되었다는 뜻은 아니다.

이처럼 표준이 동등한 것으로 다루는 표현을 일정한 형식으로 맞추는 작업을 정규화라고 한다. 가의 경우 조합된 형태와 분해된 형태 사이를 정리할 수 있다. 이름은 어렵지만 서로 다른 방식으로 적힌 같은 글자를 비교하기 좋게 맞추는 과정으로 이해하면 된다.

06. 검색할 때도 이 차이가 문제가 될 수 있다

파일 이름을 복사했는데 검색이 기대대로 되지 않는 상황을 떠올려 보자. 원인이 언제나 정규화에 있는 것은 아니지만, 눈에 비슷하게 보이는 문자열의 내부 배열이 다르다는 사실은 프로그램이 고려해야 할 문제다. 사람의 눈으로 같은 글자라고 느끼는 것만으로 비교가 끝나지 않을 수 있다.

반대로 모양이 비슷한 모든 문자를 같은 것으로 바꾸어서는 안 된다. 다른 언어의 글자나 다른 의미의 기호도 닮게 보일 수 있기 때문이다. 정규화는 사람 마음대로 닮은 글자를 한데 묶는 일이 아니라 표준에서 정한 관계를 따라야 한다. 구분해야 할 차이와 맞추어도 되는 차이를 나누는 셈이다.

07. 글자가 네모 상자로 보인다면

문서의 일부가 빈 네모로 나타나는 경우도 있다. 글자의 정보가 전혀 없어서일 수도 있지만, 글꼴에 필요한 모양이 없어 표시하지 못하는 경우도 있다. 어떤 글자인지 아는 일과 그 글자를 화면에 그릴 수 있는 일은 별개다.

이 차이를 알면 글자가 이상하다는 한마디 뒤에도 여러 원인이 있음을 이해하게 된다. 번호를 읽는 방식, 문자의 배열, 글꼴의 준비가 각각 관여한다. 사용자가 매번 이를 고칠 전문가가 될 필요는 없다. 다만 공통 표준 하나가 화면의 모든 문제를 자동으로 없애 주는 것은 아니라는 정도면 충분하다.

08. 한 줄의 인사를 가능하게 하는 조용한 합의

함께 실은 그림은 다른 기기를 사용하는 사람들이 마주 앉은 AI 분위기 삽화다. 실제 문자표나 글자 처리 과정을 설명하는 도식은 아니다. 유니코드의 번호는 보이지 않아도, 서로 다른 환경에서 말을 나누는 일의 배경에 있다.

다음에 한글로 인사를 보낼 때 공통 번호를 떠올릴 필요는 없다. 오히려 의식하지 않고 사용할 수 있다는 것이 이런 약속의 성과다. 우리가 읽고 싶은 것은 문장이고, 표준이 하는 일은 그 문장이 다른 기계에서도 같은 글자로 만날 수 있도록 길을 맞추는 것이다.

이야기의 바탕이 된 자료
← 데이터와 기록의 다른 이야기