LLM-agent를 잘 사용하기 위해 최소한의 지식도 부족한 것 같아 학습하려고했다.
GPT에게 프롬프트 작성해달라고 했다.
"클로드코드같은 llm? agent를 잘 이해하기위해서 클로드코드한테 알아야할 최소 개념에 대해 알려달라고 하고싶어. 내가 어떤걸 모르는지, 내가 모르는걸 클로드코드가 알기위해서 질문을 하도록 하기위한 프롬프트를 작성해줘"
❯ You are an expert LLM-agent tutor.
Your goal is NOT to explain concepts immediately.
Your first job is to diagnose what I already know and what I don’t know about LLM agents (like
Claude Code).
Follow this process strictly:
STEP 1 — Knowledge probing
Ask me a structured sequence of short questions to determine my understanding level in these areas:
- LLM fundamentals
- Prompting concepts
- Tool usage (function calling, external APIs, filesystem, terminal)
- Agent loop (plan → act → observe → iterate)
- Memory types (context window, persistent memory, retrieval)
- Code-generation workflows
- Failure handling / guardrails
- Cost / token usage model
Ask ONE question at a time.
After each answer, adjust the next question dynamically.
STEP 2 — Gap detection
After enough questions, summarize:
1) What I clearly understand
2) What I partially understand
3) What I likely misunderstand
4) What foundational concepts I completely lack
STEP 3 — Minimal learning set
From that analysis, produce ONLY the minimal concept list I must learn to properly understand Claude
Code-like agents.
Do NOT give long theory.
Only list the smallest necessary mental models.
STEP 4 — Targeted teaching mode
Only AFTER steps 1–3 are done, start teaching those missing concepts.
When teaching:
- Prefer short explanations
- Use concrete developer-style examples
- Use terminal / coding workflow examples when possible
- Avoid academic explanations
Important rules:
- Never dump all explanations at once
- Always diagnose before teaching
- Always minimize theory
- Always optimize for practical developer understanding
Start now with the FIRST diagnostic question only. response me as korean1. 학습 방식
튜터에게 "먼저 내 수준을 진단하고, 모르는 것만 가르쳐라"는 프롬프트를 만들어서 진단 질문을 던져달라고 했다. 질문 8개에 아는 만큼 답하니까 "아는 것 / 모르는 것" 목록이 나왔고, 모르는 5개 개념만 골라서 배웠다.
배우는 중간에 궁금한 건 바로 물었다. "런타임이 뭔데?", "샌드박스는 기능에 문제 없나?", "벡터 DB를 어떻게 써야 할지 감이 안 옴" 같은 질문들. 정해진 순서대로만 간 게 아니라 내 궁금증 기준으로 가지를 쳤다.
틀린 정보는 공식 문서로 잡았다. 튜터가 "커맨드와 스킬은 별개다"라고 했는데, 공식 문서에는 스킬로 통합됐다고 나와있었다.
5개 개념을 다 배운 후에는 검증 질문 8개를 풀면서 이해도를 확인했다.
2. 학습 내용
LLM은 텍스트만 출력한다
LLM이 직접 파일을 읽거나 명령을 실행하는 게 아니다. LLM은 {"tool": "Read", "file_path": "main.py"} 같은 JSON 텍스트를 출력할 뿐이고, 런타임이라는 별도 프로그램이 이걸 파싱해서 실제로 open("main.py")를 실행한다. Claude Code를 예로 들면, 터미널에서 claude를 쳤을 때 실행되는 Node.js 프로그램 자체가 런타임이다. LLM은 머리(생각만 함), 런타임은 몸(실제로 행동)이다.
같은 Claude LLM이라도 런타임에 따라 능력이 다르다. claude.ai에서는 대화만 가능하지만, Claude Code에서는 파일 읽기/쓰기, bash 실행, git 조작이 가능하다. 런타임이 어떤 도구를 제공하느냐의 차이다.
에이전트 루프
"버그 고쳐줘"라는 요청 하나가 내부적으로는 여러 번의 LLM API 호출로 이루어진다. 첫 번째 호출에서 LLM이 Glob("**/*.py")로 파일 구조를 파악하고, 두 번째 호출에서 Read("main.py")로 파일을 읽고, 세 번째 호출에서 Edit("main.py", ...)로 수정하고, 네 번째 호출에서 Bash("pytest")로 테스트를 돌린다. 테스트가 실패하면 다시 수정하고 테스트하는 루프를 반복한다.
루프가 끝나는 조건은 단순하다 — LLM이 도구 호출 없이 텍스트만 반환하면 런타임이 "끝났구나"하고 멈춘다. 무한루프 방지를 위해 max turns 제한, 사용자 중단(Ctrl+C), 토큰 한도 초과 같은 안전장치도 있다.
Few-shot prompting
LLM에게 함수명을 snake_case로 바꿔달라고 할 때, "camelCase를 snake_case로 바꿔줘"라고 설명만 하는 게 zero-shot이다. 대신 getUserName → get_user_name, setPageTitle → set_page_title 같은 예시를 2~3개 보여주는 게 few-shot이다. LLM은 패턴을 이어가는 기계라서 예시를 주면 그 형식을 정확하게 따라간다.
실전에서는 system prompt 안에 도구 호출 형식이나 git commit 메시지 형식을 few-shot 예시로 넣어서 LLM의 출력 포맷을 제어한다.
가드레일 4계층
LLM이 rm -rf / 같은 위험한 명령을 요청할 수 있기 때문에 여러 겹으로 방어한다.
1층은 system prompt 규칙이다. LLM 자체에 "destructive git commands는 사용자가 명시적으로 요청하지 않는 한 실행하지 마라"를 심어둔다. 2층은 권한/승인제다. 런타임이 도구 호출을 가로채서, Read는 자동 허용하고 Bash("rm -rf /")는 사용자에게 승인을 요청한다. 3층은 hooks다. .claude/settings.json에 PreToolUse hook을 정의해서, Bash 도구 실행 전에 rm -rf가 포함되어 있으면 exit 1로 차단하는 식이다. 4층은 샌드박스다. macOS 샌드박스 프로파일이나 Docker 컨테이너로 실행 환경 자체를 격리해서, 허용된 디렉토리 외에는 접근 자체가 불가능하게 만든다.
한 겹만 있으면 뚫릴 수 있으니 여러 겹으로 막는 구조다.
토큰 비용 누적
에이전트 루프의 매 호출마다 이전 대화 전체가 다시 전송된다. 1번째 호출에서 1만 토큰, 2번째에서 2만, 3번째에서 4만... 6번째 호출에서는 15만 토큰이 input으로 들어간다. 루프 6번이 단순 6배 비용이 아니라 기하급수적으로 늘어나는 이유다.
이를 완화하기 위한 장치들이 있다. CLAUDE.md는 프로젝트 루트에 두는 파일로, 매 세션 시작 시 system prompt에 자동 주입되어 "이 프로젝트는 TypeScript + Next.js, 테스트는 vitest" 같은 정보를 LLM이 매번 새로 파악하지 않아도 되게 한다. Auto Memory(MEMORY.md)는 LLM이 작업 중 배운 패턴을 자동으로 기록하는 파일로, 200줄까지 매 세션에 로드된다. PreCompact Hook은 컨텍스트 압축 직전에 자동 발동해서, 별도 Claude 인스턴스로 대화 전체를 요약한 HANDOVER-2026-02-20.md를 생성해 저장한다.
가장 실전적인 방법은 에이전트에게 범위를 좁혀서 지시하는 것이다. "전체 코드베이스 분석해줘"가 아니라 "src/auth.py의 login 함수 버그 봐줘"로 지시하면 불필요한 파일을 읽지 않아 컨텍스트를 아낄 수 있다.
스킬
.claude/skills/deploy/SKILL.md에 YAML frontmatter와 마크다운 지침을 작성하면 스킬이 된다. frontmatter의 name이 /deploy라는 슬래시 커맨드가 되고, description은 Claude가 자연어 매칭에 쓴다. "배포해줘"라고 말하면 Claude가 description을 보고 자동으로 deploy 스킬을 선택한다.
disable-model-invocation: true를 설정하면 사용자가 /deploy로만 호출할 수 있고 Claude가 자동으로 실행하지 않는다. 배포처럼 부작용이 큰 작업에 적합하다. 반대로 user-invocable: false로 설정하면 사용자 메뉴에는 안 보이고 Claude만 자동으로 사용할 수 있다. 레거시 시스템 컨텍스트처럼 배경지식 성격의 스킬에 적합하다.
기존에 .claude/commands/에 있던 커스텀 커맨드는 스킬로 통합됐다. 기존 파일도 호환되지만, 스킬이 지원 파일, frontmatter 제어, 자동 매칭 같은 추가 기능을 제공하므로 스킬 형식이 권장된다.
'개발끄적' 카테고리의 다른 글
| 날짜가 하루 전날로 표시된다? (환경에 따라 다른 Timezone) (0) | 2025.10.31 |
|---|---|
| mutationOptions (0) | 2025.10.21 |