가변 폰트는 여러 굵기·축을 한 파일에 담아 네트워크 요청과 총 용량을 줄이는 OpenType 폰트입니다. 굵기를 4종 이상 쓴다면 가변 폰트 1개가 유리하고, font-variation-settings로 축을 제어하며, size-adjust로 폴백 글자의 흔들림(CLS)을 줄입니다. 한글은 파일이 크니 서브셋·WOFF2가 함께 가야 합니다.
요약
- 가변 폰트 = 한 파일에 여러 굵기·축(axis). 100~900을 연속 범위로 — 브라우저 지원 97%+(2025).
- 굵기 4종 이상이면 파일 4개 대신 가변 1개 → 요청·용량 절감. 단, 가변 1파일은 단일 굵기보다 무겁다.
font-variation-settings로 축 제어. 굵기는 가능하면 표준font-weight우선.size-adjust·ascent-override로 폴백을 웹폰트에 맞춰 글자 흔들림(CLS)을 줄인다.- 한글 가변 폰트는 파일이 커서 서브셋 + WOFF2가 핵심. 제목만 가변, 본문은 시스템 폰트 절충도 유효.
제가 타입을 처음 맡았을 때, 디자이너가 “여기는 660 굵기로”라고 했습니다. 660? 폰트에는 Regular(400)랑 Semibold(600)밖에 없는데요. 그래서 600으로 욱여넣었고, 그게 어쩐지 어색했습니다. 가변 폰트를 만나고 나서야 알았습니다. 굵기는 계단이 아니라 다이얼이라는 걸요. 400과 700 사이의 모든 숫자가, 진짜로 존재합니다.
그래서, 직접 만져보세요
말보다 빠릅니다. 아래 슬라이더를 움직여 보세요. 폰트 파일은 단 하나인데, 굵기도 크기도 자간도 즉시 바뀝니다. 이게 가변 폰트입니다.
굵기·크기를 자유롭게
가변 폰트는 한 파일로 모든 굵기를 — 슬라이더로 만져보세요.
검색과 AI 답변에 찾아지는 홈페이지.
슬라이더를 움직이기 전에, 한 파일에서 굵기 축(wght)만 바꾸면 같은 문구가 어디까지 변하는지 단계별로 펼쳐 둡니다. 전부 폰트 하나에서 나오는 값입니다.
400과 700 사이의 540 같은 ‘중간 굵기’가 진짜로 존재한다는 것 — 앞에서 말한 ‘굵기는 계단이 아니라 다이얼’이 이 다섯 줄입니다.
가변 폰트가 정확히 뭐길래?
가변 폰트(variable font)는 OpenType 포맷의 확장입니다. 보통 폰트 하나에 굵기 하나가 들어 있다면, 가변 폰트는 한 파일 안에 ‘축(axis)’이라는 다이얼을 여러 개 넣어 둡니다. 가장 흔한 게 굵기(wght)이고, 너비(wdth), 기울기(slnt), 광학 크기(opsz) 같은 축도 있습니다. 한 축을 100에서 900까지 연속으로 움직일 수 있으니, 폰트 하나로 사실상 무한한 변형을 씁니다.
그럼 페이지가 정말 빨라지나요?
여기가 사람들이 가장 궁금해하는 지점입니다. 정답은 “쓰는 굵기 수에 달렸다”입니다. Light·Regular·Medium·Bold·Black을 다 쓴다면, 예전 방식은 파일을 다섯 개 받아야 합니다. 가변 폰트는 단 한 개를 받아 그 안에서 다섯 굵기를 모두 꺼냅니다. 네트워크 요청과 총 전송량이 줄죠. 다만 솔직히 적자면, 가변 파일 하나의 용량은 단일 굵기 파일보다 큽니다. 그래서 굵기를 한두 개만 쓰는 사이트라면 단일 폰트가 더 가벼울 수 있습니다. 손익 분기점은 보통 ‘굵기 4종 이상’입니다.
코드로는 어떻게 굵기를 부르나요?
표준 굵기는 그냥 font-weight: 540처럼 줘도 됩니다. 가변 폰트의 매력은 정수를 자유롭게 쓸 수 있다는 거죠. 그 외의 축은 font-variation-settings로 제어합니다.
축은 네 글자 이름으로
등록 축(wght·wdth)은 소문자, 폰트 제작자의 커스텀 축은 대문자입니다.
.title {
font-weight: 540; /* 표준 속성 우선 */
font-variation-settings:
"wght" 540, /* 굵기 */
"wdth" 92, /* 너비(살짝 좁게) */
"opsz" 28; /* 광학 크기(제목용) */
}// 주의: font-variation-settings에 명시하지 않은 축은 기본값으로 되돌아갑니다(상속 안 됨).
실무 팁 하나. 굵기는 가능하면 font-weight로 주는 게 안전합니다. font-variation-settings만으로 굵기를 주면 다른 축을 새로 쓸 때 굵기가 기본값으로 리셋되는 사고가 납니다. 표준 속성과 축 제어를 섞어 쓸 때 가장 많이 나오는 버그입니다.
폰트가 늦게 뜨면 글자가 ‘툭’ 밀리던데요?
맞습니다. 웹폰트가 도착하기 전에는 브라우저가 시스템 폴백 폰트로 글자를 먼저 그립니다. 그런데 폴백 폰트와 웹폰트의 글자 크기·높이가 다르면, 웹폰트로 교체되는 순간 줄이 밀리며 레이아웃이 흔들립니다. 이게 Core Web Vitals의 CLS(누적 레이아웃 이동) 점수를 깎습니다.
폴백을 웹폰트 치수에 맞춥니다
폴백 폰트가 웹폰트와 같은 공간을 차지하게 만들면 교체 순간의 reflow가 사라집니다.
/* 폴백 전용 @font-face — 시스템 폰트의 치수를 웹폰트에 맞춤 */
@font-face {
font-family: "Body-fallback";
src: local("Apple SD Gothic Neo"), local("Malgun Gothic");
size-adjust: 103%; /* 평균 글자폭 맞춤 */
ascent-override: 88%; /* 윗선 높이 맞춤 */
descent-override: 22%; /* 아랫선 높이 맞춤 */
}
body { font-family: "Pretendard", "Body-fallback", sans-serif; }// size-adjust·ascent-override·descent-override를 맞추면 폰트 교체 시 CLS를 줄이거나 없앨 수 있습니다.
여기에 font-display: swap으로 “폰트 오기 전엔 폴백이라도 일단 보여줘”를 지시하고, 폰트는 WOFF2로 압축해 전송량을 줄입니다. 이 세 가지(가변 폰트 + size-adjust 폴백 + WOFF2)가 제가 거의 모든 사이트에서 함께 쓰는 조합입니다.
그래서 한글은요? 여기가 진짜 함정입니다
가장 솔직하게 적습니다. 한글 가변 폰트도 분명히 있고, 잘 만든 것도 많습니다. 그런데 한글은 글자 수가 라틴(수십 자)과 비교가 안 되게 많아서(수천~수만 자), 파일 자체가 무겁습니다. ‘한 파일’이라는 가변 폰트의 장점이, 한글에서는 ‘한 무거운 파일’이 될 수도 있다는 뜻입니다.
그래서 한글에서는 가변이냐 아니냐보다 서브셋(subset)과 압축이 더 중요합니다. 사이트에 실제로 쓰는 글자만 추려 내고(자주 안 쓰는 한자·기호 제거), unicode-range로 쪼개 필요한 조각만 받게 하고, WOFF2로 압축합니다. 또 하나 자주 쓰는 절충은 본문은 시스템 폰트, 제목·로고만 가변 웹폰트로 가는 방식입니다. 모바일에서 CJK 본문을 시스템 폰트로 두는 건 성능상 합리적인 선택입니다.
| 항목 | 굵기마다 폰트 파일 | 가변 폰트 1파일 |
|---|---|---|
| 굵기 5종 쓸 때 요청 수 | 파일 5개 요청 | 파일 1개 요청 |
| 총 전송량(굵기 多) | 굵기마다 누적 → 커짐 | 1파일이라 보통 더 작음 |
| 단일 굵기 파일 용량 | 개별 파일은 더 가벼움 | 1파일이 단일 굵기보다 큼 |
| 중간 굵기(예: 540) | 불가 — 600으로 욱여넣기 | 연속 범위로 자유 |
| 유연성(너비·기울기) | 축마다 또 파일 필요 | 한 파일에서 다축 제어 |
타입을 이렇게 보는 사람이, 사이트 전체의 ‘목소리’를 정합니다
폰트는 사이트가 입을 열기 전부터 말하는 첫 인상입니다. 한 글자의 굵기를 600이냐 540이냐로 고민하는 사람이라면, 줄 간격도 위계도 로딩 흔들림도 같은 태도로 다룹니다. Findable에서는 이런 타이포 디테일이 기본값입니다. 당신의 사이트, 어떤 목소리로 말하게 할까요?
가변 폰트가 정확히 뭔가요?
가변 폰트를 쓰면 페이지가 더 빨라지나요?
font-variation-settings는 어떻게 쓰나요?
폰트가 늦게 떠서 글자가 흔들리는 건 어떻게 막나요?
한글도 가변 폰트를 쓸 수 있나요?
타이포 담당자의 글자 설계
위계·리듬으로 글자를 배치하는 실무.
크기의 규칙 — 타입 스케일
크기를 비율로 정하는 법.
시스템 폰트라는 선택
웹폰트 없이 빠르고 단정하게.
위 플레이그라운드는 이 페이지에서 실제로 동작하는 코드입니다. 가변 폰트·font-variation-settings·size-adjust 설명은 2025년 기준 공개된 웹 표준 문서(MDN·web.dev·Chrome for Developers) 및 HTTP Archive Web Almanac 2025의 일반 원칙을 따랐습니다. 한글 가변 폰트의 용량 부담은 글자 수 특성상 라틴 폰트보다 크니 서브셋·WOFF2가 필요하다는 점을 함께 적었습니다. 특정 제품의 정확한 파일 용량 수치는 폰트마다 달라 단정하지 않았으며, 날조된 사례·수치는 사용하지 않았습니다.