Files
aio-01d4-stu/Last3Mon/67/VIBE-Q-TMAN.md
T

8.2 KiB

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

  • 시간: 16:00~16:50 (50분) · 발표와 정리는 8교시
  • 도구: CLI 코딩 에이전트(codex / claude / agy), Python + uv + Textual
  • 결과물: 명령어 이름을 넣으면 사용 예를 보여 주는 터미널 프로그램(TUI)
$ tman tar
┌ tman ─────────────────────────────────────────────┐
│ [ tar ]                                            │
│ ┌ tldr ┬ man ┐                                     │
│ │ 아카이브 유틸리티.                               │
│ │ - 아카이브 생성 후 파일로 저장:                  │
│ │   tar cf {{경로/대상/파일.tar}} {{파일1 ...}}    │
│ │ ...                                              │
└────────────────────────────────────────────────────┘

요청문은 직접 씁니다. 단계마다 ▶ 를 하나씩 펼치면 생각할 거리가 나옵니다. 정답 요청문은 없습니다.

요구 사항

번호 요구 확인 방법
R1 tldr pages.ko에서 명령어 페이지를 가져와 사용 예를 보여 준다 tman tar
R2 그 명령어의 man 결과가 있으면 별도 탭에 보여 준다 tman ls → man 탭
R3 사용 예(명령 줄)를 뺀 모든 설명은 한국어로 자동 번역한다 (한국어 페이지가 없을 때의 영어 tldr, man 설명) tman wcurl (한국어 페이지 없음), tman ls의 man 탭
R4 화면 안에서 다른 명령어를 검색할 수 있다 입력칸에 git

알아 둘 것 (수업 준비 때 확인):

  • 한국어 페이지 주소: https://raw.githubusercontent.com/tldr-pages/tldr/main/pages.ko/common/tar.md. common 외에 linux 폴더도 있습니다. 영어 페이지는 .../main/pages/common/<명령>.md.
  • 2026-10-17 기준 영어 pages/common 4,728개 중 한국어 페이지가 없는 것은 96개입니다 (예: wcurl, vllm). 번역이 가장 많이 필요한 곳은 man 탭입니다.
  • 페이지를 curl로 한 번 받아 모양을 직접 봅니다: curl -s https://raw.githubusercontent.com/tldr-pages/tldr/main/pages.ko/common/tar.md
  • 번역 LLM 키는 OPENAI_API_KEY 환경 변수로 받습니다 (~/aio-01d4-stu/Last3Mon/.env에 있는 값). 키를 코드에 쓰지 않습니다.
  • WSL에서 man ls가 "minimized" 안내만 보이면 man 페이지가 설치되지 않은 것입니다.

진행 (50분)

flowchart LR
  S0["0. 준비<br/>3분"] --> S1["1. 글자로 출력<br/>R1 · 10분"] --> S2["2. TUI · 탭<br/>R2·R4 · 15분"] --> S3["3. 번역 · 캐시<br/>R3 · 15분"] --> S4["4. 정리<br/>7분"]

요청문은 단계마다 ~/vibe/tman/PROMPTS.md에 남깁니다. 발표 때 씁니다.

0. 준비 (3분)

mkdir -p ~/vibe/tman && cd ~/vibe/tman
git init
codex        # 또는 claude, agy

1. 글자로 출력 (10분)

목표: uv run tman tar를 실행하면 tar의 한국어 페이지가 터미널에 글자로 나온다. 화면(TUI)은 아직 없다.

▶ 1단계 · 왜 화면부터 만들지 않나

화면과 데이터 가져오기를 한 번에 만들면, 안 될 때 어디가 문제인지 모릅니다. 가장 작은 동작(가져와서 출력)부터 확인하고, 다음 단계에서 화면을 얹습니다. 요청문에 "이번에는 하지 말 것"을 적어 보세요.

▶ 2단계 · 프로젝트를 어떻게 시작하게 할까

에이전트는 도구를 고를 때 우리 수업 규칙을 모릅니다. Python 패키지 관리를 무엇으로 할지, 패키지·명령 이름을 무엇으로 할지, 코드와 화면 글자를 어떤 언어로 쓸지 적었나요?

▶ 3단계 · 나중을 위해 나눠 두기

페이지 글자를 받아 "설명"과 "(사용 예 설명, 명령 줄)" 목록으로 나누는 부분은 2단계 화면, 3단계 번역에서 계속 씁니다. 이 부분을 따로 만들고 테스트하게 하려면 요청문에 무엇을 적어야 할까요? 페이지가 common에 없을 때는?

확인: uv run tman tar, uv run pytest -q, 그리고 git commit.

2. TUI와 탭 (15분)

목표: 위에 명령어 입력칸, 아래에 tldr · man 탭. 시작할 때 준 명령을 바로 보여 주고, 입력칸에서 바꿀 수 있다 (R2 · R4).

▶ 1단계 · 화면을 말로 그리기

위 그림처럼 화면의 위·아래에 무엇이 있는지, 탭 이름이 무엇인지, Enter를 누르면 무엇이 바뀌는지를 순서대로 적어 봅니다. 명령 줄은 설명과 구분되게 보여야 읽기 쉽습니다.

▶ 2단계 · man 탭의 까다로운 점

터미널에서 man ls를 그대로 받아 보면 페이지 넘김 프로그램과 굵은 글씨용 문자가 섞여 나옵니다. 화면에 깨끗하게 보이려면 어떻게 받아야 하는지 에이전트에게 조건으로 알려 줍니다. man이 없을 때 보여 줄 문구도 정합니다.

▶ 3단계 · 화면이 멈추지 않게

인터넷에서 페이지를 받는 동안 화면이 굳으면 불편합니다. 이 조건을 요청문에 넣었나요? 1단계에서 만든 부분을 다시 쓰라고 적었나요?

확인: uv run tman tar, uv run tman ls(탭 전환), 입력칸에 git → Enter, 그리고 git commit.

3. 번역과 캐시 (15분)

목표: 명령 줄은 그대로 두고 설명만 한국어로 (R3). 같은 내용은 다시 번역하지 않는다.

▶ 1단계 · 무엇을 번역하고 무엇을 남길까

tldr 영어 페이지와 man 결과에서 번역할 곳과 번역하면 안 되는 곳(명령 줄, 옵션 이름, 예시)을 구분해 적습니다. 직접 man ls 한 부분을 보며 어디까지가 "설명"인지 정해 봅니다.

▶ 2단계 · 키와 실패

어떤 모델로 번역할지, 키를 어디서 읽을지, 키가 없거나 번역이 실패하면 화면이 어떻게 되어야 하는지 정합니다. 키 값을 요청문에 붙여 넣지 않습니다.

▶ 3단계 · 돈과 시간 아끼기

man 페이지는 길어서 매번 번역하면 느리고 비용이 듭니다. 한 번 번역한 결과를 어디에 두고 다시 쓸지 정해 줍니다.

▶ 4단계 · 테스트에서 진짜 API를 부르지 않게

번역 테스트가 실제 LLM을 부르면 느리고, 돈이 들고, 결과가 매번 다릅니다. LLM을 부르는 부분을 바꿔 끼울 수 있게 만들고 테스트에서는 가짜를 쓰게 하려면 어떻게 요청할까요? (오늘 n8n에서 OpenAI와 Ollama를 바꿔 끼우던 것과 같은 생각입니다.)

export OPENAI_API_KEY=$(grep '^OPENAI_API_KEY=' ~/aio-01d4-stu/Last3Mon/.env | cut -d= -f2-)

확인: uv run tman wcurl(한국어 페이지 없음), uv run tman ls의 man 탭, uv run pytest -q, 그리고 git commit.

4. 정리 (7분)

  • README와 설치 방법(어디서나 tman 실행)도 에이전트에게 맡겨 봅니다. 무엇을 넣으라고 할지 직접 정합니다.
  • 발표 준비: 아래 3가지를 메모합니다.
발표 (3분) 내용
요청문 가장 잘 먹힌 요청문 한 개, 안 먹힌 요청문 한 개 (PROMPTS.md에서)
막힌 곳 에이전트가 틀린 것, 어떻게 알아챘고 어떻게 고쳤나
시연 tman tar, 탭 전환, 번역된 명령 하나

확인

  • R1 tman tar에 한국어 사용 예가 나온다.
  • R2 man 탭이 있고, man이 없으면 안내가 나온다.
  • R3 한국어 페이지가 없는 명령에서 설명은 한국어, 명령 줄은 원래 그대로다.
  • R4 입력칸으로 다른 명령을 볼 수 있다.
  • uv run pytest -q 통과, 단계마다 git commit이 있다, PROMPTS.md에 요청문이 남아 있다.