본문 바로가기
텍스트·문서·약 14분 소요

인스타 폰트 16종의 정체: 유니코드 코드표와 X 글자수 2배·검색 누락·SMS 깨짐 정리

인스타그램 프로필용 '인스타 폰트'는 글꼴이 아니라 수학 영숫자 기호다. 16종 스타일의 유니코드 위치와 빈자리 24글자, X에서 2자로 세는 규칙, NFKC로 복원되지 않는 스타일과 SMS·스크린리더·DB 문제를 계산값으로 정리했다.

인스타 폰트 16종의 정체: 유니코드 코드표와 X 글자수 2배·검색 누락·SMS 깨짐 정리

광고

작성 툴박스 운영자최초 작성 최종 검토

툴박스 가이드는 W3C·MDN·국제 표준 문서(RFC/ISO)와 한국인터넷진흥원(KISA) 등 공신력 있는 기관의 공개 자료를 기반으로 작성·검토합니다.편집 방침 보기

'𝐒𝐞𝐨𝐮𝐥' 다섯 글자를 자바스크립트 length로 세면 10, UTF-8로 저장하면 20바이트, X(트위터)에 올리면 10자로 계산된다. 눈에는 굵은 영어 다섯 글자인데 숫자가 전부 두 배다. 인스타그램 프로필을 꾸미는 이른바 '인스타 폰트'가 실제로는 글꼴이 아니라 전혀 다른 문자이기 때문이다. 이 글은 유니코드 글꼴 변환기가 제공하는 16종 스타일을 기준으로, 각 스타일이 유니코드의 어디에서 오는지, 그리고 글자수·검색·문자메시지·스크린리더에서 어떤 대가를 치르는지를 실제 계산값으로 정리한다. 표의 수치는 전부 파이썬 unicodedata·cp949 코덱으로 한 글자씩 확인한 값이다.

인스타 폰트는 글꼴이 아니라 '수학 기호'다

일반 글꼴은 같은 문자 A(U+0041)를 다른 모양으로 그릴 뿐 문자 자체는 그대로다. 반면 굵게 변환한 𝐀는 U+1D400 MATHEMATICAL BOLD CAPITAL A라는 별개의 문자다. 이 문자들은 2001년 유니코드 3.1에 추가된 수학 영숫자 기호(Mathematical Alphanumeric Symbols, U+1D400~U+1D7FF) 블록에 들어 있다. 수학에서는 굵은 v가 벡터를, 이중선 ℝ이 실수 집합을 뜻하는 것처럼 글자 모양 자체가 의미를 가지기 때문에 모양별로 별도의 코드를 준 것이다.

그래서 서식 기능이 없는 인스타그램 소개란이나 카카오톡 상태메시지에도 '굵은 글씨'가 그대로 붙는다. 서식을 입힌 게 아니라 문자를 바꿔 넣었기 때문이다. 다만 유니코드 표준은 이 블록을 수식 표기용으로 정의하고, 일반 문장에서 굵게·기울임 서식 대신 쓰는 것은 권하지 않는다. 아래에서 다룰 부작용은 모두 이 "모양만 같은 다른 문자"라는 성질에서 나온다.

핵심 사실 세 가지만 먼저 기억하자.

  • 수학 영숫자 13종은 전부 BMP(U+0000~U+FFFF) 바깥이라 한 글자가 UTF-8 4바이트, UTF-16 2칸(서로게이트 쌍)을 차지한다.
  • 숫자 변형은 굵게·이중선·산세리프·굵은 산세리프·고정폭 5벌(U+1D7CE~U+1D7FF, 50자)뿐이다. 기울임·필기체·고딕체로 바꾸면 숫자는 원래 숫자로 남는다.
  • 한글은 이런 변형 블록이 아예 없다. 그래서 한글이 섞인 문장을 넣으면 영문·숫자만 바뀐다.

16종 스타일별 유니코드 위치표

스타일예시출처 블록'A' 코드포인트숫자 변환
굵게𝐒𝐞𝐨𝐮𝐥 𝟐𝟎𝟐𝟔수학 영숫자U+1D400○
기울임𝑆𝑒𝑜𝑢𝑙수학 영숫자 (+문자형 기호 1자)U+1D434✕
굵은 기울임𝑺𝒆𝒐𝒖𝒍수학 영숫자U+1D468✕
필기체𝒮ℯℴ𝓊𝓁수학 영숫자 + 문자형 기호U+1D49C✕
굵은 필기체𝓢𝓮𝓸𝓾𝓵수학 영숫자U+1D4D0✕
고딕체(프락투어)𝔖𝔢𝔬𝔲𝔩수학 영숫자 + 문자형 기호U+1D504✕
굵은 고딕체𝕾𝖊𝖔𝖚𝖑수학 영숫자U+1D56C✕
이중선𝕊𝕖𝕠𝕦𝕝 𝟚𝟘𝟚𝟞수학 영숫자 + 문자형 기호U+1D538○
산세리프𝖲𝖾𝗈𝗎𝗅 𝟤𝟢𝟤𝟨수학 영숫자U+1D5A0○
굵은 산세리프𝗦𝗲𝗼𝘂𝗹 𝟮𝟬𝟮𝟲수학 영숫자U+1D5D4○
기울인 산세리프𝘚𝘦𝘰𝘶𝘭수학 영숫자U+1D608△ (기울인 숫자가 없어 산세리프 숫자로 대체)
고정폭𝚂𝚎𝚘𝚞𝚕 𝟸𝟶𝟸𝟼수학 영숫자U+1D670○
전각Seoul 2026반각·전각 형태 (U+FF00~)U+FF21○
원문자Ⓢⓔⓞⓤⓛ ②⓪②⑥괄호·원 영숫자 (U+2460~)U+24B6○
작은 대문자Sᴇᴏᴜʟ음성 확장·IPA 확장·라틴 확장-D 혼합대문자는 그대로✕
위첨자Sᵉᵒᵘˡ ²⁰²⁶음성 확장·위첨자·수식 문자 혼합U+1D2C○

마지막 두 줄이 특이하다. 작은 대문자와 위첨자는 애초에 "스타일 세트"로 만들어진 문자가 아니라, 발음기호(IPA) 등 다른 용도의 문자를 모양이 비슷하다는 이유로 끌어모은 것이다. 그래서 빈칸이 많다. 위첨자는 대문자 C·F·Q·S·X·Y에 해당하는 문자가 없어 원래 글자로 남고, 소문자 q 자리에는 라틴 문자가 아니라 **캐나다 원주민 음절문자 ᑫ(U+146B)**를 빌려 쓴다. 작은 대문자도 x는 대응 문자가 없어 그대로다.

빈자리 24글자 — 필기체·이중선에 다른 블록이 섞인 이유

수학 영숫자 블록은 겉보기와 달리 연속이 아니다. 일부 글자는 이미 1990년대 초부터 문자형 기호(Letterlike Symbols, U+2100~U+214F) 블록에 들어 있었기 때문에, 중복을 피하려고 수학 블록의 해당 자리를 비워 두었다. 실수 집합 ℝ, 자연수 집합 ℕ, 플랑크 상수 ℎ 같은 기호가 그 예다.

스타일문자형 기호 블록에서 오는 글자개수
기울임h → ℎ (U+210E, 플랑크 상수)1
필기체B E F H I L M R → ℬ ℰ ℱ ℋ ℐ ℒ ℳ ℛ / e g o → ℯ ℊ ℴ11
고딕체C H I R Z → ℭ ℌ ℑ ℜ ℨ5
이중선C H N P Q R Z → ℂ ℍ ℕ ℙ ℚ ℝ ℤ7
합계24

이 사실이 실무에서 두 가지 차이를 만든다.

  1. 허술한 변환기는 네모(□)를 만든다. "시작 코드 + 알파벳 순서"로 계산하는 변환기는 이중선 C를 U+1D53A에 넣는데, 이 자리는 미할당이다. 그래서 어떤 글꼴로도 그려지지 않는다. 필기체 B(U+1D49D), 기울임 h(U+1D455)도 마찬가지다. 변환 결과에서 필기체 B·E나 이중선 C만 네모로 보인다면 상대 기기 글꼴 문제가 아니라 변환기 결함이다.
  2. 같은 스타일 안에서도 글자마다 길이가 다르다. 빈자리 24글자는 BMP 안쪽이라 UTF-8 3바이트, UTF-16 1칸이다. 그래서 필기체 '𝒮ℯℴ𝓊𝓁'은 UTF-16으로 8칸(2+1+1+2+2)이지만 굵게 '𝐒𝐞𝐨𝐮𝐥'은 10칸이다.

같은 15글자, 플랫폼마다 다른 길이 — 계산표

원문 "Seoul Cafe 2026"(공백 포함 15글자)을 스타일별로 바꿨을 때의 길이다.

스타일변환 결과코드포인트UTF-16 (JS length)UTF-8 바이트X 가중 글자수
원문Seoul Cafe 202615151515
굵게𝐒𝐞𝐨𝐮𝐥 𝐂𝐚𝐟𝐞 𝟐𝟎𝟐𝟔15285428
필기체𝒮ℯℴ𝓊𝓁 𝒞𝒶𝒻ℯ 202615213924
전각Seoul Cafe 202615154128
원문자Ⓢⓔⓞⓤⓛ Ⓒⓐⓕⓔ ②⓪②⑥15154128
작은 대문자Sᴇᴏᴜʟ Cᴀꜰᴇ 202615152821

굵게를 끝까지 풀어 보면 이렇다. 변환된 글자 13개(영문 9 + 숫자 4) × 4바이트 = 52바이트에 공백 2개를 더해 54바이트. UTF-16은 13 × 2칸 + 공백 2 = 28칸이다.

X(트위터) 계산 규칙. X가 공개한 글자수 라이브러리 twitter-text의 v3 설정은 U+0000~U+10FF, U+2000~U+200D, U+2010~U+201F, U+2032~U+2037 구간만 1자로 세고, 나머지는 전부 2자로 센다. 한도는 가중치 합 280이다. 한글(U+AC00~)도 2자라서 한글 게시물이 140자에서 끊기는 것이고, 수학 영숫자·전각·원문자도 같은 이유로 2자다. 즉 변환 글꼴만으로 쓰면 영어 게시물도 140자로 줄어든다. 작은 대문자가 21로 어중간한 이유는 ʟ(U+029F)·ʙ·ɢ 같은 IPA 문자는 1자, ᴇ(U+1D07)·ᴀ 같은 음성 확장 문자는 2자로 갈리기 때문이다.

웹 입력란의 글자수 제한. HTML 입력란의 maxlength는 UTF-16 칸 단위로 센다. 그래서 "20자 이내" 닉네임 입력란에 굵은 영문을 넣으면 10글자에서 막힌다. 플랫폼별 일반 글자수 한도는 SNS·자기소개서 글자수 기준 정리를 참고하자.

검색과 해시태그 — 원래 글자로 돌아오는 것과 안 돌아오는 것

유니코드는 수학 문자마다 "원래 무슨 글자였는지"를 적은 호환 분해 정보를 달아 두었다. NFKC 정규화를 거치면 이 정보를 따라 '𝐜𝐚𝐟𝐞'가 'cafe'로 돌아온다. 그런데 모든 스타일이 돌아오지는 않는다.

스타일분해 표시NFKC 정규화 결과
수학 영숫자 13종<font>원래 글자로 복원
전각<wide>복원
원문자<circle>복원 (①은 1로)
위첨자<super>대부분 복원, q 자리의 ᑫ는 복원 안 됨
작은 대문자없음복원 안 됨 — 'Sᴇᴏᴜʟ'은 정규화 후에도 'Sᴇᴏᴜʟ'

검색 색인이 NFKC 정규화를 거치는지는 플랫폼마다 다르고 대부분 공개하지 않는다. 거치지 않는 곳에서는 '𝐜𝐚𝐟𝐞'가 'cafe' 검색에 걸리지 않고, 거치는 곳에서도 작은 대문자와 위첨자 q는 끝까지 다른 글자다. 결론은 단순하다. 상호·브랜드명·지역명처럼 검색되어야 하는 단어는 원래 글자로 두고, 장식은 그 앞뒤에만 쓴다. 해시태그도 같다. #𝐜𝐚𝐟𝐞와 #cafe는 문자열이 다르다. 축제·여행 인증샷 캡션도 마찬가지라, 전국 축제 일정에서 찾은 축제 이름은 원래 글자로 적어야 그 축제를 검색한 사람에게 보인다. NFC·NFD와 NFKC가 어떻게 다른지는 한글 자모 분리(ㅎㅏㄴㄱㅡㄹ) 원인 정리에서 다뤘다.

문자메시지와 스크린리더에서 생기는 일

문자메시지(SMS). 국내 단문 문자는 90바이트 EUC-KR(CP949) 체계다. 변환 글꼴이 이 문자표에 들어 있는지 cp949 코덱으로 전수 확인하면 다음과 같다(영문 52자 + 숫자 10자 = 62자 기준).

스타일CP949로 표현 가능한 변환 글자
수학 영숫자 13종0자 (숫자를 바꾸지 않는 스타일은 원래 숫자만 남음)
전각62/62 — 전부 가능
원문자35/62 — 소문자 ⓐ~ⓩ 26자와 ①~⑨ 9자만, 대문자 Ⓐ~Ⓩ와 ⓪은 불가
위첨자5자 — ¹ ² ³ ⁴ ⁿ만
작은 대문자0자

CP949로 표현할 수 없는 글자가 한 자라도 섞이면 단말이나 통신사에 따라 메시지가 다른 인코딩이나 장문(LMS)으로 바뀌어 전송된다. 단문 요금을 기대했다면 손해고, 받는 쪽 구형 단말에서는 물음표로 보이기도 한다. 문자에 꼭 장식을 넣고 싶다면 전각이 유일한 선택지다.

스크린리더. 화면낭독기는 '𝐒𝐞𝐨𝐮𝐥'을 "서울"로 읽지 못한다. VoiceOver·NVDA 같은 화면낭독기는 버전과 설정에 따라 "mathematical bold capital S"처럼 글자 이름을 하나씩 읽거나 아예 건너뛴다. 시각장애인 이용자에게 프로필 이름 전체가 사라지거나 수십 초짜리 낭독이 되는 셈이다. 사람 이름이나 가게 이름처럼 전달되어야 하는 정보에는 쓰지 말아야 하는 가장 큰 이유다.

개발자가 막아야 할 지점 — 입력란·DB·문자열 자르기

서비스를 운영하는 쪽이라면 사용자가 이 문자를 붙여 넣는 순간을 대비해야 한다.

  1. DB 저장 오류. MySQL의 utf8 문자셋(정식 명칭 utf8mb3)은 한 글자 최대 3바이트라 4바이트인 수학 영숫자를 저장하지 못하고 Incorrect string value 오류를 낸다. 이모지가 깨지는 것과 같은 원인이며, 컬럼을 utf8mb4로 바꿔야 한다.
  2. 문자열 자르기. 자바스크립트 s.slice(0, 5)는 UTF-16 칸 단위라 '𝐒𝐞𝐨𝐮𝐥'을 자르면 서로게이트 쌍의 반쪽이 남아 �로 깨진다. 글자 단위로 자르려면 Array.from(s).slice(0, 5).join("")처럼 코드포인트 배열로 바꾼 뒤 자른다. 이모지 조합까지 다루려면 Intl.Segmenter를 쓴다.
  3. 아이디 사칭. 전각 'Admin'과 일반 'Admin'은 다른 문자열이라 그대로 두면 다른 계정으로 가입된다. 아이디·닉네임 중복 검사는 s.normalize("NFKC")로 정규화한 값으로 해야 한다. 단, 위 표처럼 작은 대문자는 NFKC로도 잡히지 않으므로 허용 문자 목록을 따로 두는 편이 확실하다.
  4. 글자수 표시. 사용자에게 "몇 자"를 보여 줄 때 length를 그대로 쓰면 변환 글꼴과 이모지가 2자로 표시된다. [...s].length가 사용자가 보는 글자 수에 더 가깝다.

상황별로 써도 되는 곳·피할 곳

상황권장이유
인스타그램 이름·소개란 장식○소개란 150자 안에서 장식 용도로만, 상호·키워드는 원래 글자로 병기
인스타그램 사용자 이름(@아이디)✕영문·숫자·마침표·밑줄만 허용돼 입력 자체가 안 됨
해시태그✕#cafe와 다른 문자열이라 같은 태그로 묶이지 않음
상호·브랜드·상품명✕검색 누락, NFKC로도 복원 안 되는 스타일 존재
카카오톡 상태메시지·게임 닉네임○순수 장식 목적이면 문제없음
X 게시물 본문△글자마다 2자로 계산돼 한도가 절반
문자메시지✕ (전각만 예외)CP949 밖이라 장문 전환·깨짐
이력서·공문서·이메일 제목✕수신 환경에 따라 □로 보이고 화면낭독기가 읽지 못함

한글을 꾸미고 싶다면 방식이 다르다. 한글은 변형 블록이 없으니 글자를 바꾸는 대신, 각 글자 뒤에 결합 문자를 붙이는 취소선(U+0336)·밑줄(U+0332)이나 ꧁ ꧂ 같은 틀로 감싸는 방식을 쓴다. 텍스트 꾸미기 도구가 이 방식이라 한글에도 그대로 적용된다. 다른 생활 도구 활용법은 kimgoon 생활정보 가이드에 모아 두었다.

자주 묻는 질문

Q. 인스타 폰트 변환기에 한글을 넣으면 왜 안 바뀌나요? A. 유니코드에는 영문·숫자의 굵게·필기체 같은 변형 문자는 있지만 한글 변형 문자는 없습니다. 변환기는 글꼴을 바꾸는 게 아니라 대응하는 다른 문자로 바꾸는 것이라, 대응 문자가 없는 한글은 그대로 남습니다. 한글 장식은 결합 문자 취소선·밑줄이나 괄호 틀을 쓰세요.

Q. 변환한 글씨가 친구 폰에서 네모(□)로 보여요. A. 원인은 둘 중 하나입니다. 상대 기기 글꼴에 그 문자의 모양이 없거나, 변환기가 빈자리(미할당 코드포인트)에 글자를 넣은 경우입니다. 필기체 B·E·F나 이중선 C·R처럼 특정 글자만 네모라면 후자이니 다른 변환기를 쓰면 해결됩니다.

Q. 트위터(X)에서 인스타 폰트를 쓰면 글자수가 줄어드나요? A. 네. X는 기본 라틴 문자 범위 밖의 글자를 2자로 세기 때문에 변환 글꼴은 한 글자가 2자입니다. 280자 한도가 사실상 140자가 되며, 한글 게시물이 140자에서 끊기는 것과 같은 규칙입니다.

Q. 인스타 폰트로 바뀐 글자를 다시 일반 글자로 되돌릴 수 있나요? A. 대부분은 NFKC 정규화로 되돌릴 수 있습니다. 자바스크립트는 s.normalize("NFKC"), 파이썬은 unicodedata.normalize("NFKC", s) 한 줄이면 굵게·필기체·전각·원문자가 원래 글자로 돌아옵니다. 다만 작은 대문자와 위첨자 q는 분해 정보가 없어 되돌아오지 않습니다.

관련 가이드

참고한 표준·공식 자료

본 글은 다음 기관·표준 문서의 공개 자료를 바탕으로 정리·검토되었습니다. 최신 기준은 각 원문을 함께 확인해 주세요.

잘못된 정보나 갱신이 필요한 부분을 발견하셨다면 contact@kimgoon.kr로 알려주세요. 툴박스 편집 방침을 함께 참고하실 수 있습니다.

공유

광고

다른 서비스의 관련 가이드

15개 서비스 가이드를 한곳에서 모아보기 →

광고