Claude Code로 PPT·PDF·웹툴 자동 만들기 (한글깨짐·에러 해결기)

특강은 하루 네 시간씩 열흘, 차시마다 만들어야 할 게 네 종류였다. 슬라이드 · 교재(학습지) · 웹 자습 도구 · 평가 문제. 이걸 손으로 다 만든다고 생각하니 아득했다. 그래서 처음부터 작정했다. “하나하나 만들지 말고, 찍어내는 틀을 만들자.”

슬라이드: PPT를 ‘열지 않고’ 만든다

발상을 바꿨다. 파워포인트를 열어서 한 장씩 그리는 대신, 슬라이드를 만들어내는 코드를 Claude한테 짜게 했다. 내용(제목·표·비유·예시)만 데이터로 주면, 코드가 그걸 받아 PPT 파일을 토해내는 구조다. 한 장 고치면 전 차시가 같이 고쳐진다.

> 차시별 슬라이드 내용을 데이터로 정리할 테니,
  그 데이터를 받아 .pptx로 뽑는 코드를 짜줘.
  톤은 네이비+블루, 표랑 비유 도식이 잘 보이게.

여기까진 순조로웠다. 문제는 그다음이었다.

벽 ①: 만든 게 멀쩡한지 ‘볼’ 수가 없었다

코드가 PPT를 뱉긴 하는데, 그게 제대로 생겼는지 확인하려면 이미지로 변환해서 눈으로 봐야 한다. 보통은 변환 도구(LibreOffice 같은)를 쓰는데 — 이 컴퓨터엔 그런 게 없었다. 설치하려다 보니 일이 더 커졌다. 여기서 Claude랑 나의 ‘우회로 찾기’가 시작됐다.

답은 의외로 가까이 있었다. 이 PC엔 파워포인트가 깔려 있다. 그러면 파워포인트 자체를 프로그램으로 조종해서 슬라이드를 이미지로 뽑으면 되잖아. Claude가 그 방식(COM 자동화)으로 코드를 짰고, 그제야 결과물을 눈으로 검수할 수 있었다.

⚠️ 삽질 노트 — “안 됨”은 끝이 아니라 분기점
정공법(변환 도구)이 막혔을 때 포기하는 대신, “이 컴퓨터에 이미 있는 걸로 같은 결과를 낼 방법”을 같이 찾았다. 이게 AI랑 일하는 진짜 요령이다. 막히면 “이건 왜 안 되고, 대신 뭘로 우회할 수 있어?”라고 묻는다.

벽 ②: 교재를 PDF로 — 또 같은 벽

교재와 학습지는 HTML로 예쁘게 만든 다음 A4 PDF로 뽑는 전략이었다. 그런데 HTML을 PDF로 바꾸는 데서 똑같은 ‘변환 도구 없음’ 벽에 다시 부딪혔다. 이번 우회로는 더 깔끔했다. 크롬·엣지 브라우저는 원래 ‘PDF로 인쇄’ 기능이 있다. 그 브라우저를 화면 없이(headless) 명령으로 돌리면, 사람이 인쇄 버튼 누르는 걸 자동으로 할 수 있다.

# 엣지를 화면 없이 돌려서 HTML → A4 PDF
msedge --headless --print-to-pdf="교재.pdf" "교재.html"

검수도 자동화했다. 뽑은 PDF가 몇 쪽인지, 특정 개념이 빠지진 않았는지 — 이건 PDF를 읽는 작은 파이썬 도구(PyMuPDF)로 Claude가 직접 확인했다. 만들고, 변환하고, 검수까지 사람 손을 거의 안 거치는 흐름이 그렇게 완성됐다.

HTML로 만들어 그대로 PDF로 뽑은 교재. 디자인도 코드가 들고 있어서, 한 군데 고치면 전 페이지가 같이 바뀐다.
HTML로 만들어 그대로 PDF로 뽑은 교재. 디자인도 코드가 들고 있어서, 한 군데 고치면 전 페이지가 같이 바뀐다.

클라이맥스: 파일이 통째로 0바이트가 됐다

가장 식겁한 순간. 잘 만들어둔 자습 도구 파일이 어느 순간 0바이트가 되어 있었다. 내용이 다 날아간 거다. 범인을 같이 추적했더니 원인이 좀 어이없었다.

파일에 이모지를 잔뜩 넣었는데, 그걸 저장하는 과정에서 특정 이모지가 인코딩 오류를 일으켰고, 오류가 난 순간 파일이 거기서 잘려 빈 껍데기만 남은 거였다. 쓰다 만 게 아니라, 저장이 실패하면서 원본까지 날려버린 케이스. (2편에서 GitHub 백업을 그렇게 강조한 이유가 이거다.)

🔧 교훈
이모지처럼 특수한 문자는 저장 방식(인코딩)을 안 맞추면 파일 전체를 날릴 수 있다. 이후로는 저장 단계에서 인코딩을 명시하게 했고, 무엇보다 중간중간 GitHub에 올려두는 습관이 생겼다. 한 번 데여보고 배운다.

마지막 잔병치레: 한글 파일명이 깨진다

다 만들어 학생용·교사용으로 zip 묶음을 만들었더니, 압축 안에서 한글 파일명이 와장창 깨졌다. 받는 사람이 ‘ÆÁ¹®¼­.hwp’ 같은 걸 보게 되는 거다. 이것도 흔한 함정이라, 압축할 때 파일명을 UTF-8로 처리하는 방식으로 바꿔 해결했다. 작은 문제 같지만, 받는 사람 입장에선 이거 하나로 ‘성의 없는 자료’가 된다.

정리하면

제작 자체보다 더 많이 배운 건 막혔을 때의 태도였다. 변환 도구가 없으면 파워포인트를 조종하고, 그것도 안 되면 브라우저를 끌어다 쓰고, 파일이 날아가면 백업 습관을 들이고. “안 된다”가 나올 때마다 “그럼 뭘로 우회하지?”로 받아치는 것 — 코드를 못 짜는 내가 결과물을 끝까지 뽑아낸 비결은 사실 그게 전부다.

다음 편: 혼자선 느리다. 에이전트 여러 개를 동시에 굴리고, 언제 ‘추론(생각하는) 모델’을 켜야 하는지, 그리고 세션을 넘어 맥락을 기억시키는 법까지.
현직 고교 교사가 전하는 통합사회·경제의 정석. 고퀄리티 수업 PPT와 HTML 시뮬레이션 교구, 생생한 여행 기록을 통해 사회를 풀어냅니다.