Recent Posts
Tags
- 빅데이터 분석 기반 에너지 운영 관리자 양성 및 취업과정
- 데이터 분석 기반 에너지 운영 관리자 양성 및 취업과정
- [멀티잇]데이터 시각화&분석 취업캠프(Python)
- 네이버부스트캠프
- 빅데이터분석기사
- 코딩테스트 python
- boostcourse
- 정보처리기사
- 오라클
- AI 플랫폼을 활용한 데이터 분석
- 부스트코스
- 빅분기
- 이기적
- 파이썬
- Django
- boostcoures
- 데이터베이스
- Ai
- 코딩테스트
- 인공지능기초다지기
- DB
- 기초다지기
- 프로그래머스
- 이것이 취업을 위한 코딩테스트다 with 파이썬
- PY4E
- Oracle
- python
- unsub
- r
- SQL
- Today
- Total
매일공부
[배포] PDF는 한글이 정상인데 운영서버 배포 후에만 깨진 이유 본문
증상
이전에 이미 컨테이너 시작 스크립트에 한글 폰트(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(폰트 설치 여부)을 추가해서, 라이브러리 또는 폰트 둘 중 하나라도 없으면 설치 블록이 실행되도록 바꿨다. 재배포 후 정상 확인.
교훈
"이미 설치했으니 다시 설치 안 해도 됨"을 판단하는 체크 조건을 짤 때, 그 안에 여러 개의 서로 다른 설치 대상(여기서는 시스템 라이브러리 여러 개 + 폰트 하나)이 묶여 있다면, 그중 하나의 존재 여부만으로 전체를 판단하면 안 된다. 각 대상을 개별적으로 확인하거나, 최소한 그중 가장 먼저 빠질 가능성이 있는 항목까지 조건에 포함시켜야 한다.
'IT > 작업기록' 카테고리의 다른 글
| [Docker] docker-compose 없이 Container Manager로 nginx 붙이기 (0) | 2026.08.28 |
|---|---|
| [Django] 화면에서 로고 이미지가 깨지는데 PDF에는 정상 — DEBUG=False의 함정 (0) | 2026.08.27 |
| [Django] select_related 하나로 쿼리가 490개→29개 준 이유 (0) | 2026.08.20 |
| 시놀로지 NAS + 라우터로 내부 서비스에 서브도메인 연결하기 (IP:포트 대신 도메인으로 접속하기) (0) | 2026.08.20 |
| [DB] 개발 DB 민감정보 마스킹하기 — 어디까지, 어떻게 (0) | 2026.08.19 |
Comments