더플레이컴퍼니 PPT 제안서 생성기의 3단계 진화 과정을 통해 백엔드, 프론트엔드, 데이터베이스, LLM 활용의 핵심 개념을 이해합니다
제안서 생성기의 기능을 4개 블록으로 분해하면 이렇습니다 v0.3 기준
수작업 30분 → 버튼 1번 → 자연어 1줄. AI 에이전트가 주도하는 서비스 빌드업 과정
v0.2와 v0.3은 같은 generate_proposal() 함수를 호출합니다. 한 글자도 안 바뀌었어요.
그래서 다운로드한 PPT가 동일합니다. 다른 건 "결과를 만드는 방식"입니다.
한 사람이 주문도 받고, 요리도 하고, 서빙도 함.
손님이 늘면 줄 서야 함.
메뉴 바꾸려면 식당 문 닫고 전체 수정.
배달앱 연동 불가 — 전화 주문만.
주방(FastAPI)은 요리 전담, 홀(Next.js)은 응대 전담.
손님 많아지면 홀만 확장.
인테리어 바꿔도 주방은 그대로.
배달앱이 주방에 직접 주문 (REST API).
개발 단계에서 가장 중요한 작업이 '결과는 그대로 두고 내부 구조만 바꾸는 것'
이걸 리팩토링(refactoring)이라고 합니다.
| 항목 | v0.2 | v0.3 |
|---|---|---|
| 다른 시스템에서 호출 | 불가능 | POST /api/generate-proposal |
| 모바일에서 사용 | 불편 (Streamlit) | 반응형 자동 |
| CRM 연동, Slack 봇 | 불가 | API 한 줄 |
| 디자인 변경 | Streamlit 한계 | CSS 자유 |
| 버전 업데이트 | 전체 재배포 | 백/프론트 독립 |
| 다음 단계 (v0.4) 진행 | 전체 갈아엎기 | 라우터 1개만 추가 |
Claude는 '똑똑한 어시스턴트'가 아니라, 서비스의 한 부품(모듈)으로 작동합니다
지금은 내 컴퓨터(localhost)에서만 돌아갑니다. 배포하면 누구나 접속할 수 있습니다.
컴퓨터를 켜야만 접속 가능. 같은 와이파이만 가능. 꺼면 끝.
theplay-proposal.vercel.app 같은 주소로 24시간 접속. 프론트는 Vercel, 백엔드는 Railway/AWS.
개발자가 코드 작성 → 테스트 → 버그 수정 → 반복. 1주일
Claude Code에게 지시 → 병렬 에이전트가 3개 파일 동시 작성 → 자동 테스트 → 결과 검증. 수 시간
이 보고서에 나온 v0.1→v0.3 전체 진화는 Claude Code 단일 세션에서 수행되었습니다. 3개 파일을 병렬 에이전트로 동시 수정하고, AI 텍스트 유실 버그를 자동 발견·수정하고, 프론트엔드/백엔드 아키텍처를 한 번에 전환했습니다.
만약 v0.1 모놀리식이었다면 견적서를 추가하려면 Streamlit 페이지를 갈아엎어야 했을 겁니다.
v0.3에서 우리는 backend/routers/ 안에 estimate.py 한 파일만 추가하면 됩니다.
프론트엔드도 /estimate 페이지 1개만 추가. 기존 제안서 빌더는 한 줄도 안 바뀝니다.
견적 로직을 어디에 넣지? Streamlit 새 탭? 기존 코드 영향은? 디자인 통일은? 2~3주
routers/estimate.py 추가 + /estimate 페이지. 기존 코드 무영향. 2~3일
"모듈화는 미래의 기능을 위한 보험" — 처음에 잘 나누면 나중에 무한히 확장할 수 있습니다.
PPT 고정 아웃풋 → HTML 유연 아웃풋 → PDF/PPT 하이브리드. 결과물의 형태가 바뀌면 시스템 전체가 바뀝니다.
• ZIP 파일을 열어 XML을 직접 수술 (99줄)
• 텍스트 박스 고정 크기 → AI 텍스트 ±10% 글자 수 강제
• 견적 테이블 4열 고정 → 열 추가 불가
• 템플릿 디자이너가 슬라이드 순서 바꾸면 전체 코드 수정
• PDF 변환: LibreOffice 30~60초
생성 시간: 35~70초
• Jinja2 템플릿 렌더링 (20줄 핵심 로직)
• 텍스트 자동 리플로우 → AI가 자연스럽게 작성
• 테이블 열/행 자유롭게 추가
• CSS 변수 1곳 수정 → 전체 브랜딩 변경
• PDF 변환: Playwright 2~5초
생성 시간: 3~10초 (7배 빠름)
HTML — 웹 브라우저에서 바로 열어 확인. URL로 공유 가능.
PDF — Playwright(headless Chrome)로 2~5초 만에 변환. 인쇄용.
편집 가능 PPT — dom-to-pptx 라이브러리로 DOM을 네이티브 PPTX로 변환. 모든 텍스트 박스 클릭해서 수정 가능.
사람이 매번 확인하지 않아도, AI 에이전트가 결과물을 PDF로 변환해서 직접 보고 문제를 발견하고 수정합니다.
| 발견된 문제 | 원인 | 수정 |
|---|---|---|
| AI 텍스트 유실 (363자 → 53자) | PPT 텍스트 박스에 맞추려고 글자 수를 줄임 | 실제 슬라이드 텍스트를 AI에 전달하여 동일 길이로 재작성 |
| 간지에 코드 ID 노출 (check_in, team_maker) | auto_selector의 rationale을 그대로 사용 | AI가 생성한 proposal_background로 대체 |
| 견적서 슬라이드 위치 오류 | 하드코딩된 인덱스 (len-3) | ordered_slides.index()로 정확한 위치 계산 |
| AI 응답 JSON 잘림 (7모듈+) | max_tokens=4096 부족 | 16384로 증가 + 잘린 JSON 복구 로직 추가 |
사람이 PPT를 열어서 슬라이드 하나하나 확인.
텍스트 넘침, 유실, 오타를 눈으로 찾음.
모듈 4개 기준 10~15분
HTML → PDF 자동 변환 → 에이전트가 PDF 열람.
슬라이드별 글자 수 비교, 오버플로우 감지, 맥락 키워드 검증.
자동, 30초
© 2026 theplaycompany. Agentic Coding Report — Generated with Claude Code