이 블로그의 글마다 붙어 있는 썸네일 이미지들은 전부 Python의 Pillow(PIL) 라이브러리로 직접 그린 것입니다. 그런데 이 기능을 처음 만들 때, 정작 가장 중요한 한글 텍스트가 화면에 텅 빈 네모 박스로만 나오는 문제를 겪었습니다. 이번 글은 그 원인과 해결 과정입니다.
증상: 글자가 전부 빈 네모로 나온다
썸네일 생성 스크립트를 처음 실행했을 때, 제목이나 카테고리 배지에 들어가야 할 한글 텍스트가 화면에 아예 보이지 않거나 깨진 네모(이른바 “tofu”)로만 표시됐습니다. 처음엔 좌표 계산이 잘못됐나 의심했지만, 텍스트의 bbox(경계 상자)를 찍어보니 높이가 0으로 나오는 경우까지 있어 좌표 문제가 아니라는 걸 알게 됐습니다.

원인: 시스템에 한글 글리프가 있는 폰트가 없었다
fc-list :lang=ko 명령으로 확인해보니 결과가 텅 비어 있었습니다. 즉 시스템에 설치된 기본 폰트(DejaVu Sans 등)에는 한글 글리프 자체가 존재하지 않았던 것입니다. 라틴 문자는 문제없이 그려지지만, 한글이 필요한 순간 그릴 수 있는 글리프가 아예 없어서 아무것도 렌더링되지 않았던 셈입니다. 이는 이전에 다른 자동화 경로(코인 추천 썸네일)에서 이모지가 같은 이유로 빈 네모로 깨졌던 문제와 본질적으로 같은 원인이었습니다.
해결: 한글 폰트를 직접 설치
apt-get install fonts-nanum으로 해결하려 했지만 이번에도 모바일 네트워크에서 설치가 멈추는 문제에 부딪혔습니다. 결국 Google Fonts 오픈소스 저장소 미러에서 NanumGothic 폰트 파일(.ttf)을 직접 다운로드해 /usr/share/fonts/truetype/nanum/에 배치하고, fc-cache -f로 폰트 캐시를 갱신했습니다. 다시 확인해보니 한글 텍스트가 정상적으로 그려졌습니다.
얻은 교훈
이 경험 이후로 이미지에 텍스트를 그리는 모든 스크립트에서 이모지는 아예 사용하지 않기로 원칙을 정했습니다. 대신 꼭 필요한 강조 요소는 PIL 도형(원, 선, 사각형)으로 직접 그려 대체합니다. 실제로 이 시리즈의 모든 썸네일과 본문 삽화 이미지가 이 원칙 위에서 만들어졌습니다 — 아이콘은 전부 도형이고, 텍스트는 전부 NanumGothic으로 그려집니다.

🤖 이 포스팅은 AI의 도움을 받아 작성되었습니다.


💬 댓글