Search
Duplicate

[Claude]4.Code 실전

부서별 운영결과 문서 (.hwp / .hwpx / .pdf) 를 자동으로 취합해 통계 엑셀 한 장으로 완성하는 실전 가이드 실전 경험을 통한 양파고의 한마디: 앞으로 자동화를 생각한다면 모든 양식은 .hwpx로 가자..(hwp버려)
목차
[깃허브]
README.md
main
[참고 영상]

0.자동화 프로젝트 구현 개요

0-1. 프로젝트 초기화

CLAUDE.md에 정의된 구조대로 초기화하면 툴·워크플로우 기본 뼈대 완성
Plan mode로 자동화 작업의 구체적 실행 계획 수립
지침(데이터 수집 방식, 스킬 등) 입력 → Claude가 적합한 실행 모드 제안

0-2. Claude와의 상호작용 및 계획 구체화

Claude가 질문을 통해 계획을 구체화함 — 유튜브 채널 추적, PDF 디자인 수준, Gmail 주소, Notion DB 여부 등
MCP 서버: AI가 외부 서비스를 직접 쓸 수 있게 해주는 연결 통로 (Gmail, Notion, 유튜브 등)
상황에 따라 MCP 대신 Python으로 API를 직접 호출하는 방식 선택 가능
플랜 완성 시 키워드 검색·PDF 생성·발송·데이터 누적·자동 실행 계획 수립

0-3. 파일 구조 및 워크플로우 생성

프로젝트 폴더 내 스케줄 설정, API 검색, 트렌드 분석, 리포트 생성, 발송, 저장 툴 자동 생성
워크플로우 문서: 주간 리포트 매뉴얼 · 최초 셋업 가이드 · 실행 파이프라인 · 각 툴 상세 설명 포함

1. 실전 미션: 자공고2.0 운영결과 통계 자동화

왜 양식은 똑같이 나가는데, 모여진 파일들은 제각각인가??
누군가는 양식을 바꾼다는 이야기(표도 바꾸고, 확장자도 바꾸고, 부서별 특징이 있으니 .. 그럴 수 있다!)

1-1. 미션 배경 및 문제 상황

자공고2.0 연구학교 보고서 작성을 위해 부서별 담당교사가 '프로그램 운영결과' 양식을 제출함.
양식 구조는 동일하지만 제출 형식이 .hwp / .hwpx / .pdf 로 혼재. 또한 사람들이 양식 구조를 파괴(?)하는 경우도 있음
이를 취합해 운영 통계를 자동 집계해야 함
[실제 예시파일]
(데이터과학 해커톤)자공고2.0 부서별 프로그램 운영결과 통계.pdf
1.8 MiB
(보고서 작성용)자공고2.0 부서별 프로그램 운영결과 통계(공학스쿨).pdf
3.1 MiB
벌써 양식이 달라졌음이 느껴지는 결과보고서
▸ 실제 양식 핵심 항목 (샘플: 데이터과학 해커톤)
항목
예시값
프로그램명
2025. 데이터 과학 해커톤
운영장소
광양고등 1층 매화관, 기술실
계획 참가인원
24명 내외
실제 참여인원
2~3학년 학생 중 희망학생 43명
총 운영시간
2일, 10시간
운영기간
6.13.(금) ~ 6.14.(토)
대상학년
2, 3학년

1-2. [핵심 이슈1] 파일 형식이 섞여있을 수 있음

파일 형식
특징
처리 방법
.hwpx
ZIP 구조 내 XML — 비교적 파싱 쉬움
zipfile + xml 파싱
.hwp
바이너리 형식 — 직접 파싱 어려움
hwp5 라이브러리 또는 텍스트 추출 도구
.pdf
레이아웃 고정 — 텍스트 추출 가능
pdfplumber 또는 PyMuPDF
CLAUDE.md에 3가지 형식 처리 방법을 모두 명시해두면 Claude가 파일 확장자 자동 판별 후 적절한 파서를 선택함

1-3. [핵심 이슈2] 사람들이 양식을 파괴하기도 함

제출된 파일의 형식만 다른 게 아니라, 양식 자체가 변형되어 오는 경우도 빈번함.
Claude는 기준 양식과 비교해서 항목을 찾아야 하는데, 양식이 망가져 있으면 추출 자체가 실패함.
대표적인 양식 파괴 유형:
파괴 유형
실제 사례
문제
항목명 임의 변경
"실제 참여인원" → "참가 학생 수"
키워드 매칭 실패
표 행/열 추가·삭제
담당자가 칸을 늘리거나 합침
위치 기반 추출 오작동
셀 병합 변형
여러 항목을 하나의 셀에 합쳐서 입력
항목 분리 불가
내용을 표 밖에 작성
비고란 밖에 자유롭게 서술
파싱 범위 이탈
파일 내 이미지로 대체
표를 스크린샷으로 붙여넣기
텍스트 추출 불가 (OCR 필요)
한글→PDF 변환 시 깨짐
폰트 임베딩 없이 PDF 저장
문자 깨짐 또는 공백
CLAUDE.md에 추가할 방어 로직(자동화 예시에 따라 달라질 수 있음)
## 양식 파괴 대응 전략 - 항목명이 정확히 일치하지 않아도 유사 표현으로 매핑할 것 예: "참가 학생 수" → 실제 참여인원, "운영 기간" → 운영기간 - 항목을 찾지 못한 경우 빈칸으로 처리하고 로그에 기록 - 표 구조가 무너진 경우 전체 텍스트에서 정규식으로 숫자 추출 시도 - 이미지 기반 내용이 감지되면 OCR 처리 후 재시도 - 처리 실패 파일은 처리로그.txt에 파일명 + 실패 사유 기록
Markdown
복사
Claude에게 줄 추가 지시(자동화 예시에 따라 달라질 수 있음)
양식이 변형된 파일도 있어. 항목명이 다르거나 표 구조가 바뀐 경우에도 최대한 내용을 추출하는 유연한 로직으로 만들어줘. 추출 실패 항목은 빈칸 처리하고 로그에 남겨줘.
Plain Text
복사

2. 실전 mission 시작

학교 현장 맞춤 CLAUDE.md 파일을 만들어 진행하는 것이 핵심 포인트!

2-0. claude.md 파일 만들기

Claude.md란? 종합 명세서 같은 느낌!
이 파일역시 내가 모든 내용을 작성하는 것은 아님
초안을 만든 다음, 추가할 기능은 사람이 지시하는 것이 필요
[초안]
기능 00 (초기화)AutoDocMerge/ 폴더 뼈대 + school-config.md 생성. 여기서 끝내고 파일 넣은 뒤 다음 단계로 넘어감
기능 01 (문서 취합)input/ 안의 .hwp / .hwpx / .pdf 파싱 → output/통합통계.xlsx + 처리로그 생성
기능 04 (보고서) → 기능 01 결과물을 자동으로 물고 들어가서 output/보고서_초안.docx 생성. 기능 01을 먼저 돌리지 않으면 스스로 멈추고 안내
[수정안]
기능
트리거
입력
핵심 처리
출력
선행 조건
0 초기화
"초기화해줘"
없음
폴더 생성 · school-config.md · run.py · README.md 생성
AutoDocMerge/ 뼈대
없음
01 문서 취합
"문서 취합해줘" / 메뉴 1번
input/ 파일 (.hwp/.hwpx/.pdf) + sample/ 기준 양식
확장자 판별 → 파서 선택 → 항목 추출 → 양식 파괴 대응 (매핑→정규식→OCR)
통합통계.xlsx (집계표·오류·로그 시트 3개)
sample/ 에 기준 양식 필수
04 보고서 생성
"보고서 써줘" / 메뉴 2번
통합통계.xlsx (기능 01 결과 자동 참조) + school-config.md
미확인 항목 경고 → 승인 후 섹션 자동 채우기
보고서_초안.hwpx (불가 시 .docx fallback)
기능 01 선실행 필수 — 없으면 멈추고 안내
05 사용법 안내
"사용법 알려줘" / 메뉴 3번
없음
준비 순서·실행 방법·주의사항·FAQ 출력
터미널 출력 + README.md
없음

2-1. 폴더 구조

★ sample/ 폴더가 핵심
Claude가 어떤 항목을 추출할지 샘플 양식을 기준으로 판단함.
샘플 없이 지시하면 항목 인식이 부정확해짐.
[색상 구분]
보라 — CLAUDE.md 핵심 파일 · tools/ 스크립트
초록 — 초기화 시 자동 생성되는 파일
파랑 — 선생님이 직접 넣는 입력 파일
민트 — 자동으로 만들어지는 결과물
빨강 — 주의 필요 (.env, sample/)

2-2. CLAUDE.md 작성 내용

# AutoDocMerge — 업무 지시서 > 자공고2.0 부서별 프로그램 운영결과 문서를 자동 취합하고 보고서를 생성하는 AI 직원입니다. > 선생님들에게 배포할 목적으로 제작됩니다. 이 파일을 읽고 일합니다. 가볍게 유지하세요. --- ## 프로젝트 기술 스택 | 구성 요소 | 파일 타입 | 역할 | |---|---|---| | AI 지시서 | `CLAUDE.md` | Claude Code가 읽는 매뉴얼 | | 학교 설정 | `school-config.md` | 사람이 편집하는 설정 파일 | | 파서 도구 | `tools/parse_hwpx.py`| hwpx / hwp / pdf 파싱 | | 취합·통계 | `tools/merge_stats.py` | 엑셀 집계표 생성 | | 보고서 생성 | `tools/make_report.py` | hwpx 보고서 생성 | | 실행 진입점 | `run.py` | 더블클릭 실행 (비개발자용) | | 사용법 안내 | `README.md` | 배포용 설치·사용 가이드 | | 환경변수 | `.env` | API 키 보관 (절대 공유 금지) | **배포 목표**: `run.py` 더블클릭 한 번으로 전체 실행 가능하도록 설계. 추후 `PyInstaller``.exe` 단일 파일 패키징도 고려. --- ## 핵심 규칙 1. **플랜 먼저** — 바로 실행하지 말고 계획서 먼저 보여주기 2. **원본 파일 절대 수정 금지** — 결과물은 `output/` 폴더에만 저장 3. **파싱 실패 시 로그 기록 후 계속 진행** — 멈추지 않기 4. **`sample/` 없으면 작업 중단** — "sample/ 폴더에 기준 양식을 넣어주세요" 안내 5. **숫자 추출 시 단위 문자 제거** — '명', '시간', '일' 등 제거, UTF-8 유지 6. **결과물은 `output/` 폴더에만 저장** 7. **비개발자 배포 전제** — 코드 설명 없이 결과물과 다음 할 일만 안내 --- ## 기능 00: 초기화 "초기화해줘"라고 하면 아래 순서대로 실행한다. **폴더 및 파일 생성 (Windows PowerShell)** ```powershell mkdir AutoDocMerge cd AutoDocMerge mkdir input, output, sample, tools ``` **`school-config.md` 생성** ```markdown # 학교 설정 - 학교명: - 담당 부서: - 담당자: - 연락처: - 보고서 기준연도: ``` **`run.py` 생성** — 비개발자가 더블클릭으로 실행하는 진입점 ```python # run.py — 더블클릭으로 실행하세요 # 실행하면 메뉴가 나타납니다 from tools.merge_stats import run_merge from tools.make_report import run_report print("=" * 40) print(" AutoDocMerge — 자공고2.0 문서 취합기") print("=" * 40) print("1. 문서 취합 · 통계 (기능 01)") print("2. 연구학교 보고서 생성 (기능 04)") print("3. 사용법 안내 보기 (기능 05)") print("0. 종료") print("-" * 40) choice = input("번호를 입력하세요: ").strip() if choice == "1": run_merge() elif choice == "2": run_report() elif choice == "3": from tools.guide import run_guide run_guide() else: print("종료합니다.") ``` **완료 보고** ``` 초기화가 완료되었습니다! 📁 생성된 구조: AutoDocMerge/ ├── input/ ← 부서별 제출 파일 (.hwp / .hwpx / .pdf) ├── output/ ← 결과물 저장 ├── sample/ ← ★ 기준 양식 파일 (반드시 넣어주세요) ├── tools/ ← 자동 생성 스크립트 ├── run.py ← 더블클릭으로 실행 └── school-config.md ← 학교 정보 입력 다음으로 해주실 것: 1. school-config.md에 학교 정보를 채워주세요. 2. sample/ 폴더에 기준 양식 파일(.hwpx)을 넣어주세요. 3. input/ 폴더에 부서별 제출 파일을 모두 넣어주세요. 4. 준비되면 "문서 취합해줘"라고 말씀해주세요! ``` --- ## 기능 01: 문서 취합 · 통계 "문서 취합해줘" 또는 "통계 내줘"라고 하면 실행한다. `run.py` 메뉴 1번과 동일하다. ### 파일 형식별 처리 | 형식 | 처리 방법 | |---|---| | `.hwpx` | `zipfile` + `xml` 파싱 (python-hwpx 없으면 직접 파싱) | | `.hwp` | `hwp5` 라이브러리 우선, 실패 시 텍스트 추출 fallback | | `.pdf` | `pdfplumber` 우선, 실패 시 `PyMuPDF` fallback | ### 추출 대상 항목 (sample/ 기준 양식 구조 따름) - 프로그램명 / 운영장소 / 대상 학년 - 계획 참가인원 (숫자만) / 실제 참여인원 (숫자만) - 총 운영시간 (숫자만) / 운영기간 / 부서명 (파일명에서 추출) ### 양식 파괴 대응 - 항목명이 정확히 일치하지 않아도 유사 표현으로 매핑할 것 - 예: "참가 학생 수" → 실제 참여인원, "운영 기간" → 운영기간 - 표 구조가 무너진 경우 전체 텍스트에서 정규식으로 숫자 추출 시도 - 이미지 기반 내용이 감지되면 OCR 처리 후 재시도 - 항목을 찾지 못하면 빈칸 처리 후 오류 시트 + 처리로그.txt에 파일명 + 실패 사유 기록 ### Claude에게 줄 추가 지시 (작업 중 문제 발생 시) ``` 양식이 변형된 파일도 있어. 항목명이 다르거나 표 구조가 바뀐 경우에도 최대한 내용을 추출하는 유연한 로직으로 만들어줘. 추출 실패 항목은 빈칸 처리하고 로그에 남겨줘. ``` ### 출력물 — `output/통합통계.xlsx` (시트 3개) **시트 1: 집계표** - 부서별 항목 집계표 + 합계행 - 추출 실패 항목은 빈칸, 배경색 노란색으로 표시 **시트 2: 오류·확인 필요사항** | 파일명 | 부서명 | 오류 유형 | 상세 내용 | 확인 필요 항목 | |---|---|---|---|---| | 진로부_캠프.hwp | 진로부 | 양식 변형 | "참가 학생 수" → 매핑 처리 | 실제 참여인원 재확인 요망 | | 정보부_로봇.pdf | 정보부 | 파싱 실패 | 이미지 기반 PDF | 전체 항목 수동 확인 요망 | 오류 유형 분류: - `파싱 실패` — 파일 자체를 열지 못함 - `양식 변형` — 항목명이 기준 양식과 다름 - `항목 누락` — 해당 항목이 파일에 없음 - `값 이상` — 숫자가 아닌 값 또는 범위 초과 **시트 3: 처리로그** - 파일명 / 처리 시각 / 결과(성공·실패) / 사용한 파서 / 비고 --- ## 기능 04: 연구학교 보고서 "보고서 써줘" 또는 "운영결과 정리해줘"라고 하면 실행한다. `run.py` 메뉴 2번과 동일하다. ### 사전 확인 - `output/통합통계.xlsx`가 있으면 자동 참조 - 없으면 "먼저 '문서 취합해줘'를 실행해주세요" 안내 후 중단 ### 실행 순서 1. `school-config.md`에서 학교 정보 자동 반영 2. `output/통합통계.xlsx` 집계표 시트 데이터를 섹션별로 자동 채우기 3. 오류·확인 필요사항 시트에 미확인 항목이 있으면 보고서 생성 전 경고 출력 ``` ⚠ 확인이 필요한 항목이 N건 있습니다. output/통합통계.xlsx → [오류·확인 필요사항] 시트를 먼저 검토해주세요. 그래도 계속 진행할까요? (예 / 아니오) ``` 4. 플랜 먼저 제출 → 확인 받으면 문서 생성 5. `output/보고서_초안.hwpx` 저장 - `.hwpx` 생성 불가 시 `zipfile + XML` 방식으로 직접 생성 - 그것도 불가 시 `output/보고서_초안.docx` 로 fallback 후 사유 안내 ### 보고서 기본 섹션 (자공고2.0 양식 기준) 1. 프로그램 운영 개요 2. 참여 인원 통계 (기능 01 집계표 자동 삽입) 3. 프로그램별 운영 내용 요약 4. 성과 및 개선사항 --- ## 기능 05: 사용법 안내 "사용법 알려줘" 또는 `run.py` 메뉴 3번 실행 시 동작한다. 배포받은 선생님이 처음 실행했을 때 친절하게 안내하는 기능이다. ### 출력 내용 (터미널 또는 README.md 파일) ``` ======================================== AutoDocMerge 사용법 안내 ======================================== ■ 이 프로그램은 무엇인가요? 부서별로 따로 제출된 한글 문서(.hwp/.hwpx)와 PDF를 자동으로 읽어서 통계 엑셀과 보고서를 만들어주는 도구입니다. ■ 처음 사용하시나요? 이 순서대로 하세요. [준비] 1. school-config.md 파일을 메모장으로 열어 학교명, 담당 부서, 담당자 정보를 입력하세요. 2. sample/ 폴더에 기준이 되는 양식 파일(.hwpx) 하나를 넣으세요. → 이 파일을 기준으로 항목을 인식합니다. 3. input/ 폴더에 각 부서에서 받은 파일을 모두 넣으세요. (.hwp / .hwpx / .pdf 섞여도 됩니다) [실행] 4. run.py를 더블클릭하세요. 5. 메뉴에서 1번(문서 취합)을 선택하세요. 6. output/통합통계.xlsx 를 열어 결과를 확인하세요. 7. 오류·확인 필요사항 시트에 노란색 항목이 있으면 해당 원본 파일을 직접 열어 확인해주세요. 8. 메뉴에서 2번(보고서 생성)을 선택하면 output/보고서_초안.hwpx 가 만들어집니다. ■ 주의사항 ⚠ input/ 폴더의 원본 파일은 절대 수정되지 않습니다. ⚠ 결과물은 항상 output/ 폴더에만 저장됩니다. ⚠ sample/ 폴더가 비어 있으면 프로그램이 작동하지 않습니다. ⚠ 파일명에 부서명을 포함해주세요. 예) 교무부_해커톤.hwpx, 진로부_캠프.pdf ■ 자주 묻는 질문 Q. .hwp 파일이 안 읽혀요. A. output/처리로그.txt 를 열어 실패 사유를 확인하세요. 해당 파일만 .hwpx 또는 .pdf로 변환 후 다시 시도해보세요. Q. 항목이 빈칸으로 나와요. A. 해당 부서 파일의 양식이 기준 양식과 다를 수 있습니다. output/통합통계.xlsx → [오류·확인 필요사항] 시트를 확인하세요. Q. 보고서 글자가 깨져요. A. 한글 프로그램(HWP)에서 .hwpx 파일을 열어주세요. 없으면 output/보고서_초안.docx 파일을 사용하세요. ======================================== 문의: school-config.md 에 입력한 담당자 연락처 ======================================== ``` ### README.md 자동 생성 초기화 시 위 내용을 바탕으로 `README.md` 파일도 함께 생성한다. 배포 시 선생님들이 파일을 열어 바로 읽을 수 있도록 마크다운 형식으로 작성한다. --- ## 파일 구조 ``` AutoDocMerge/ ├── CLAUDE.md ← 이 파일 (AI 지시서) ├── school-config.md ← 학교 설정 ├── README.md ← 배포용 사용법 안내 (초기화 시 생성) ├── run.py ← 실행 진입점 (더블클릭) ├── .env ← API 키 보관 (절대 공유 금지) ├── input/ ← 부서별 제출 파일 (.hwp / .hwpx / .pdf) ├── output/ │ ├── 통합통계.xlsx ← 집계표 + 오류·확인 필요사항 + 처리로그 │ └── 보고서_초안.hwpx ← 최종 보고서 (fallback: .docx) ├── sample/ ← 기준 양식 파일 └── tools/ ├── parse_hwpx.py ← .hwpx 파서 ├── parse_hwp.py ← .hwp 파서 ├── parse_pdf.py ← .pdf 파서 ├── merge_stats.py ← 취합·통계 (기능 01) ├── make_report.py ← 보고서 생성 (기능 04) └── guide.py ← 사용법 안내 (기능 05) ``` --- ## 작업 톤 - 선생님한테 보고하듯이 결과물 전달 - "~했습니다" "~만들었습니다" 식으로 - 코드 설명 하지 않기 — 결과물과 다음 할 일만 안내 - 오류 발생 시 "어떤 파일에서 어떤 문제"인지 쉽게 설명 - 전문 용어는 괄호 안에 쉬운 설명 추가
Markdown
복사

2-3. VSCode GUI에서 단계별 실행

01 폴더 생성 (GUI로도 가능)
mkdir AutoDocMerge cd AutoDocMerge mkdir input, output, sample, tools
폴더 생성 후, 하위 폴더로 ‘input, output, sample, tools’를 각각 만들기
폴더 및 하위 폴더 현황, CLAUDE.md 파일도 함께 넣기
02 VSCode 열기
VSCode → 파일 → 폴더 열기 → AutoDocMerge 선택 오른쪽 AI 패널에서 Claude Code 아이콘 클릭
이렇게 분할화면으로 준비
03 CLAUDE.md 초기화 및 샘플파일 넣기
CLAUDE.md 내용을 프로젝트 폴더에 저장한 뒤 AI 패널에 다음과 같이 입력 CLAUDE.md 을 기반으로 초기화해줘
특이사항
school-config.md · run.py · README.md 자동 생성 확인 → school-config.md 열어서 학교 정보 직접 입력 → sample/ 폴더에 기준 양식 파일(.hwpx) 넣기 → input/ 폴더에 부서별 제출 파일 모두 넣기
반드시 파일을 해당폴더에 입력한 뒤 프롬프트 입력하기
이렇게 school-config.md파일과 run.py파일이 생기는 것을 확인한 뒤 다음단계로 진행
중간 중간 powershell에 대한 진행 여부를 물을때마다 쿨하게 ‘yes’로 진행
만약 이렇게 확인하는게 귀찮다면 claudecode의 모드를 바꾸면 됨
여기까지 문제없이 진행되었다면, 이렇게 사용자가 해야할일을 알려줌
마치 신입사원이 부장님에게 이거이거 해주세요~ 하는 느낌
혹시 모르니 폴더 구조를 체크하고, 해당 기능들이 서브기능들로 잘 구분되었는지 확인
파이썬 라이브러리를 설치하는 작업은 터미널에서 진행
04 Plan mode 전략 확인
Ask before edits 모드로 전환 후: CLAUDE.md와 sample/ 기준 양식을 먼저 읽어줘. input/ 에 .hwpx .hwp .pdf 가 섞여 있어. 기능 01 기준으로 형식별 파싱 방법과 추출 항목 계획만 먼저 보여줘. 도움될 Python 라이브러리도 조사해서 바로 설치해줘 만약 이 과정에서 승인이 불필요하다면 모드를 Edit automatically 로 변경 추천
특이사항
Claude가 계획 제출 → 항목 인식이 맞는지 검토 후 승인
작업중인 모습
특히, 자기개선 루프를 통해 오류를 스스로 잡고, 다른 해결방식을 찾는 모습이 마치 사람과 같음
만약 중간 중간 오류가 난다면?
특히 관련 라이브러리가 없어서 오류가 나는 경우가 많으므로 교차검증 + 라이브러리 설치 자동화를 프롬프트로 제시
그래. 실제 양식 기준으로 업데이트하고 기능 01 기준으로 형식별 파싱 방법과 추출 항목 오류없는지 정확히 체크해. 그리고 . 도움될 Python 라이브러리도 조사해서 바로 설치해줘
Markdown
복사
아마도 이 단계에서 엄청나게 많은 토큰을 소모할 것으로 예상됨
원래 hwp, hwpx파일이 문제가 많으니..
그래도 hwpx가 선녀임.. hwp는 퇴출되어랏!

왜 그런가?( 포맷 구조 차이)

HWP (구형)
HWPX (신형)
내부 구조
독점 바이너리 (OLE Compound)
ZIP + XML (오픈 표준)
공개 여부
비공개 독점 포맷
OWPML 표준 공개
파이썬 라이브러리
pyhwp 하나뿐 (유지보수 거의 중단)
zipfile + lxml 기본 라이브러리로 직접 파싱 가능
인코딩 문제
자주 발생
없음 (UTF-8)
텍스트 추출
CLI(hwp5txt) 우회 필요
XML 직접 읽기
표/이미지 접근
매우 어려움
XML 구조 탐색으로 가능

HWPX는 그냥 ZIP 파일

이 문구가 나온다면 test가 성공한 것임!
05 실행
Edit automatically 모드로 전환 후에 계획대로 모든 파일 수합해 또는 Ask before edits모드로 전환 후에 계획대로 실행해줘.파일 수정 전에 먼저 알려줘.필요한 패키지 설치 명령어도 같이 알려줘.
특이사항
tools/ 안에 파서 스크립트 자동 생성 → 자기 개선 루프 돌아가며 에러 자동 수정
이전까지는 프로그램을 만드는 과정이였다면, 이제는 만들어진 프로그램으로 자동화를 시작하는 단계
시작부터 밑밥을 까는 claude코드,, 왜 휴먼의 냄새가 나지?
자기개선루프는 계속 작동되고 있음
역시나 예상했듯.. hwp파일 파서는 제대로 작동이 안되니..
숨겨왔던 비장의 무기를 꺼내보자
[자기개선 루프]
AI가 스스로 생성한 출력을 다시 학습 데이터나 피드백으로 활용해서 성능을 높이는 순환 구조
모델 출력 → 평가/필터링 → 학습 데이터로 재활용 → 더 나은 모델 ↑___________________________________|
Markdown
복사
[파일 형식의 문제]
pdf로 변환하여 추출할 것이냐? vs hwpx로 저장하여 추출할 것이냐?
역시 일잘러AI는 자기가 스스로 test를 진행해 보겠다네.
역시 일잘러AI는 자기가 스스로 test를 진행해 보겠다네.
06 output/ 결과 확인
output/통합통계.xlsx 열어서 시트 3개 확인: 시트1 집계표 — 노란셀이 있으면 해당 원본 파일 직접 확인 시트2 오류·확인 필요사항 — 파싱 실패 · 양식 변형 · 항목 누락 목록 시트3 처리로그 — 파일별 성공/실패 기록
확인된 결과를 확인해보면?
예상대로 시트3개가 표시됨
그리고 사용자의 확인이 필요한 부분은 노란색 음영처리
07 추가 지시 (결과 이상 시)
양식이 변형된 파일도 있어. 항목명이 다르거나 표 구조가 바뀐 경우에도 최대한 내용을 추출하는 유연한 로직으로 만들어줘. 추출 실패 항목은 빈칸 처리하고 로그에 남겨줘.
여기까지 왔다면 90% 완성
08 보고서 생성
보고서 써줘, 보고서 생성 시작해, 보고서 진행시켜 등 (생성될 보고서는 hwpx)
특이사항
→ 오류 시트 미확인 항목 있으면 경고 출력 → 확인 후 진행 → output/보고서_초안.hwpx 생성 (불가 시 .docx fallback)
슬슬 클로드의 토큰이 걱정되기 시작함
실제 만들어진 한글수합문서 확인 결과는요??
그럴줄 알았음
그 후로 2~3번의 프롬프트를 입력했고.. 결과는?
완성된 결과는요??
이제 표형태로 만들자..회사로 치면 사수인 내가 부사수인 AI에게 정확한 설명을 하지 못한 댓가인듯??
프로젝트 하나에 pro 토큰 사용을 다 소진해버린다는 이야기가 진짜였음
한계치에 다다르면 이런 경고 메시지가 나옴
최종 결과물(사실 더 수정해야 하지만, 토큰 문제로 여기까지만..)
바이브 코딩.. 역시 끝이 없다..
09보안리뷰
전체 코드 보안 리뷰해줘. API 키나 파일 경로가 코드에 하드코딩된 곳 없는지 확인해줘.
특이사항
API키 유출 주의
귀찮더라도.. 혹시 모르니 꼭 진행해야 하는 단계
또 다시 등장하는 진행좌!

3 수정 또 수정

3-1. 자주 발생하는 문제와 대처법

문제 상황
원인
Claude에게 줄 지시
.hwp 파일 읽기 실패
hwp5 미설치 또는 바이너리 파싱 실패
"hwp 파싱 실패 시 텍스트만 추출하는 fallback 방법 써줘"
인원수 추출 오류
"43명", "24명 내외" 등 형식 불일치
"숫자만 추출하는 정규식 로직 강화해줘"
PDF 표 구조 인식 실패
스캔 PDF이거나 이미지 기반
"OCR 방식으로 텍스트 추출하는 방법도 추가해줘"
엑셀 집계 항목 누락
부서마다 항목명이 약간씩 다름
"유사 항목명 매핑 테이블을 CLAUDE.md에 추가해서 처리해줘"

3-2. MCP vs API vs skill 언제 뭘 써야 하나?

구분
API 직접 호출
MCP 서버
비유
도구를 하나씩 직접 꺼내 씀
앱스토어에서 앱 하나 깔면 기능 묶음 제공
적합한 상황
파일 처리, 자동 실행 스케줄 시스템
실시간 대화형 작업, 즉각 연동
이번 미션
hwpx/hwp/pdf 파싱, 엑셀 집계 → API
결과물 Google Drive 자동 저장 → MCP
스킬(Skill) : Claude에게 전문 지식을 주는 것. Claude Code 스킬 마켓에서 검색·설치 가능. 예: PDF 파싱 스킬, 엑셀 생성 스킬.

4 배포 및 자동 실행 (Windows)

4-1. 배포란?

워크플로우와 코드를 서버에 올려놓는 것. 이후 매뉴얼대로 시스템이 스스로 작동함. 업데이트가 필요하면 CLAUDE.md 수정 후 재배포.

4-2. CLAUDE.md 정교화

지금까지의 작업을 바탕으로 CLAUDE.md 수정 하기
지금까지의 작업을 바탕으로 CLAUDE.md를 최적화 해서 저장해. 특히 어떤 부분을 업데이트했는지 업데이트 내용.txt파일을 생성해
Markdown
복사
CLAUDE.md 를 배포하기 위한 정교화 작업
수정된 CLAUDE.md 예시
# AutoDocMerge — 업무 지시서 > 자공고2.0 부서별 프로그램 운영결과 문서를 자동 취합하고 보고서를 생성하는 AI 직원입니다. > 선생님들에게 배포할 목적으로 제작됩니다. 이 파일을 읽고 일합니다. 가볍게 유지하세요. --- ## 프로젝트 기술 스택 | 구성 요소 | 파일 타입 | 역할 | |---|---|---| | AI 지시서 | `CLAUDE.md` | Claude Code가 읽는 매뉴얼 | | 학교 설정 | `school-config.md` | 사람이 편집하는 설정 파일 | | 파서 도구 | `tools/parse_hwpx.py`| hwpx / hwp / pdf 파싱 | | 취합·통계 | `tools/merge_stats.py` | 엑셀 집계표 생성 | | 보고서 생성 | `tools/make_report.py` | hwpx 보고서 생성 | | 실행 진입점 | `run.py` | 더블클릭 실행 (비개발자용) | | 사용법 안내 | `README.md` | 배포용 설치·사용 가이드 | | 환경변수 | `.env` | API 키 보관 (절대 공유 금지) | | 의존성 목록 | `requirements.txt` | `pip install -r requirements.txt` | **배포 목표**: `run.py` 더블클릭 한 번으로 전체 실행 가능하도록 설계. --- ## 핵심 규칙 1. **플랜 먼저** — 바로 실행하지 말고 계획서 먼저 보여주기 2. **원본 파일 절대 수정 금지** — 결과물은 `output/` 폴더에만 저장 3. **파싱 실패 시 로그 기록 후 계속 진행** — 멈추지 않기 4. **`sample/` 없으면 작업 중단** — "sample/ 폴더에 기준 양식을 넣어주세요" 안내 5. **숫자 추출 시 단위 문자 제거** — '명', '시간', '일' 등 제거 후 마지막 숫자 또는 단위 직전 숫자 추출 6. **결과물은 `output/` 폴더에만 저장** 7. **비개발자 배포 전제** — 코드 설명 없이 결과물과 다음 할 일만 안내 8. **중복 파일 처리** — 동일 파일명의 hwpx+hwp 동시 존재 시 hwpx 우선 처리 --- ## 실제 양식 구조 (sample/ 분석 결과) `[양식]25년 자공고2.0 부서별 프로그램 운영결과 통계(서식).hwp` 기준 ### 표 내부 항목명 (header → FIELD_ALIASES 매핑) | 양식 항목명 | FIELD 키 | 비고 | |---|---|---| | 프로그램명 | `프로그램명` | | | 특이사항 | `특이사항` | | | 운영장소 | `운영장소` | | | 대상 | `대상학년` | "대상학년", "참가대상" 등도 매핑 | | 참가인원 | `계획참가인원` | "참가인원" 별칭 포함 | | 운영일정 | `운영기간` | "운영일정", "사업기간" 별칭 포함 | | 성취기준(강의목표) | (추출 대상 아님) | | ### 표 밖 별도 기재 항목 | 텍스트 패턴 | FIELD 키 | |---|---| | `실제 참여인원: N명` | `실제참여인원` | | `총 운영시간: N시간` | `총운영시간` | ### FIELD_ALIASES 설계 원칙 - `"프로그램"` 단독 별칭 **제외** — "프로그램 운영결과" 제목에 오매핑됨 - `"참여인원"` 단독 별칭 **제외** — "실제 참여인원"에 오매핑됨 - 숫자 필드는 단위 직전 숫자 우선 추출 (예: "43명" → 43, "2~3학년 43명" → 43) --- ## 파서 동작 방식 (기능 01) ### .hwp 파일 — parse_hwp.py ``` 1순위: hwp5proc xml → 표 셀 텍스트까지 추출 (핵심) hwp5proc 경로: APPDATA/Python/PythonXXX/Scripts/hwp5proc.exe 표 구조: <hp:tbl> → <hp:tr> → <hp:tc> → <hp:subList> → <hp:t> 2순위: hwp5txt fallback (표는 <표>로 치환 — 데이터 손실) 3순위: olefile PrvText 스트림 (UTF-16LE 디코딩) ``` **주의**: hwp5txt는 표 내용을 `<표>`로 치환하여 핵심 데이터 손실. 반드시 hwp5proc xml 우선 사용. ### .hwpx 파일 — parse_hwpx.py ``` 방식: zipfile 열기 → Contents/*.xml → ET.fromstring() → elem.text 수집 주의: ET.parse(stream) 사용 금지 — 네임스페이스 처리 오류 발생 텍스트 태그: {http://www.hancom.co.kr/hwpml/2011/paragraph}t ``` ### .pdf 파일 — parse_pdf.py ``` 1순위: pdfplumber — 표 셀 포함 텍스트 추출 (extract_tables + extract_text) 2순위: PyMuPDF(fitz) fallback ``` ### 파일 형식 우선순위 ``` 동일 파일명 존재 시: .hwpx > .hwp > .pdf ``` --- ## 기능 01: 문서 취합 · 통계 "문서 취합해줘" 또는 "통계 내줘"라고 하면 실행한다. ### 출력물 — `output/통합통계.xlsx` (시트 3개) **시트 1: 집계표** | 부서명 | 프로그램명 | 운영장소 | 대상학년 | 계획참가인원 | 실제참여인원 | 총운영시간 | 운영기간 | 특이사항 | - 추출 실패 항목은 빈칸 + 노란색 배경 - 마지막 행: 숫자 필드 합계 **필수 항목** (빈칸 시 오류시트 기록): 프로그램명, 운영장소, 대상학년, 운영기간 **선택 항목** (없어도 오류 아님): 총운영시간, 특이사항 **시트 2: 오류·확인 필요사항** | 파일명 | 부서명 | 오류유형 | 상세내용 | 확인필요항목 | 오류 유형: `파싱 실패` / `항목 누락` / `양식 변형` / `값 이상` **시트 3: 처리로그** | 파일명 | 처리시각 | 결과 | 사용파서 | 비고 | ### 부서명 추출 규칙 1. 파일명에 `_` 포함 → `_` 앞 텍스트 (예: `교무부_해커톤.hwpx``교무부`) 2. 파일명에 `_` 없음 → 마지막 괄호 안 텍스트 (예: `...(사제동행 독서토론).hwp``사제동행 독서토론`) - `"보고서 작성용"` 같은 행정 표현은 제외 --- ## 기능 04: 연구학교 보고서 "보고서 써줘" 또는 "운영결과 정리해줘"라고 하면 실행한다. ### 사전 확인 - `output/통합통계.xlsx`가 없으면 중단 후 안내 - 오류·확인 필요사항이 있으면 계속 진행 여부 확인 ### hwpx 생성 방식 ``` 1. input/*.hwpx 중 첫 번째 파일을 베이스 템플릿으로 사용 2. Contents/section0.xml 교체 (secPr 첫 단락은 보존) 3. Preview/PrvText.txt 교체 4. BinData/(이미지) 제외 5. 나머지 파일 그대로 복사 ``` ### section0.xml 핵심 구조 규칙 ``` hs:sec (루트) └── hp:p (첫 단락: secPr — 페이지 설정, 반드시 템플릿에서 복사) └── hp:p (텍스트 단락) └── hp:run [charPrIDRef="0~12"] └── hp:t └── hp:linesegarray └── hp:p (표를 담는 단락) └── hp:run [charPrIDRef="0"] └── hp:tbl ← 반드시 hp:p > hp:run 안에 위치! [hp:sz, hp:pos(treatAsChar="1"), hp:outMargin, hp:inMargin] └── hp:tr └── hp:tc [borderFillIDRef="3"] └── hp:subList └── hp:p > hp:run > hp:t └── hp:cellAddr, hp:cellSpan, hp:cellSz, hp:cellMargin └── hp:linesegarray (vertsize = 표 높이 추정값) ``` **금지사항**: - `hp:tbl``hs:sec` 직접 자식으로 놓으면 표가 보이지 않음 - `hp:td` 사용 금지 — hwpx는 `hp:tc` 사용 - `borderFillIDRef`는 해당 템플릿의 header.xml에 정의된 ID만 사용 (공학스쿨.hwpx: 1~5) - `charPrIDRef`는 템플릿 header.xml 정의 범위 내 사용 (공학스쿨.hwpx: 0~12) - `ET.parse(stream)` 사용 금지 → `ET.fromstring(raw.decode(...))` 사용 ### 보고서 기본 섹션 1. 프로그램 운영 개요 (학교명, 담당자, 총계) 2. 프로그램별 운영개요 표 × N개 (프로그램명/특이사항/운영장소/대상/참가인원/운영일정) 3. 성과 및 개선사항 (담당자 직접 작성) --- ## 기능 05: 사용법 안내 "사용법 알려줘" 또는 `run.py` 메뉴 3번 실행 시 동작. --- ## 파일 구조 ``` AutoDocMerge/ ├── CLAUDE.md ← 이 파일 (AI 지시서) ├── school-config.md ← 학교 설정 (담당자·연락처는 배포 시 빈칸) ├── README.md ← 배포용 사용법 안내 ├── run.py ← 실행 진입점 (더블클릭) ├── requirements.txt ← pip install -r requirements.txt ├── .gitignore ← .env, output/, __pycache__/ 등 제외 ├── .env ← API 키 보관 (절대 공유 금지, 현재 미사용) ├── input/ ← 부서별 제출 파일 (.hwp / .hwpx / .pdf) ├── output/ │ ├── 통합통계.xlsx ← 집계표 + 오류시트 + 처리로그 │ └── 보고서_초안.hwpx ← 최종 보고서 ├── sample/ ← 기준 양식 파일 (.hwp 또는 .hwpx) └── tools/ ├── parse_hwpx.py ← .hwpx 파서 (ET.fromstring 방식) ├── parse_hwp.py ← .hwp 파서 (hwp5proc xml 우선) ├── parse_pdf.py ← .pdf 파서 (pdfplumber 우선) ├── merge_stats.py ← 취합·통계 (기능 01) ├── make_report.py ← 보고서 생성 (기능 04) └── guide.py ← 사용법 안내 (기능 05) ``` --- ## 알려진 한계 및 대응 | 상황 | 원인 | 대응 | |---|---|---| | hwp 파일 표 데이터 일부 누락 | hwp5proc xml이 일부 표 구조를 `<hp:tc>` 대신 다른 형태로 저장 | odt 변환 후 재시도 또는 수동 입력 | | hwpx 텍스트 추출 실패 | ET.parse(stream) 네임스페이스 오류 | ET.fromstring 사용 (이미 수정됨) | | 양식 변형 파일 항목 누락 | 자유 서술 형식 또는 항목명 상이 | 오류시트 확인 후 수동 입력 | | hwpx 보고서에 표 배경색 없음 | header.xml에 정의된 BorderFill ID만 사용 가능 | 한글에서 직접 서식 적용 | | 보고서 저장 PermissionError | 파일이 한글에서 열려 있음 | 한글을 먼저 닫고 재실행 | --- ## 보안 주의사항 - `.env` 파일은 `.gitignore`에 포함됨 — 절대 공유·커밋 금지 - `school-config.md` 배포 시 담당자·연락처 빈칸 확인 - `output/` 폴더는 `.gitignore`에 포함 — 개인정보 포함 가능 - `subprocess` 호출 시 리스트 형태 사용 (셸 인젝션 방지됨) - XML 파싱 시 학내 파일만 처리 (XXE 위험 현실적으로 낮음) --- ## 작업 톤 - 선생님한테 보고하듯이 결과물 전달 - "~했습니다" "~만들었습니다" 식으로 - 코드 설명 하지 않기 — 결과물과 다음 할 일만 안내 - 오류 발생 시 "어떤 파일에서 어떤 문제"인지 쉽게 설명 - 전문 용어는 괄호 안에 쉬운 설명 추가
Markdown
복사

5. 최종 정리

5-1. 내가 해야 할 것 vs Claude가 하는 것

모를 때: '이 목록 중에 네가 할 수 있는 건 뭐야?' 라고 물어보기.
내가 해야 하는 것
Claude가 하는 것
부서별 파일 input/ 폴더에 넣기
파일 형식 자동 판별 + 파싱
sample/ 에 기준 양식 파일 넣기
양식 기준으로 항목 추출 로직 작성
필요한 패키지 설치 (Claude가 알려줌)
엑셀 집계표 자동 생성
Windows 작업 스케줄러 최종 등록
처리 로그 생성 + 오류 파악·수정

5-2. 최종 체크리스트

업무를 입력→처리→판단→출력 형태로 먼저 글로 정리
CLAUDE.md 을 생성
sample/ 폴더에 기준 양식 파일 반드시 넣기 (Claude의 항목 인식 기준)
CLAUDE.md.hwpx / .hwp / .pdf 3가지 형식 처리 방법 모두 명시 되도록 .hwpx 파일만으로 자동화 작업을 수행하는 것을 추천
새 기능은 반드시 Plan mode로 시작 → 계획 확인 후 실행
모르면 Claude에게 바로 물어보기 ("내가 이해할 수 있게 설명해줘")
API 키는 .env 파일에만 저장 — 코드에 절대 하드코딩 금지
완료 후 보안 리뷰 요청
컨텍스트 70% 차면 /clear 초기화
자동화는 도구가 먼저가 아님. 내 업무 중 반복되는 것이 무엇인지 먼저 파악하는 것이 시작. 그게 보여야 자동화할 것도 보임.