6.2 KiB
6.2 KiB
7교시 바이브 코딩 · tlog 정답본
강사용 정답본 · 학생 저장소에는 수업 뒤에 올립니다. 학생용: VIBE-REQ-TLOG.md → VIBE-Q-TLOG.md. 강사가 직접 만든 본: tlog/ (테스트 23개,
uv tool install --editable .). 아래 숫자는 2026-10-31 강사 Mac에서 77일차 데이터 API와 n8nmy-log-report(Lab 03 예제 2 정답)에 실제로 돌린 값입니다. 68일차부터 바이브 코딩은 CLI 에이전트로 다시 만들어 재지 않습니다 (요청문은 예시).
1. TODO 예 (요청의 말 → 할 일)
| # | 요청의 말 | 할 일 (내 말) | 꼭 · 나중 |
|---|---|---|---|
| ① | 파일 · API, 기간 · 태그, 끝날 포함 | --file · --url, --from · --to(포함) · --tag · --source |
꼭 |
| ② | n8n과 똑같은 숫자 | AGENTS.md 3절 정의 그대로, 반올림까지 JavaScript와 같게, 0건이면 0 | 꼭 |
| ③ | 원인으로 묶기 · 넘긴 주제 · 다시 묻는 주제 | problems: failures · unanswered_topics · repeat_topics |
꼭 |
| ④ | 평소보다 나빴던 시간 | 5건 · 3배 · 1건 이상, 시간순 | 꼭 |
| ⑤ | JSON, 같은 칸 이름 | --json = my-log-report 응답과 같은 칸 |
꼭 |
| ⑥ | 단계 · 비용 | steps(값 > 0만) · cost_usd · cost_per_run · llm_calls |
나중 |
| ⑦ | SLO · 종료 코드 | slo, 기준 바꾸기, 위반이면 4 |
꼭 |
| ⑧ | 지난주와 나란히 | compare |
나중 |
| ⑨ | tretry 기록 | 시도 줄 → 실행 한 줄 | 나중 |
| ⑩ | 주간 보고 마크다운 | weekly (LLM 없음) |
나중 |
| ⑪ | 화면 | ui: 요약 · 묶음 · 그 실행들 · [t] |
꼭 |
| ⑫ | 종료 코드 | 0 · 1 · 2 · 4 | 꼭 |
| 끝 | n8n 없이 시험 · 같은 숫자 확인 | 두 주 사본 · 가짜 데이터 API | 꼭 |
2. 요청문 (처음 한 번 + 다음 단계 한 줄)
단계마다 긴 요청문을 쓰지 않습니다. 할 일은 이미 Doc/SPEC.md · Doc/IMP-PLAN.md에 있으니, 에이전트가 그 파일을 읽게 하면 됩니다.
처음 한 번
Doc/SPEC.md 와 Doc/IMP-PLAN.md 를 읽고 체크 안 된 첫 단계만 만들어 줘. uv 프로젝트, 명령 이름 tlog, 코드와 화면 글자는 영어.
끝나면 IMP-PLAN 체크를 표시하고 확인 명령을 알려 줘. 다음 단계는 내가 말할 때까지 하지 마.
그다음 단계마다 (같은 한 줄)
확인했고 commit 했어. 다음 단계.
- 그냥 "계속"만 치면 단계 두세 개를 한꺼번에 하거나 체크 · 확인 명령을 빼먹기 쉽습니다. 이 한 줄은 처음 요청의 약속(한 단계만 · 체크 · 확인 명령 · 멈춤)을 이어 가게 합니다.
- 대화가 길어지면 새 세션에서 처음 요청을 다시 보냅니다. "체크 안 된 첫 단계"부터 이어집니다.
- 에이전트가 단계 내용을 잘못 알았다면, 요청문을 길게 쓰기보다 SPEC · IMP-PLAN을 고치고 다시 시킵니다.
틀렸을 때만 · 고쳐 달라는 요청문 예
무엇이 틀렸나(보인 것) · SPEC의 어느 요구인가 · 어디만 고치나 · 무엇으로 확인하나, 넷을 적습니다.
tlog summary 가 두 주(10/19~10/30)를 602 runs 라고 해. n8n my-log-report 는 666 이야. SPEC R1 대로 끝날도 넣어야 해 (from <= started_at[:10] <= to).
load.py 의 날짜 거르기만 고치고, 10/30 하루만 물으면 64 runs, 두 주 666 인 테스트를 넣어 줘. 다른 파일은 건드리지 마.
3. 확인 기준과 강사 실측 (10/31, 77일차 데이터 API)
| 요구 | 기준 | 실측 |
|---|---|---|
| R1 | 파일 · API, 날짜 포함 | API 10/26 하루 → 70 · 16, --source live → 오늘 기록만 (가짜 서버 테스트) |
| R2 | 두 주 | 666 runs · errors 21 (3.15%) · p50 1205ms · p95 2537ms, 갈래 591 · 34 · 20 · 21 |
| R2 | 빈 기간 11/02~11/06 | 0 · 0 · 0 (n8n과 같음) |
| R3 · R4 | tlog problems 두 주 |
16 Search FAQ timeout · 5 Answer 429 · 와이파이 34 · 09시 16/16 · 15시 5/7 · 프린터 9.88% (8/81) |
| R5 | 같은 기간 my-log-report와 칸 비교 |
두 주 · 둘째 주 · 10/26 · 빈 기간 네 번 모두 18칸 중 다른 칸 0개 |
| R6 | 단계 · 비용 | FAQ p95 39 (646) · 답 p95 2509 (596) · 0.07836달러 · 0.000118 · 596 |
| R7 | tlog slo 둘째 주 |
SLO breach: error_rate, unanswered_rate · 종료 코드 4, 첫 주 --unanswered 0.06 → SLO ok · 0 |
| R8 | tlog compare 첫 주 → 둘째 주 |
total 309 → 357 (+48), error_rate 0 → 0.0588, p50 1252 → 1171 (−81), p95 2525 → 2598 (+73) |
| R9 | tretry 기록 (scratch 파일, 시도 7줄) | 3 runs · errors 1 (33.33%), 갈래 오류 1 · 성공 1 · 대체 1, 실패 묶음 command · exit 1 |
| R10 | tlog weekly |
숫자 표가 n8n my-weekly와 같음 (| 요청 | 309 | 357 | · 0% → 5.88% · SLO 못 지킴 둘) |
| R11 | run_test |
요약 줄 666 runs · errors 21, 묶음 2줄(16 · 5), 오른쪽 16 → 5줄, t → 2026-10-26T09 |
| R12 | 인자 없음 · 출처 없음 · 없는 파일 | 2 · 2 · 1 |
| R13 | uv run pytest -q |
23 passed in 1.7s |
| R14 | /tmp에서 tlog --help |
usage: tlog [-h] {summary,problems,slo,compare,weekly,ui} ..., tlog summary --url … 0.08초 |
- 수업 준비 때 찾은 실수 둘 (학생도 겪기 쉬움): ① Python
round는 짝수 쪽으로 반올림해 n8n(JavaScriptMath.round)과 반에 걸린 값이 달라질 수 있어js_round로 맞춤. ②$TLOG_URL을 정해 둔 채--file을 주면 API를 읽던 것 → 파일이 먼저.
4. 7교시에 볼 것
| 볼 것 | 막혔을 때 한마디 |
|---|---|
| 숫자가 n8n과 다름 | "어느 칸이 · 얼마로 다른지 붙여 주고, AGENTS.md 3절 정의 그대로" |
| 빈 기간에 오류 | "0건이면 0" |
| 파일 · API의 숫자가 다름 | "거르기 규칙을 데이터 API와 같게 (끝날 포함)" |
| 테스트가 진짜 API를 부름 | "가짜 서버로, 진짜는 확인 단계에서만" |
| 세는 코드가 여기저기 | "metrics.py 한 곳" |
slo가 늘 0 |
"크면 위반, 위반이면 4" |
| tretry 시도를 실행으로 셈 | "final 줄까지 묶기" |