한글 글꼴 깨짐 완벽 해결 가이드: Windows·macOS·웹·문서·PDF 통합 점검법

이 글의 목적은 한글 글꼴 깨짐 현상을 환경별로 정확히 진단하고 재발 없이 해결하도록 체계적인 절차와 점검표, 설정값 예시, 스크립트, 배포 표준안을 제공하는 것이다.

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

  1. 설치 확인: 설정 > 개인 설정 > 글꼴에서 목표 글꼴이 존재하는지 확인한다.
  2. 시스템 기본 한글 글꼴 가용성: 맑은 고딕, Malgun Gothic, Gulim, Dotum 유무를 확인한다.
  3. 글꼴 캐시 초기화: 서비스에서 Windows Font Cache Service 중지 후 캐시 파일을 삭제한다.
  4. 클리어타입: 제어판 > Cleartype 텍스트 조정으로 렌더링 품질을 보정한다.
  5. 로캘·언어팩: 앱별 비유니코드 프로그램 언어가 한국어인지 확인한다.
주의 : 글꼴 캐시 파일 삭제 시 관리자 권한이 필요하다. 실행 중인 앱을 모두 종료한다.

3.2 macOS

  1. 폰트 북에서 문제 글꼴 유효성 검사 후 중복·손상 글꼴 비활성화 또는 제거한다.
  2. 한글 기본 글꼴 애플고딕, Apple SD 산돌고딕 Neo, PingFang KR 가용성을 확인한다.
  3. 서드파티 폰트 관리툴을 쓰는 경우 시스템 폰트와 충돌 여부를 점검한다.

3.3 Linux 데스크톱

  1. Noto Sans/Serif CJK KR 설치를 우선 적용한다.
  2. fc-cache -fv 로 캐시를 재생성한다.
  3. fallbacks.conf 또는 local.conf로 한글 폴백 체인을 정의한다.

4. 인코딩 이슈 정복

4.1 파일 열기 전 진단 절차

  1. 문자셋 후보를 파악한다: UTF-8(BOM/무BOM), CP949, EUC-KR, UTF-16LE 등이다.
  2. 에디터에서 인코딩 추정 표시를 확인하고 변환 없이 복제본을 만든다.
  3. 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

  1. 파일 > 옵션 > 저장 > "파일에 글꼴 포함"을 켠다. "사용 중인 글꼴의 문자만 포함"을 해제해 임베딩 완전성을 확보한다.
  2. 서체 표준: 본문 Sans는 맑은 고딕, 본문 Serif는 바탕체 대체로 나눔명조·Noto Serif CJK KR을 권장한다.
  3. 공유 시 DOCX 대신 PDF/A 또는 PDF/X로 내보낸다.

5.2 한글(HWP/HWPX)

  1. 도구 > 호환성 검사로 사용 글꼴을 점검한다.
  2. PDF로 내보낼 때 "글꼴 포함" 옵션을 필수로 활성화한다.
  3. 제목·본문·캡션 스타일에 동일 폴백 체인을 적용해 문단 재흐름을 방지한다.

5.3 PowerPoint

  1. 파일 > 옵션 > 저장 > "프레젠테이션 글꼴 포함"을 켠다.
  2. 비디오 내보내기 전 슬라이드의 서브셋 글리프 누락 여부를 점검한다.

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 브라우저 진단 루틴

  1. 개발자도구 Network 탭에서 웹폰트 200/206 응답과 CORS를 확인한다.
  2. Coverage로 실제 사용 글리프가 서브셋에 포함되는지 확인한다.
  3. Computed 탭의 rendered font를 확인하여 의도한 서체가 적용되는지 본다.

8. 기업 표준 배포 가이드

8.1 권장 한글 서체 세트

  • Sans: Noto Sans KR, 맑은 고딕, Apple SD Gothic Neo
  • Serif: Noto Serif KR, 나눔명조
  • 모노: D2Coding, Cascadia Mono

8.2 설치·정책

  1. 소프트웨어 배포툴로 TTF/OTF 패키지를 OS별로 자동 설치한다.
  2. 불필요 상용 폰트 사용을 금지하고 오탈자·라이선스 리스크를 제거한다.
  3. 문서 템플릿을 표준 서체로 잠금하고 변경을 제한한다.

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. 한글 폴백 체인 설계 원칙

  1. 동일 분류 내에서만 폴백한다(Sans→Sans, Serif→Serif)이다.
  2. 한글 우선 폴백 후 라틴을 둔다.
  3. OS별 대표 서체를 상위에 배치한다.

12. 재발 방지 운영 표준

  1. 저장 규격: 텍스트·데이터는 UTF-8, 문서는 PDF/A·PDF/X, 프레젠테이션은 글꼴 포함을 표준화한다.
  2. 배포 템플릿: Word·PPT·HWP에 표준 서체·스타일을 잠근 템플릿을 배포한다.
  3. CI/CD: 웹폰트 빌드에 서브셋·해시 파일명·캐시 무효화 전략을 포함한다.
  4. 모니터링: 브라우저 콘솔 에러, 404 폰트, CLS·LCP 지표를 관제한다.

13. 상황별 빠른 해결 레시피

13.1 수신자가 문서를 열 때만 깨짐

  1. 원본에서 글꼴 포함 후 PDF로 재배포한다.
  2. 수신측 OS에서 권장 한글 서체 세트를 설치하게 한다.

13.2 서버 로그·CSV가 깨짐

  1. 인코딩을 UTF-8로 강제 변환한다.
  2. Excel 가져오기를 사용해 UTF-8을 지정한다.

13.3 웹에서 간헐적 깨짐

  1. 웹폰트 404·CORS를 해결한다.
  2. 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. 품질 확인 방법

  1. 시각 비교: 원본과 PDF 출력물의 줄 수·페이지 수 일치 여부를 확인한다.
  2. 문자 커버리지: 한글 완성형(AC00-D7A3)과 자모(1100-11FF) 표시를 점검한다.
  3. 렌더링 엔진 교차검증: Chrome·Edge·Safari·Firefox에서 각기 확인한다.

16. 문제 보고서 템플릿

[증상] 예: 제목 줄바꿈 붕괴 [환경] OS/앱/브라우저/문서 포맷 [글꼴] 사용 글꼴 목록, 대체 여부 [인코딩] 파일 문자셋, 서버 헤더 [재현] 단계별 재현 절차 [로그] 콘솔 에러, 404/403, 폰트 로딩 시간 [조치] 임시·근본 대책, 배포 일정 

FAQ

문서에 쓰인 상용 글꼴을 배포 없이 해결할 수 있나?

PDF로 글꼴을 포함하여 배포하면 수신측 설치 없이 표시가 가능하다. 텍스트 편집이 필요하면 표준 무료 서체로 치환한 템플릿을 제공한다.

서브셋 임베딩으로도 충분한가?

읽기 전용이면 가능하나 수정·검색·투명도 처리 시 문제가 생길 수 있다. Full 임베딩을 권장한다.

웹에서만 일부 글자가 네모로 보인다.

웹폰트 서브셋에 해당 글리프가 빠졌거나 unicode-range 선언이 누락되었을 가능성이 높다. 서브셋을 재생성하고 범위를 보완한다.

CSV 인코딩 표준은 무엇이 안전한가?

조직 표준으로 UTF-8(BOM)을 채택하고, 가져오기 시 UTF-8을 강제 지정한다.

브라우저별 렌더링 차이는 어떻게 줄이나?

변수폭·가변폰트를 피하고, 메트릭이 안정적인 Noto 계열을 상단 폴백으로 둔다.