Files

3.7 KiB

7교시 바이브 코딩 · tkit 만들기

강사용 정답본 · 학생 저장소에 올리지 않습니다. 학생용 문제는 VIBE-Q-TKIT.md. 68일차부터 바이브 코딩 프로그램은 수업 준비 때 미리 만들어 보지 않습니다. 아래 요청문과 확인 기준은 예시이고, 걸린 시간은 8교시 강사 바이브 코딩에서 재어 기록합니다.

확인 기준

요구 기준
R1 가짜 템플릿 테스트: {{ name }}은 바뀌고 {{ $json.body.facts }}는 그대로. 파일 이름 {{ name }}.json → training-mail.json
R1 숫자 변수 max_length: 400이 JSON에서 400(숫자)
R2 max_length=abc → 오류, 필수 webhook_path 빈칸 → 오류, webhook_path=my mail → 오류(빈칸)
R3 두 번째 만들기에서 "이미 있음" 목록, 아무 파일도 바뀌지 않음
R5 만든 JSON json.loads 성공. Lab 폴더의 flow.py check 통과

단계별 요청문 예

1. 글자 모드

~/vibe/tkit 에 Python 프로젝트를 만들어 줘. uv 사용, 명령 이름 tkit, 코드와 화면 글자는 영어.
이번 단계는 TUI 없이 `tkit render <template_dir> --set k=v ... --out <dir>` 만.
- 템플릿 = 폴더. template.yaml: variables: [{name, description, default, type: str|int|path_slug, required}].
- 템플릿 변수 표시는 [[ name ]] 로 한다 (n8n 표현식 {{ }} 와 겹치지 않게). 파일 내용과 파일·폴더 이름 모두.
  정의되지 않은 [[ x ]] 가 남으면 오류.
- int 변수는 따옴표 없이 들어갈 자리에 쓰도록 템플릿에서 정한다 (예: "max_length": [[ max_length ]]).
- tkit/template.py: 읽기·검사·채우기 (파일 쓰기 없이 {경로: 내용} 돌려줌). tkit/cli.py: 쓰기.
- pytest: tests/data/fake-template 으로 변수 치환, {{ $json }} 보존, 파일 이름 치환, int, 정의 안 된 변수 오류.

2. 미리 보기 · 덮어쓰기 · 검사

- tkit render 에 --dry-run: 만들 파일 목록과 내용 앞 20줄만 출력.
- out 폴더에 같은 파일이 있으면 만들지 않고 목록을 보여 주고 끝 (--force 일 때만 덮어씀).
- 변수 검사: int 는 숫자, path_slug 는 [a-z0-9-]+, required 는 비면 안 됨. 모든 오류를 한 번에 보여 줌.
- 만든 .json 은 json.loads 로 확인. --check-cmd "uv run tools/flow.py check {file}" 를 주면 그 명령을 out 폴더 기준으로 실행해 결과를 보여 줌.

3. TUI

Textual TUI: 왼쪽 템플릿 목록(인자로 준 폴더의 하위 폴더), 오른쪽 template.yaml 변수마다 Input(설명은 placeholder, 기본값 채움).
[미리 보기] 는 --dry-run 과 같은 내용을 아래 패널에, [만들기] 는 render. 오류는 칸 옆에 빨간 글자.
template.py 를 그대로 다시 써. 화면 테스트는 run_test 로 하나.

템플릿 예 (~/vibe/templates/n8n-notice-kit/template.yaml)

variables:
  - {name: name, description: "file name", type: path_slug, required: true}
  - {name: webhook_path, description: "n8n webhook path", type: path_slug, required: true}
  - {name: prefix, description: "title prefix", type: str, default: "[안내]"}
  - {name: max_length, description: "max characters", type: int, default: 600}

7교시에 볼 것

볼 것 막혔을 때 한마디
n8n 표현식까지 바뀌어 JSON이 깨짐 "템플릿 변수 표시를 다른 모양으로"
숫자가 "400"(글자)으로 들어감 "int 변수는 따옴표 없는 자리에"
만들 때마다 덮어씀 "있으면 멈추고 알려 주게"
화면 코드에 변수 이름이 박힘 "template.yaml 에서 입력칸을 만들게"