본문으로 건너뛰기

© 2026 Molayo

Dev.to헤드라인2026. 06. 17. 21:03

유니코드(Unicode)가 이렇게 이상할 줄은 아무도 말해주지 않았다 — 그래서 폰트 생성기를 만들었다

요약

유니코드 시스템의 작동 원리와 수학적 기호 블록이 폰트 스타일처럼 사용되는 현상을 분석합니다. 유니코드 코드 포인트와 실제 폰트 렌더링 사이의 차이점을 설명하며, 기기별 렌더링 불일치 문제를 다룹니다.

핵심 포인트

  • 유니코드는 폰트가 아닌 별개의 문자 코드 포인트를 할당하는 시스템임
  • 인스타그램 등의 굵은 글씨는 수학적 알파벳 기호 블록을 활용한 것임
  • 유니코드 표준에 문자가 있어도 기기 폰트에 글리프가 없으면 깨져 보임
  • 룬 문자 등 역사적 문자가 현대 게임 사용자 이름 등에 활용되는 사례 설명

Discord 서버의 누군가가 사용자 이름을 마치 다른 알파벳처럼 보이는 무언가로 바꿨는데, 사실은 그렇지 않았습니다. 저는 그것을 무작위 사이트에 복사하고 제 이름을 붙여넣었더니 𝔠𝔥𝔯𝔦𝔰와 같은 모습으로 나타났습니다. 친구에게 그것을 보냈더니, 친구는 어떻게 그렇게 했느냐고 물었습니다. 저는 전혀 알지 못했습니다.

그것으로 끝났어야 했습니다. 텍스트를 붙여넣었고, 작동했고, 그냥 넘어가면 됐습니다. 하지만 질문이 남았습니다. Discord는 커스텀 폰트(custom fonts)를 지원하지 않습니다. 아무도 플러그인을 다운로드하지 않았습니다. 텍스트는 그저 모든 사람의 화면에서 다르게 보였습니다. 어떻게 된 일일까요?

그 답은 제 머리를 조금 혼란스럽게 만들었습니다. 이것들은 폰트(fonts)가 아닙니다. 𝔠는 알파벳 c가 아닙니다. c처럼 보일 뿐입니다. 그 단어 안에서 동일한 음성적 역할을 수행할 뿐입니다. 하지만 컴퓨터에게 이것은 완전히 별개의 문자입니다. 컴퓨터가 표현해야 하는 모든 기호의 데이터베이스에 있는 독자적인 항목입니다. 폰트 생성기는 다른 서체(typeface)를 불러오는 것이 아닙니다. 당신이 입력한 글자와 비슷하게 생긴 문자를 찾아 그것으로 교체하는 것입니다. 당신의 기기에 설정된 기본 폰트가 그 문자를 렌더링(render)합니다. 그게 전부입니다. 그 "폰트"는 언제나 당신의 시스템 자체였습니다.

저는 잠시 그 사실을 곱씹어야 했습니다.

유니코드(Unicode)는 모든 문자에 코드 포인트(code point) — 즉, 컴퓨터에 무엇을 표시할지 알려주는 숫자 — 를 할당하는 시스템입니다. 표준에는 149,000개 이상의 문자가 있습니다. Unicode Consortium이라는 하나의 조직이 이 전체를 관리합니다. 그들은 제안서를 검토하고, 추가 사항에 대해 투표하며, 대략 매년 새로운 버전을 발표합니다. 이모지(Emoji)도 동일한 과정을 거칩니다. 'tears-of-joy(기쁨의 눈물)' 이모지는 공식적인 코드 포인트, 제안 문서, 그리고 비준 날짜를 가지고 있습니다. 소(ox)를 뜻하는 설형 문자(cuneiform sign)도 마찬가지입니다.

실제로 "폰트 스타일 (font styles)"이 어디에서 왔는지가 기묘한 부분입니다. 사람들이 Instagram이나 LinkedIn에서 사용하는 굵은 텍스트 — 𝐁𝐨𝐥𝐝 𝐥𝐢𝐤𝐞 𝐭𝐡𝐢𝐬 — 이러한 문자들은 Mathematical Alphanumeric Symbols (수학적 알파벳 기호)라고 불리는 블록에 살고 있습니다. 이들은 수학 논문에서 디지털 문서 내의 변수 유형을 구분할 수 있도록 추가되었습니다. 연구자들은 렌더러 (renderer)가 서식을 적용하는 것에 의존하지 않고, 동일한 문서 내에서 벡터 𝒗를 스칼라 v와 다르게 표기할 방법이 필요했습니다. 그래서 그들은 자신들만의 코드 포인트 (code points)를 갖게 되었습니다. 인터넷은 이 코드 포인트들을 찾아냈고, 프로필 자기소개 (bios)에 쓰기에 멋져 보인다고 결정했습니다.

룬 (rune) 상황은 훨씬 더 가관입니다. Elder Futhark (에르더 푸사르크) 룬 문자가 유니코드에 포함되어 있습니다. 이 제안은 초기 게르만 비문에 대해 진지한 연구를 수행하던 역사 언어학자들로부터 나왔습니다. 컨소시엄 (Consortium)은 이를 승인했습니다. 그리고 이제 이 문자들은 PUBG 사용자 이름을 쓰는 데 사용됩니다. 제안 회의에 참석했던 그 누구도 이런 미래를 예상하지 못했습니다.

문자가 나타나지 않는 문제도 완전히 별개로 존재합니다. 유니코드에는 149,000개 이상의 항목이 있지만, 여러분의 기기에 있는 폰트에는 매핑된 항목이 그만큼 많지 않습니다. 표준에는 문자가 존재하지만 폰트에 해당 글리프 (glyph)가 없다면, 상자 모양이 나타나거나 아무것도 보이지 않게 됩니다. iOS에서 렌더링되는 것이 Android에서도 렌더링된다는 보장이 없으며, 특정 게임 클라이언트에서 작동한다는 보장도 없습니다. Discord는 WhatsApp보다 더 넓은 범위를 지원합니다. PUBG 클라이언트는 개발자가 번들 (bundled)한 것을 그대로 사용합니다. 어디에서 무엇이 작동하는지에 대한 공개된 목록은 존재하지 않습니다. 플레이어들은 직접 무언가를 붙여넣고 확인하며 알아내는데, 솔직히 이것이 알 수 있는 유일한 방법입니다.

제가 이 도구를 만들기 시작한 이유는 2008년에 만들어진 것처럼 보이는 도구들을 찾을 수 없었기 때문입니다. 정적 사이트(Static site)이며, 백엔드(Backend) 없이 모든 변환이 브라우저 내에서 실행됩니다. 총 168개의 스타일이 있습니다. 저는 문자 범위(Character ranges)를 매핑하는 데 오후 한나절 정도면 충분할 것이라고 생각했습니다. 하지만 그렇지 않았습니다. 어떤 범위에는 간극(Gaps)이 있습니다. 즉, 존재는 하지만 깔끔한 시각적 대응물이 없는 코드 포인트(Code points)들이 있어, 단어 중간에 문자가 빠져버려 깨져 보이게 됩니다. 다른 범위들은 단독으로는 잘 작동하지만, 서로 섞였을 때 이상하게 동작합니다. 저는 빌드 과정에서 다른 무엇보다도 예외 케이스(Edge cases)를 처리하는 데 더 많은 시간을 보냈습니다.

168개의 유니코드(Unicode) 스타일이 한곳에 모여 있는 모습이 궁금하다면, aifontsgenerator.com에서 확인하실 수 있습니다.

제가 계속해서 되돌아오게 되는 지점은 컨소시엄(Consortium) 그 자체입니다. 이들은 세계의 언어들 — 역사적 문자, 수학적 표기법, 과학적 기호 — 를 인코딩(Encoding)하기 위한 표준을 만든 사람들입니다. 매우 진지한 작업이며, 방대한 문서(Documentation)를 수반합니다. 그런데 그 과정 어딘가에서, 인터넷은 그들의 문자 데이터베이스를 미적 툴킷(Aesthetic toolkit)으로 변질시켜 버렸습니다. 크리피파스타(Creepypasta)에서 볼 수 있는 그 부패하고 글리치(Glitchy)한 공포스러운 형태인 잘고(Zalgo) 텍스트는, 글자 위아래로 발음 구별 부호(Diacritical marks)가 쌓이는 언어들을 위해 추가된 결합 문자(Combining characters)를 사용합니다. 정당한 언어학적 기능이, 단 하나의 'e' 위에 50개의 부호를 쌓아 마치 유령이 나타난 것처럼 보이게 만드는 데 사용되고 있는 것입니다.

이것은 실제 문장입니다. 저는 이것을 어떻게 다뤄야 할지 여전히 잘 모르겠습니다.

AI 자동 생성 콘텐츠

본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.

원문 바로가기
0

댓글

0