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

AI 에이전트의 내용은 결국 자료에서 나온다. 우리 학교는 홍보 브로셔 PDF에 학과·복지·시설 정보가 다 들어 있었다. 그래서 Claude Code로 PDF를 읽고, 거기서 사진과 로고를 자동으로 뽑아냈다. 이 과정에서 만난 한글 깨짐·에러 해결기까지 정리한다.

PDF를 AI가 읽게 만들기

PDF를 그냥 던지면 글자는 읽어도 표·이미지가 섞인 홍보물은 잘 못 읽는다. 그래서 Claude가 택한 방법은 PDF를 페이지별 이미지로 변환해서 보는 것이었다(PyMuPDF 사용). 사람이 스캔본 보듯, AI도 페이지를 이미지로 보게 한 거다.

바탕화면에 둔 '학교 홍보 브로셔.pdf'를 페이지별 이미지로 변환해서 읽고, 학과·복지·시설 정보랑 사진·로고를 다 뽑아줘.

이렇게 9페이지를 다 읽어서 학과 설명, 취업처, 복지, 동아리, 연락처까지 한 번에 정리됐다. 내가 타이핑할 게 없었다.

교육계획서에서 '추론 근거'를 뽑아내다

홍보물만으론 부족했다. 학생들이 진짜 궁금해할 디테일(통학버스 노선, 동아리 종류, 학생 수, 기숙사 운영)은 175쪽짜리 학교 교육계획서에 있었다. 이 두꺼운 PDF에서 텍스트를 뽑아, 필요한 부분만 골라 MD 지식으로 정리했다. 이게 챗봇이 답할 때 기대는 추론의 근거가 된다. 검색 요약이 아니라 학교 공식 문서를 근거로 깔아주니, AI가 지어낼 여지가 확 줄었다.

⚠️ 여기서 하마터면 사고. 교육계획서는 2026학년도 기준인데, 이 챗봇을 볼 사람은 2027학년도 신입생이다. 자료를 그대로 넣었으면 "올해 기준" 정보를 내년 입시생한테 들이밀 뻔했다. 연도·학사일정처럼 매년 바뀌는 건 "그해 확인" 단서를 달아 다시 정리했다. 자료를 추출하는 것과, 그게 누구에게 맞는 정보인지 판단하는 건 다른 일이고, 후자는 사람이 해야 한다.

로고를 투명 PNG로 뽑아내기

브로셔 안의 학교 교표와 협약형 마크도 그냥 쓰고 싶었다. 처음엔 화면을 네모로 잘랐더니 배경이 그대로 따라와 지저분했다. 그래서 둘로 나눠 처리했다. 협약형 마크는 PDF에 박힌 원본 이미지를 추출해 흰 배경을 투명하게 날렸고, 동그란 교표는 원형 마스크를 씌워 배경을 잘라냈다.

투명 배경으로 추출한 학교 교표
브로셔에서 떼어내 배경을 투명하게 만든 교표. 어두운 사이트 위에 깔끔히 얹힌다.
💡 로고는 "네모로 자르기"보다 "배경만 지우기(투명 PNG)"가 답이다. 원형 로고는 원형 마스크를 씌우면 어떤 배경 위에도 자연스럽다.

고정 자료를 넘어, 실시간 급식 웹툴까지

PDF·이미지는 한번 넣으면 끝인 고정 자료다. 그런데 "오늘 급식 뭐예요?"는 매일 바뀐다. 이건 자료로 못 박는다. 그래서 교육 당국의 급식 공개 데이터(나이스 API)를 챗봇이 직접 불러오게 붙였다. 학생이 급식을 물으면 그 자리에서 가장 가까운 날짜의 식단을 실시간으로 보여준다. 무료 공개 데이터라 돈도 안 든다.

나이스 급식 공개 API로 우리 학교 오늘 급식을 실시간으로 보여줘. 학교 코드는 자동으로 찾아서.

재밌는 건, 이 급식 코드의 뼈대를 내가 예전에 다른 프로젝트에서 한 번 만들어 둔 게 있었다는 거다. 바이브 코딩을 계속하면 이렇게 이전에 만든 조각이 자산으로 쌓여 다음 도구를 더 빨리 만들게 된다.

⚠️ 외부 데이터를 불러올 땐 통신 보안(TLS) 설정이 안 맞아 호출이 통째로 막히는 일도 있었다. "분명 코드는 맞는데 응답이 안 온다" 싶으면 네트워크·인증 쪽을 의심해야 한다. 로직만 째려봐선 안 풀린다.

여기서부터 한글 깨짐 지옥

문제는 우리 폴더 경로에 한글과 이모지가 섞여 있었다는 거다(예: 2. 개발 💻). 윈도우에서 이게 은근히 사고를 친다.

⚠️ 삽질 1. 작업 이어가기용 실행 파일(.bat)을 만들었는데, 경로에 한글·이모지가 있어 cmd가 폴더를 못 찾았다. UTF-8(BOM)로 저장하고 맨 위에 chcp 65001을 넣어서야 해결됐다.
⚠️ 삽질 2. 배포한 이미지가 멀쩡한데도 점검 스크립트에선 자꾸 404가 떴다. 알고 보니 기숙사.jpg 같은 한글 파일 이름을 주소로 만들 때 인코딩을 안 해서였다. 브라우저는 알아서 처리하지만, 명령줄 도구로 확인할 땐 한글을 URL 인코딩해 줘야 했다.

한글 파일명이 자꾸 말썽이라, 이미지 파일은 되도록 영문 이름(chatbot.png, og.png)으로 통일하는 쪽으로 정리했다. 사소해 보여도 이게 사고를 확 줄였다.

🔧 교훈: 한글·이모지 경로/파일명은 윈도우에서 잠재적 지뢰다. 작업 폴더와 파일 이름은 가능하면 영문으로. 깨지면 "인코딩"부터 의심하면 시간을 아낀다.
다음 편 — 4편에서는 챗봇이 "바보야"에 학비를 안내하고 "학교 장점"에 학교폭력을 답하던, 엉뚱하게 답하는 AI를 길들인 디버깅 실전을 푼다.
현직 고교 교사가 전하는 통합사회·경제의 정석. 고퀄리티 수업 PPT와 HTML 시뮬레이션 교구, 생생한 여행 기록을 통해 사회를 풀어냅니다.