5.8 KiB
7교시 바이브 코딩 · turl 만들기
- 시간: 16:00~16:50 (50분) · 발표와 정리는 8교시
- 도구: CLI 코딩 에이전트(codex / claude / agy), Python + uv + Textual, httpx
- 결과물: 터미널에서 HTTP 요청을 만들고 보내고 응답을 보는 TUI (
curl을 화면으로). 오늘 만든my-meeting웹훅을 이 도구로 불러 봅니다.
$ turl
┌ turl ──────────────────────────────────────────────────────────────┐
│ [POST ▾] [ http://localhost:5678/webhook/my-meeting ] [보내기] │
│ ┌ Body ┬ Headers ┬ History ┐ ┌ 응답 · 200 · x.xs ─────────────┐ │
│ │ {"title": "10월 16일 …", │ │ { │ │
│ │ "notes": "참석: …"} │ │ "title": "10월 16일 주간 회의",│ │
│ │ │ │ "count": 4, … │ │
│ └───────────────────────────┘ └─────────────────────────────────┘ │
│ [파일에서 Body 불러오기] [curl 명령으로 복사] │
└────────────────────────────────────────────────────────────────────┘
요청문은 직접 씁니다. 단계마다
▶를 펼치면 생각할 거리가 나옵니다. 정답 요청문은 없습니다.
요구 사항
| 번호 | 요구 | 확인 방법 |
|---|---|---|
| R1 | 메서드(GET·POST·PUT·DELETE), URL, 헤더, Body를 정해 보내고, 응답의 상태 코드 · 걸린 시간 · 본문(JSON이면 보기 좋게)을 보여 준다 | turl에서 my-meeting에 weekly.json |
| R2 | Body를 파일에서 불러온다 (오늘 Lab의 requests/*.json) |
requests/weekly.json 불러오기 |
| R3 | 보낸 요청을 기록(History)에 남기고, 고르면 다시 불러온다. 프로그램을 껐다 켜도 남는다 | 껐다 켜기 |
| R4 | 지금 요청을 curl 명령으로 만들어 준다 (복사해 터미널에서 그대로 실행되게) |
만든 명령을 터미널에 붙여 실행 |
| R5 | 잘못된 URL, 응답 없음(시간 초과), JSON이 아닌 응답에서도 멈추지 않고 알려 준다 | 꺼진 주소로 보내기 |
진행 (50분)
flowchart LR
S0["0. 준비<br/>3분"] --> S1["1. 글자로 보내기<br/>R1 · 12분"] --> S2["2. TUI<br/>R1·R2 · 15분"] --> S3["3. 기록 · curl · 오류<br/>R3·R4·R5 · 13분"] --> S4["4. 정리<br/>7분"]
요청문은 단계마다 ~/vibe/turl/PROMPTS.md에 남깁니다.
0. 준비 (3분)
mkdir -p ~/vibe/turl && cd ~/vibe/turl
git init
codex # 또는 claude, agy
1. 글자로 보내기 (12분)
목표: uv run turl send POST http://localhost:5678/webhook/my-meeting --body-file requests/weekly.json이 상태 · 시간 · 본문을 글자로 출력한다. 화면은 아직 없다.
▶ 1단계 · 프로젝트를 어떻게 시작하게 할까
에이전트는 우리 수업 규칙을 모릅니다. Python 패키지 관리를 무엇으로 할지, 명령 이름, 코드와 화면 글자의 언어를 적었나요? 오늘 n8n 실습의 AGENTS.md처럼 이 프로젝트의 규칙 파일을 먼저 만들게 해도 좋습니다.
▶ 2단계 · 보내는 부분을 따로
요청을 보내고 결과(상태, 시간, 본문)를 돌려주는 부분은 글자 모드, TUI, 기록이 모두 씁니다. 이 부분을 따로 만들고 테스트하게 하려면? 테스트에서 진짜 서버 대신 무엇을 쓸까요?
확인: 오늘 만든 my-meeting에 보내기, uv run pytest -q, git commit.
2. TUI (15분)
목표: 위 그림처럼 메서드 · URL · 보내기, 왼쪽 Body · Headers 탭, 오른쪽 응답.
▶ 1단계 · 화면을 말로 그리기
화면의 위 · 왼쪽 · 오른쪽에 무엇이 있는지, 버튼을 누르면 무엇이 바뀌는지 순서대로 적습니다. 응답이 오는 동안 화면이 굳지 않게 하려면?
3. 기록 · curl · 오류 (13분)
▶ 1단계 · 기록은 어디에
껐다 켜도 남으려면 파일에 써야 합니다. 어디에, 어떤 모양으로? 헤더에 비밀값(Authorization)이 있으면 기록에 그대로 남겨도 될까요?
▶ 2단계 · curl 명령의 따옴표
Body에 한국어, 따옴표, 줄바꿈이 있으면 만든 curl 명령이 깨지기 쉽습니다. 만든 명령을 실제로 실행해 같은 응답이 오는지 확인하게 합니다.
확인: my-meeting에 empty.json(400이 보이나), 꺼진 주소(오류가 보이나), curl 명령 실행, git commit.
4. 정리 (7분)
| 발표 (3분) | 내용 |
|---|---|
| 요청문 | 가장 잘 먹힌 요청문 한 개, 안 먹힌 요청문 한 개 (PROMPTS.md에서) |
| 막힌 곳 | 에이전트가 틀린 것, 어떻게 알아챘고 고쳤나 |
| 시연 | turl로 my-meeting 호출, curl 명령 복사 · 실행 |
확인
- R1
my-meeting에 보내 상태 · 시간 · 본문이 보인다. - R2
requests/*.json을 Body로 불러온다. - R3 껐다 켜도 기록이 남는다.
- R4 만든 curl 명령이 그대로 실행된다.
- R5 오류에서도 멈추지 않는다.
uv run pytest -q통과, 단계마다 git commit,PROMPTS.md.