GrepBoard/매뉴얼
84 편 ·

뻔한 SWOT 대신 검증할 가정 질문 뽑기

·고침 ·claude-sonnet-5-5 · 2026-10-20 실행 (ChatGPT 는 돌리지 못해 Claude 로 실행)·6 단계

SWOT 을 시키면 어느 사업에나 붙는 말이 섞여 회의에 쓰기 어렵습니다. 계획서 문장을 인용한 가정 질문 6개와 확인 방법을 표로 받고, 인용을 스크립트로 대조합니다.

「SWOT 분석해 줘」 한 줄이면 칸은 채워집니다. 그런데 회의에서 「그걸 어떻게 확인하죠?」 하고 물으면 답이 없습니다. 같은 계획서를 두 방식으로 시킨 결과입니다.

[1] 입력은 가상의 반찬 정기배송 계획 요약입니다. 질문이 계획서에 붙으려면 숫자가 있어야 해서 넣었습니다.

plan.ko.txt
[사업 계획 요약] 집밥 반찬 정기배송 (가칭)1. 목표 고객: 서울 동남권 아파트 단지에 사는 30~40대 맞벌이 가구. 평일 저녁 준비에 쓰는 시간을 줄이고 싶어 한다.2. 상품: 매주 목요일 반찬 5종(1~2인분씩)을 냉장 상태로 정기배송. 구독 가격은 주 29,000원.3. 배송 반경: 자체 주방에서 차로 30분 이내 지역만 배송한다. 배송은 외주 기사 2명이 맡는다.4. 수요: 첫 달 구독자 120가구, 이후 월 20%씩 늘어난다고 본다.5. 재구매: 가입 가구의 70%가 3개월 뒤에도 구독을 유지할 것으로 예상한다.6. 원가: 주문당 식재료 비용은 매출의 38%, 배송비는 주문당 3,500원으로 잡았다.7. 일정: 다음 분기에 시범 단지 3곳에서 시작한다.

[2] 짧게 시킵니다. 「아래 사업 계획의 SWOT 분석을 해 주세요.」 뒤에 계획서를 붙여 실행했습니다. 일부만 옮깁니다.

output
## 약점 (Weaknesses)- **얇은 마진 구조**: 주문당 매출 29,000원에서 식재료 약 11,000원(38%)과 배송비 3,500원을 빼면 약 14,500원이 남습니다. … 계획에는 이 항목들이 빠져 있습니다.…## 위협 (Threats)- **강한 경쟁자**: 대형 새벽배송 업체, 반찬 전문 구독 서비스, 편의점·마트 반찬 코너, 배달앱이 있고 가격과 편의성 경쟁이 치열합니다.- **식품 안전 리스크**: 냉장 유통 중 온도 이탈이나 식중독 사고는 소규모 브랜드에 치명적입니다. …

약점에는 계획서 숫자로 마진을 따져 본 항목이 있습니다. 그러나 위협·기회에는 다른 반찬 업체 계획서에도 붙는 문장이 많고, 항목마다 어느 문장에서 나왔는지, 무엇을 보면 맞고 틀린지가 없습니다.

[3] 틀을 바꿉니다. SWOT 을 금지하고 「이 계획이 성공하려면 사실이어야 하는 것」을 질문으로 뽑게 하며, 칸을 근거 문장 · 확인 방법 · 기준값으로 고정합니다. 계획서를 <plan> 태그로 프롬프트에 직접 넣는 것은 모델이 이 가게의 숫자를 모른다는 전제 때문입니다. Gemini API 프롬프트 가이드 가 말하는, 필요한 맥락을 프롬프트에 넣으라는 원칙입니다.

head.ko.txt
아래 <plan> 안의 사업 계획을 검토합니다. SWOT 을 쓰지 말고, 이 계획이 성공하려면 사실이어야 하는 가정을 질문으로 뽑아 주세요. 규칙:- 질문은 정확히 6개. 모두 이 계획서의 숫자나 조건을 건드려야 합니다. 어느 사업에나 붙는 질문(브랜드 인지도, 경쟁 심화 등)은 쓰지 않습니다.- 각 질문마다 표의 열은 정확히 이렇게: 번호 | 질문 | 근거 문장 | 확인 방법 | 기준값- 근거 문장은 계획서에서 글자 그대로 복사한 한 구절입니다(요약하거나 고치지 않습니다).- 확인 방법은 데이터를 보거나 실험을 하는 구체적인 행동 한 가지, 기준값은 그 결과가 어떻게 나오면 가정이 깨지는지 숫자로 씁니다.- 계획서에 없는 숫자는 만들지 않습니다. 필요하면 「계획서에 없음」이라고 씁니다.- 표만 출력하고 다른 말은 쓰지 않습니다. <plan>

[4] 계획서와 닫는 태그를 붙여 실행합니다.

console
$ (cat head.ko.txt plan.ko.txt; echo "</plan>") > prompt.ko.txt$ claude -p --model claude-sonnet-5-5 --max-turns 1 --tools "" --setting-sources "" --strict-mcp-config < prompt.ko.txt > out.ko.1.txt

둘째 결과의 6행 중 4번만 옮깁니다.

output
| 번호 | 질문 | 근거 문장 | 확인 방법 | 기준값 ||---|---|---|---|---|…| 4 | 1~2인분씩 5종을 소량 조달하고 폐기까지 포함해도 식재료비가 매출의 38% 안에 들어오는가? | 주문당 식재료 비용은 매출의 38% | 자체 주방에서 5종 메뉴를 시험 생산하고, 구매 영수증과 폐기량을 합산해 주문당 식재료비를 계산한다. | 주문당 식재료비 11,020원(29,000×38%) 초과면 깨짐 |

11,020 은 29,000 × 0.38 로 다시 계산해도 맞습니다. 두 번 돌린 결과는 질문 구성이 조금 달랐습니다. 첫 번째에는 「시범 단지까지 30분 이내로 가는가」 가 있고, 둘째에는 「기사 1명이 60건을 처리할 수 있는가」 가 들어갔습니다.

[5] 근거 문장 칸이 계획서에 실제로 있는지 대조합니다. 확인 방법·기준값 칸이 비었거나 기준값에 「계획서에 없음」 이 들어간 행도 같이 표시합니다.

check.py
import sysplan = " ".join(open(sys.argv[1], encoding="utf-8").read().split())rows = [[c.strip() for c in l.strip().strip("|").split("|")]        for l in open(sys.argv[2], encoding="utf-8") if l.strip().startswith("|")]rows = [r for r in rows if len(r) == 5 and not set("".join(r)) <= set("-: ")][1:]for num, q, quote, how, thr in rows:    p = []    if " ".join(quote.split()) not in plan: p.append("quote not in plan")    if not how or not thr: p.append("empty cell")    if "계획서에 없음" in thr: p.append("review: not in plan")    print("OK   " if not p else "CHECK", num, "; ".join(p))
console
$ python3 -I check.py plan.ko.txt out.ko.2.txtOK    1OK    2OK    3OK    4OK    5CHECK 6 review: not in plan

인용 6개는 모두 계획서에 있습니다. 첫 번째 결과는 6행 모두 OK 였습니다. 둘째 결과의 CHECK 는 인용이 아니라 6번 기준값 칸에 「계획서에 없음」(시간당 처리 한도)이 적힌 행입니다. 이 표시는 버릴 이유가 아니라 계획서에 빠진 숫자를 알려 주는 것이니 회의 숙제로 남깁니다. 1번 근거 문장을 손으로 「…주 29,000원 이다.」 로 바꾼 시험 파일에서는 1번 행에 quote not in plan 이 나왔습니다.

[6] 스크립트가 못 보는 것을 읽습니다. 근거 문장 칸만 대조하므로 질문과 기준값은 사람이 읽습니다. 이번 두 결과의 기준값은 계획서 숫자에서 바로 나온 값(70% 미만, 144가구, 60건)이었고, 계획서에 없는 숫자가 필요한 곳에는 모델이 「계획서에 없음」 이라고 적었습니다. 그래도 둘이 남습니다.

  • 기준값이 계획서의 숫자를 그대로 되풀이합니다. 「70% 미만이면 깨짐」 은 70% 가 합당한 목표인지는 말해 주지 않습니다.
  • 계획서 안의 숫자만 건드리게 시켰으니, SWOT 에 나왔던 경쟁·식품 안전·인허가는 질문에 한 줄도 없습니다. 그 위험은 따로 챙깁니다.

#swot#planning#assumptions#chatgpt