- 공유 링크 만들기
- X
- 이메일
- 기타 앱
이 글의 목적은 한글 글꼴 깨짐 현상을 환경별로 정확히 진단하고 재발 없이 해결하도록 체계적인 절차와 점검표, 설정값 예시, 스크립트, 배포 표준안을 제공하는 것이다.
1. 문제 정의와 분류
한글 글꼴 깨짐은 크게 네 가지 범주로 나뉜다.
- 미설치·누락: 문서가 요구하는 글꼴이 시스템에 없어서 대체 글꼴로 치환되어 자간·줄바꿈이 무너지는 경우이다.
- 인코딩 오류: 파일 자체가 CP949, EUC-KR, UTF-8(BOM/무BOM) 등 문자셋 불일치로 깨지는 경우이다.
- 렌더링·캐시 손상: OS 글꼴 캐시, 브라우저 렌더러, 앱 폴백 체인 설정 문제로 나타나는 경우이다.
- 임베딩 누락: PDF·인쇄·배포용 문서에서 글꼴을 포함하지 않아 수신측에서 깨지는 경우이다.
주의 : 증상이 비슷해도 원인이 다르면 해결책이 완전히 달라진다. 원인 분류 후 단계를 진행해야 한다.
2. 증상별 원인-조치 매트릭스
| 증상 | 가능 원인 | 즉시 조치 | 근본 대책 |
|---|---|---|---|
| 네모(□)·물음표(?)·기호로 표시됨 | 미설치 글꼴, 유니코드 범위 미지원 | 대체 글꼴 지정 또는 권장 한글 글꼴 설치 | 문서·웹에 폴백 체인 설정, 배포 글꼴 표준화 |
| 문서 줄바꿈 위치 붕괴 | 대체 글꼴 치환, 글꼴 메트릭 차이 | 원문과 동일 글꼴 설치 후 재열기 | PDF 임베딩 또는 서체 표준 전환 |
| CSV·로그가 ���처럼 깨짐 | 인코딩 불일치(CP949↔UTF-8) | 올바른 문자셋으로 다시 열기/변환 | 전사 UTF-8 규격 채택 및 저장 정책 |
| 브라우저 일부 페이지만 깨짐 | 웹폰트 CORS·서브셋 누락·cache 문제 | 강력 새로고침, 개발자도구로 404 확인 | WOFF2 배포, unicode-range 서브셋 |
| PDF에서만 깨짐 | 글꼴 미포함(Subset/None) | 제작 원본에서 글꼴 포함 후 재생성 | PDF/X 규격, 임베딩 강제 정책 |
| 특정 앱만 깨짐 | 앱 전용 캐시·설정 손상 | 앱 캐시 삭제·재설치 | 앱별 표준 템플릿·프로필 배포 |
3. 환경별 기본 점검 체크리스트
3.1 Windows 10/11
- 설치 확인: 설정 > 개인 설정 > 글꼴에서 목표 글꼴이 존재하는지 확인한다.
- 시스템 기본 한글 글꼴 가용성: 맑은 고딕, Malgun Gothic, Gulim, Dotum 유무를 확인한다.
- 글꼴 캐시 초기화: 서비스에서 Windows Font Cache Service 중지 후 캐시 파일을 삭제한다.
- 클리어타입: 제어판 > Cleartype 텍스트 조정으로 렌더링 품질을 보정한다.
- 로캘·언어팩: 앱별 비유니코드 프로그램 언어가 한국어인지 확인한다.
주의 : 글꼴 캐시 파일 삭제 시 관리자 권한이 필요하다. 실행 중인 앱을 모두 종료한다.
3.2 macOS
- 폰트 북에서 문제 글꼴 유효성 검사 후 중복·손상 글꼴 비활성화 또는 제거한다.
- 한글 기본 글꼴 애플고딕, Apple SD 산돌고딕 Neo, PingFang KR 가용성을 확인한다.
- 서드파티 폰트 관리툴을 쓰는 경우 시스템 폰트와 충돌 여부를 점검한다.
3.3 Linux 데스크톱
- Noto Sans/Serif CJK KR 설치를 우선 적용한다.
- fc-cache -fv 로 캐시를 재생성한다.
- fallbacks.conf 또는 local.conf로 한글 폴백 체인을 정의한다.
4. 인코딩 이슈 정복
4.1 파일 열기 전 진단 절차
- 문자셋 후보를 파악한다: UTF-8(BOM/무BOM), CP949, EUC-KR, UTF-16LE 등이다.
- 에디터에서 인코딩 추정 표시를 확인하고 변환 없이 복제본을 만든다.
- CSV·TSV는 구분자와 헤더의 정상성으로 인코딩을 추정한다.
4.2 안전한 변환 규칙
# Windows PowerShell: CP949 → UTF-8(BOM) 일괄 변환 예시 Get-ChildItem -Path . -Filter *.csv -Recurse | ForEach-Object { $src = Get-Content $_.FullName -Encoding Default $dst = $_.FullName + ".utf8.csv" Set-Content $dst $src -Encoding UTF8 } # Linux/macOS: 인코딩 확인 및 변환 file -I sample.csv # charset 확인 iconv -f CP949 -t UTF-8 sample.csv > sample.utf8.csv 주의 : Excel은 기본적으로 CSV를 시스템 로캘로 해석한다. 데이터 > 텍스트/CSV 가져오기에서 UTF-8을 명시한다.
4.3 터미널·콘솔에서 한글 깨짐
:: Windows 콘솔 코드페이지를 UTF-8로 chcp 65001 # Python 표준출력 유니코드 보장 import sys sys.stdout.reconfigure(encoding="utf-8") 5. 문서 편집기별 설정
5.1 MS Word
- 파일 > 옵션 > 저장 > "파일에 글꼴 포함"을 켠다. "사용 중인 글꼴의 문자만 포함"을 해제해 임베딩 완전성을 확보한다.
- 서체 표준: 본문 Sans는 맑은 고딕, 본문 Serif는 바탕체 대체로 나눔명조·Noto Serif CJK KR을 권장한다.
- 공유 시 DOCX 대신 PDF/A 또는 PDF/X로 내보낸다.
5.2 한글(HWP/HWPX)
- 도구 > 호환성 검사로 사용 글꼴을 점검한다.
- PDF로 내보낼 때 "글꼴 포함" 옵션을 필수로 활성화한다.
- 제목·본문·캡션 스타일에 동일 폴백 체인을 적용해 문단 재흐름을 방지한다.
5.3 PowerPoint
- 파일 > 옵션 > 저장 > "프레젠테이션 글꼴 포함"을 켠다.
- 비디오 내보내기 전 슬라이드의 서브셋 글리프 누락 여부를 점검한다.
6. PDF에서의 글꼴 임베딩
6.1 원칙
- 임베딩은 Subset이 아닌 Full Embedding을 기본으로 한다.
- 투명도·효과 사용 시 글꼴 래스터라이즈 방지 설정을 확인한다.
- PDF/A-2u 또는 PDF/X-4 규격을 선호한다.
6.2 제작기 설정 예시
# Adobe 계열: PDF/X-4 프리셋 기반, Fonts: Embed All Fonts # Office: 내보내기 > PDF/XPS > 옵션 > ISO 19005-1 준수(PDF/A) 체크 7. 웹페이지에서의 한글 깨짐
7.1 HTML 선언과 메타
<!doctype html> <meta charset="utf-8"> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 주의 : 서버가 Content-Type 헤더로 charset을 다르게 보낼 경우 메타 선언이 무효화된다. 서버 설정과 빌드 파이프라인을 함께 점검한다.
7.2 안전한 폰트 스택
/* Sans 권장 */ body { font-family: "Noto Sans KR", "Apple SD Gothic Neo", "Malgun Gothic", "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif; } /* Serif 권장 */ .article { font-family: "Noto Serif KR", "Nanum Myeongjo", "Batang", "Times New Roman", serif; } 7.3 웹폰트 배포 최적화
@font-face{ font-family:"MyKR"; src:url("/fonts/MyKR.woff2") format("woff2"); font-weight:100 700; font-style:normal; font-display:swap; unicode-range: U+1100-11FF, U+3130-318F, U+AC00-D7A3; /* 한글 자모·호환·가자 범위 */ } - WOFF2 우선, WOFF를 보조로 둔다.
- unicode-range로 한글 서브셋을 나눠 로딩을 줄인다.
- font-display: swap으로 FOIT 없이 대체 표시 후 교체한다.
# Nginx 예시: 올바른 MIME과 캐시 location /fonts/ { add_header Access-Control-Allow-Origin "*"; types { font/woff2 woff2; font/woff woff; } expires 30d; } 7.4 브라우저 진단 루틴
- 개발자도구 Network 탭에서 웹폰트 200/206 응답과 CORS를 확인한다.
- Coverage로 실제 사용 글리프가 서브셋에 포함되는지 확인한다.
- Computed 탭의 rendered font를 확인하여 의도한 서체가 적용되는지 본다.
8. 기업 표준 배포 가이드
8.1 권장 한글 서체 세트
- Sans: Noto Sans KR, 맑은 고딕, Apple SD Gothic Neo
- Serif: Noto Serif KR, 나눔명조
- 모노: D2Coding, Cascadia Mono
8.2 설치·정책
- 소프트웨어 배포툴로 TTF/OTF 패키지를 OS별로 자동 설치한다.
- 불필요 상용 폰트 사용을 금지하고 오탈자·라이선스 리스크를 제거한다.
- 문서 템플릿을 표준 서체로 잠금하고 변경을 제한한다.
9. 자동 점검 스크립트 예시
9.1 Windows: 필수 글꼴 존재·캐시 상태 보고
#requires -Version 5.1 $need = @("Malgun Gothic","Noto Sans KR","Noto Serif KR","D2Coding") $fonts = (New-Object -ComObject Shell.Application).Namespace(0x14).Items() | % { $_.Name } $missing = $need | ? { $fonts -notcontains ($_ + ".ttf") -and $fonts -notcontains ($_ + ".otf") } Write-Host "Missing:" $missing Get-Service FontCache* | Format-Table Name,Status,StartType 9.2 macOS: 폰트 유효성·중복 검사
# 중복·오류 폰트 나열 /Applications/Font\ Book.app/Contents/MacOS/Font\ Book --validate --quiet 9.3 Linux: CJK 설치·캐시 재생성
sudo apt-get install fonts-noto-cjk fc-list :lang=ko | wc -l fc-cache -fv 10. 문서 배포 전 사전검토(Preflight) 체크리스트
- 문서 파일 포맷: 최종 전달은 PDF/A 또는 PDF/X로 고정한다.
- 글꼴 포함: 포함률 100% 확인, 서브셋이 아닌 Full 포함을 기본으로 한다.
- 대체 글꼴 금지: 템플릿에 지정하지 않은 글꼴 사용을 탐지한다.
- 인코딩: CSV·데이터 첨부는 UTF-8(BOM)로 통일한다.
- 웹 배포: WOFF2, unicode-range, CORS, 캐시 정책을 점검한다.
11. 한글 폴백 체인 설계 원칙
- 동일 분류 내에서만 폴백한다(Sans→Sans, Serif→Serif)이다.
- 한글 우선 폴백 후 라틴을 둔다.
- OS별 대표 서체를 상위에 배치한다.
12. 재발 방지 운영 표준
- 저장 규격: 텍스트·데이터는 UTF-8, 문서는 PDF/A·PDF/X, 프레젠테이션은 글꼴 포함을 표준화한다.
- 배포 템플릿: Word·PPT·HWP에 표준 서체·스타일을 잠근 템플릿을 배포한다.
- CI/CD: 웹폰트 빌드에 서브셋·해시 파일명·캐시 무효화 전략을 포함한다.
- 모니터링: 브라우저 콘솔 에러, 404 폰트, CLS·LCP 지표를 관제한다.
13. 상황별 빠른 해결 레시피
13.1 수신자가 문서를 열 때만 깨짐
- 원본에서 글꼴 포함 후 PDF로 재배포한다.
- 수신측 OS에서 권장 한글 서체 세트를 설치하게 한다.
13.2 서버 로그·CSV가 깨짐
- 인코딩을 UTF-8로 강제 변환한다.
- Excel 가져오기를 사용해 UTF-8을 지정한다.
13.3 웹에서 간헐적 깨짐
- 웹폰트 404·CORS를 해결한다.
- unicode-range 서브셋을 통합한다.
14. 자주 쓰는 설정 스니펫 모음
# .editorconfig [*.{md,txt,html,js,css}] charset = utf-8 end_of_line = lf # Node.js Express 응답 헤더 res.set("Content-Type", "text/html; charset=utf-8"); # Spring Boot spring.http.encoding.enabled=true spring.http.encoding.charset=UTF-8 spring.http.encoding.force=true # Apache AddDefaultCharset UTF-8 AddType font/woff2 .woff2 Header set Access-Control-Allow-Origin "*" 15. 품질 확인 방법
- 시각 비교: 원본과 PDF 출력물의 줄 수·페이지 수 일치 여부를 확인한다.
- 문자 커버리지: 한글 완성형(AC00-D7A3)과 자모(1100-11FF) 표시를 점검한다.
- 렌더링 엔진 교차검증: Chrome·Edge·Safari·Firefox에서 각기 확인한다.
16. 문제 보고서 템플릿
[증상] 예: 제목 줄바꿈 붕괴 [환경] OS/앱/브라우저/문서 포맷 [글꼴] 사용 글꼴 목록, 대체 여부 [인코딩] 파일 문자셋, 서버 헤더 [재현] 단계별 재현 절차 [로그] 콘솔 에러, 404/403, 폰트 로딩 시간 [조치] 임시·근본 대책, 배포 일정 FAQ
문서에 쓰인 상용 글꼴을 배포 없이 해결할 수 있나?
PDF로 글꼴을 포함하여 배포하면 수신측 설치 없이 표시가 가능하다. 텍스트 편집이 필요하면 표준 무료 서체로 치환한 템플릿을 제공한다.
서브셋 임베딩으로도 충분한가?
읽기 전용이면 가능하나 수정·검색·투명도 처리 시 문제가 생길 수 있다. Full 임베딩을 권장한다.
웹에서만 일부 글자가 네모로 보인다.
웹폰트 서브셋에 해당 글리프가 빠졌거나 unicode-range 선언이 누락되었을 가능성이 높다. 서브셋을 재생성하고 범위를 보완한다.
CSV 인코딩 표준은 무엇이 안전한가?
조직 표준으로 UTF-8(BOM)을 채택하고, 가져오기 시 UTF-8을 강제 지정한다.
브라우저별 렌더링 차이는 어떻게 줄이나?
변수폭·가변폰트를 피하고, 메트릭이 안정적인 Noto 계열을 상단 폴백으로 둔다.