목회 자동화

교회 주보 자동화 (2) 오류 없이 틀리는 기술 함정: 헤드리스 크롬 PDF, 픽셀메이터 AppleScript

꿈꾸는 조피디 2026. 10. 18. 08:00

세 줄 요약

  • 주보를 자동으로 만들며 부딪힌 함정 중 절반 이상은 오류 없이 조용히 틀린 결과를 냈습니다.
  • 헤드리스 크롬은 PDF를 다 쓰고도 종료하지 않습니다. %%EOF로 완성을 확인하고 직접 종료해야 합니다.
  • 픽셀메이터 AppleScript는 줄간격을 못 주고, 한글을 글자 단위로 끊고, 도형 색을 조용히 무시합니다.

오류 없이 틀리는 것들: 주보 자동화 기술 함정

교회 주보를 텍스트 파일 하나로 자동화한 이야기는 시리즈 1편에 적었습니다. 이 글은 직접 만들어 보려는 분을 위한 기술 기록입니다. 맥에서 HTML·헤드리스 크롬으로 PDF를 만든 1차 버전과, 픽셀메이터 프로를 AppleScript로 조종한 2차 버전에서 실제로 시간을 잡아먹은 것들입니다.

공통점이 하나 있습니다. 대부분 오류를 내지 않았습니다. 스크립트는 '성공'했고, 결과만 틀렸습니다. 이런 실패가 가장 비쌉니다.

1차: HTML + 헤드리스 크롬

macOS sips가 자르기 위치를 무시한다

큰 원본에서 면을 잘라 내려고 sips --cropOffset을 썼는데, 무슨 값을 넣어도 가운데만 잘랐습니다. 인자 순서를 바꿔도 같았고 오류도 없었습니다. ffmpeg로 바꾸고 해결됐습니다.

ffmpeg -i 원본.png -vf "crop=가로:세로:x:y" 결과.png

Jinja2가 CSS 글꼴 이름을 깨뜨린다

Jinja2는 기본으로 HTML을 이스케이프합니다. CSS에 따옴표로 감싼 글꼴 이름이 '로 바뀌어 나왔습니다. CSS는 못 읽는 글꼴 이름에 오류를 내지 않고 조용히 다른 글꼴을 씁니다. PDF는 멀쩡히 나왔는데 글꼴만 달랐고 한동안 몰랐습니다. CSS에 들어가는 값은 |safe로 안전하다고 명시해야 합니다.

헤드리스 크롬이 멈추는 네 가지 방식

  • 옛 --headless는 이제 멈춥니다. --headless=new를 써야 합니다.
  • 평소 쓰는 크롬과 프로필이 겹치면 멈춥니다. --user-data-dir로 임시 폴더를 따로 주세요.
  • 출력을 파이프로 받으면 교착 상태가 됩니다. 파이썬의 capture_output=True가 그렇습니다. 자식 프로세스가 파이프를 쥐고 놓지 않습니다.
  • PDF를 다 쓰고도 종료하지 않습니다. 가장 이상한 것입니다. 파일은 완성돼 있는데 프로세스가 그냥 앉아 있습니다. 어느 밤에는 이미 끝난 세 단계를 기다리느라 10분 넘게 날렸습니다.

마지막 것의 해결은 멋없습니다. PDF 파일 끝에 %%EOF 표시가 생겼는지 확인하고, 그 크롬 프로세스를 직접 종료합니다.

넘치는 글을 조금씩 줄이면 끝나지 않는다

교회 소식이 어떤 주는 6개, 어떤 주는 9개입니다. 처음에는 확대 비율을 조금 줄이고, 높이를 다시 재고, 또 줄이는 반복문을 짰습니다. 영원히 안 끝났습니다. scrollHeight는 그 요소 자신의 좌표계 값이라, 요소를 축소해도 재는 숫자가 그대로였습니다. 지금은 넘치는 비율을 한 번 재서 transform: scale()을 한 번에 걸고, 같은 비율로 폭을 넓혀 면이 꽉 차게 합니다.

2차: 픽셀메이터 프로 + AppleScript

결과물을 직접 손볼 수 있도록 픽셀메이터 문서로 조립하는 방식으로 바꾼 뒤 만난 함정들입니다.

줄간격을 스크립트로 줄 수 없다

그런 속성이 없습니다. 문서를 만들고 저장한 다음, 저장된 .pxd 파일 안의 줄간격 값(NSLineHeightMultiple)을 직접 고치고, 그다음에 내보냅니다. 먼저 내보내면 틀린 간격이 나갑니다.

한글을 글자 단위로 끊는다

텍스트 레이어에 폭을 주고 줄바꿈을 맡기면 "축/복하며"처럼 낱말 중간에서 끊습니다. 지금은 어절 단위로 줄을 직접 나눠 줄바꿈 문자를 넣고, 폭은 주지 않습니다.

"at the end of layers"는 맨 아래다

앞면을 다 만들고 내보냈더니 새하얀 페이지가 나왔습니다. 새 문서의 흰 배경 레이어가 제가 올린 모든 것 위를 덮고 있었습니다. 레이어 순서를 반대로 생각해야 합니다.

도형 색이 조용히 무시된다

상식적인 방법으로 색을 넣으면 오류도 경고도 색도 없습니다. tell styles of 도형 블록으로 감싸야 먹습니다. 글꼴 사고와 똑같은 모양의 실패입니다.

PDF 내보내기가 해상도를 무시한다

1픽셀을 1포인트로 계산해서, 600dpi A4 문서가 2475×1750mm짜리 PDF로 나왔습니다. A4의 여덟 배쯤이라 인쇄가 안 됩니다. 지금은 PNG로 내보내고 해상도를 명시해 PDF로 감쌉니다.

표 행이 늘어나지 않는다

HTML 표는 내용이 많으면 행이 알아서 커지지만, 여기서는 아래 행으로 조용히 넘칩니다. 필요한 높이를 먼저 재고 남는 공간만 나눠 주도록 바꿨습니다. 찬양이 세 곡이 아니라 네 곡이던 주를 살린 게 이 부분입니다.

줄마다 레이어를 만들면 고치기 불편하다

처음에는 줄마다 레이어를 따로 얹었습니다. 기술적으로 깔끔했지만 고치기는 훨씬 불편했습니다. 항목당 한 덩어리로 되돌렸습니다. 목표는 레이어 수가 아니라 작은 수정 앞의 걸림돌을 줄이는 것이었습니다.

정리: 조용한 실패를 조심하세요

이 목록에서 오류를 낸 건 크롬이 멈춘 경우뿐이었습니다. 나머지는 전부 조용히 틀렸습니다. 자동화를 만든다면 "오류가 없으니 됐다"가 아니라 결과물을 눈으로 한 번 보는 단계를 꼭 넣으세요. 이 교훈은 시리즈 3편의 전날 밤 사건으로 이어집니다.

주보 자동화 시리즈

  1. 6년 토요일 밤이 바뀐 이유
  2. 만들며 부딪힌 기술 함정 모음 (지금 읽는 글)
  3. 파일 하나로 인스타·홈페이지·유튜브까지, 그리고 전날 밤 잡은 실패