매일공부

[배포] PDF는 한글이 정상인데 운영서버 배포 후에만 깨진 이유 본문

IT/작업기록

[배포] PDF는 한글이 정상인데 운영서버 배포 후에만 깨진 이유

julian 2026. 8. 27. 13:07

증상

이전에 이미 컨테이너 시작 스크립트에 한글 폰트(fonts-nanum) 설치 로직을 넣어뒀는데, 운영서버 배포 후 PDF의 한글이 다시 깨졌다.

원인 — 체크 조건이 절반만 확인하고 있었다

시작 스크립트를 다시 보니:

if ! dpkg -s libpango-1.0-0 >/dev/null 2>&1; then
    apt-get update
    apt-get install -y --no-install-recommends \
        libpango-1.0-0 libpangocairo-1.0-0 libcairo2 \
        libgdk-pixbuf-2.0-0 libffi-dev shared-mime-info \
        fonts-nanum
    rm -rf /var/lib/apt/lists/*
fi

이 체크 조건이 libpango-1.0-0 라이브러리 설치 여부만 확인하고 있었다. 운영서버 이미지에는 이미 pango 라이브러리가 설치된 레이어가 있어서 이 체크를 통과해버리고, 그러면 fonts-nanum 설치까지 통째로 스킵됐다. 즉 "WeasyPrint용 라이브러리(pango)는 있는데 나눔폰트만 없는" 상태가 될 수 있는 구조였던 것.

라이브러리 설치 여부와 폰트 설치 여부는 서로 다른 문제인데, 하나의 조건문으로 둘 다 판단하려다 보니 이런 허점이 생겼다.

수정

if ! dpkg -s libpango-1.0-0 >/dev/null 2>&1 || ! fc-list | grep -qi nanum; then
    apt-get update
    apt-get install -y --no-install-recommends \
        libpango-1.0-0 libpangocairo-1.0-0 libcairo2 \
        libgdk-pixbuf-2.0-0 libffi-dev shared-mime-info \
        fonts-nanum
    rm -rf /var/lib/apt/lists/*
fi

체크 조건에 fc-list | grep -qi nanum(폰트 설치 여부)을 추가해서, 라이브러리 또는 폰트 둘 중 하나라도 없으면 설치 블록이 실행되도록 바꿨다. 재배포 후 정상 확인.

교훈

"이미 설치했으니 다시 설치 안 해도 됨"을 판단하는 체크 조건을 짤 때, 그 안에 여러 개의 서로 다른 설치 대상(여기서는 시스템 라이브러리 여러 개 + 폰트 하나)이 묶여 있다면, 그중 하나의 존재 여부만으로 전체를 판단하면 안 된다. 각 대상을 개별적으로 확인하거나, 최소한 그중 가장 먼저 빠질 가능성이 있는 항목까지 조건에 포함시켜야 한다.

Comments