
Claude Code Skills로 '나만의 학습 도구'를 만드는 4가지 설계 패턴
요약
Claude Code Skills를 활용해 단순 프롬프트를 넘어 상태 관리와 모드 분기가 가능한 '학습 도구'를 설계하는 4가지 패턴을 소개합니다. 파일 시스템을 활용한 상태 외부화와 모드 분기 설계를 통해 지속 가능한 AI 에이전트 구축 방법을 다룹니다.
핵심 포인트
- Skill을 단순 프롬프트가 아닌 상태 관리가 가능한 '작은 앱'으로 설계해야 함
- AI의 기억(상태)은 파일 시스템(Markdown 등)에 외부화하여 세션 간 유지
- 하나의 Skill 내에서 인자(Argument)를 통해 출제·채점·복습 모드를 분기 관리
- 상태를 기록할 장부(Progress file)의 구조를 먼저 설계하는 것이 핵심
「기술 면접의 연습 상대(Wall-hitting partner)를 Skill로 만든다」——그런 기사를 보고, 직접 만들어보려고 시도한 분들이 많을 것입니다. 저 또한 그중 한 명이었습니다. 하지만 막상 손을 움직여보니 막히는 부분은 면접 내용이 아니라, 「Skill을 어떻게 설계해야 학습 도구로서 기능할 것인가」 하는 부분이었습니다.
Claude Code Skills의 「사용법」을 소개하는 기사는 늘어나고 있습니다. 하지만 「만드는 방식(Pattern)」——상태를 어디에 가질 것인가, 모드를 어떻게 나눌 것인가, 지시사항을 어떻게 구조화할 것인가——를 다룬 기사는 의외로 적습니다. 이 기사에서는 여러 개의 Skill을 직접 만들어보며 몸에 익힌 4가지 설계 패턴을 복사해서 바로 사용할 수 있는 형태로 정리합니다. 면접 드릴(Drill)은 그 패턴을 적용하는 사례 중 하나로 마지막에 다루겠습니다.
먼저 인식을 맞춰둡시다. Skill을 「편리한 프롬프트 저장소」라고 생각한다면 학습 도구로서는 지속될 수 없습니다. 학습 도구는 세션을 넘나들며 진척도가 남아야 하고, 출제·채점·복습에 따라 AI의 행동을 바꿔야 하며, 게다가 지시사항이 비대해지기 쉽기 때문입니다.
즉, Skill은 상태 관리(State management)·모드 분기(Mode branching)·정보 설계(Information design)를 가진 작은 앱으로서 설계하는 것이 정답이었습니다. 최소 구조는 다음과 같습니다.
---
name: interview-drill
description: >
...
description은 「어떤 상황에서 호출되는가」를 AI가 판단하는 재료가 되므로, 트리거(Trigger)와 사용법(Usage)까지 적어두는 것이 요령입니다. 여기서부터 4가지 패턴을 겹쳐 나가겠습니다.
학습 도구의 핵심은 **상태 관리(State management)**입니다. 「지난번에 어디까지 했는지」, 「무엇을 틀렸는지」가 사라지면 그저 일문일답으로 끝나고 맙니다.
제가 처음 AI 에이전트를 구성했을 때, 세션이 끊길 때마다 문맥을 기억하지 못해 매번 처음부터 다시 설명해야 했습니다. 그래서 세션 종료 시 인계 메모(handoff 파일)를 자동으로 생성하여, 진행 중인 태스크·보류 사항·다음 액션을 구조화하여 저장하는 메커니즘을 도입했더니, 재개 시 문맥 복원이 5초 만에 끝났고 「지난번에 어디까지 했더라?」라는 대화가 사라졌습니다. 이때 배운 것은, AI의 「기억」은 파일 시스템에 외부화(Externalization)하는 것이 현실적인 해답이라는 점입니다.
학습 도구도 마찬가지로, 상태는 DB가 아니라 한 장의 Markdown 장부에 담습니다. 이는 CLAUDE.md를 「AI를 위한 인계서」로 설계해 온 감각과 맞닿아 있습니다. 인간 신입 사원용 문서와 같은 입도로 작성하면 정밀도가 높아진다는 경험이 그대로 적용됩니다.
<!-- .drill/progress.md — 학습 장부 (Skill이 읽고 쓰는 파일) -->
# 면접 드릴 진척도
## 출제 완료 · 성적
...
포인트는 장부의 「열(Column)」을 먼저 결정하는 것입니다. 약점 태그 열이 있기 때문에 후술할 복습 모드가 성립됩니다. 상태 설계가 도구의 기능을 결정합니다.
출제·채점·복습을 별개의 Skill로 나누면 장부의 읽기/쓰기가 분산되어 망가지기 쉽습니다. 하나의 Skill에 인자(Argument)로 모드를 전달하고, 내부에서 분기시키는 것이 관리하기 쉬운 형태였습니다.
## 모드 분기
- 인자 없음 / `start` → **출제 모드**: 장부의 약점 태그를 우선하여 한 문제 출제
- `grade` → **채점 모드**: 직전 답변을 5단계로 채점하고, 3점 이하일 경우 복습 큐에 추가
...
분기에서 효과적인 것은 모드별 채점 기준을 구체적인 예시로 고정하는 것입니다. 이전에 AI에게 코드 리뷰를 부탁했을 때, 지적의 입도가 제각각이라 사소한 스타일 지적과 중대한 버그가 동등하게 나열되었습니다. 그래서 중요도(Critical/Warning/Info) 분류 기준을 Few-shot 예시로 3가지 패턴 첨부했더니 출력이 정리되어 확인 시간이 절반으로 줄었습니다. 배운 점은 명확합니다. 규칙을 문장으로 쓰는 것보다, 구체적인 예시를 3개 보여주는 것이 제어력이 더 높다는 것입니다. 채점 모드에도 같은 방법을 사용합니다.
## 채점 모드 기준 (Few-shot)
- 예1: 정의가 정확함 + 구체적 예시 있음 + 트레이드오프(Trade-off) 언급 → 5
- 예2: 정의는 맞지만 구체적 예시 없음 → 3
...
Skill은 방치하면 비대해집니다. 이전에 CLAUDE.md가 500행을 넘었을 때, 응답이 느려지고 지시의 우선순위도 모호해졌습니다. 루트(Root)에는 방침만, 상세 내용은 서브 파일로 분할하고, 최우선 제약 사항만 서두에 IMPORTANT로 작성한다——이러한 계층화로 응답 속도가 체감상 1.5배 빨라졌고 규약 위반도 줄어들었습니다.
Skill에서도 동일한 정보 설계(Information Design)를 사용합니다. SKILL.md 본체는 '절차의 골격'만 남기고, 분야별 문제 뱅크(Problem Bank)나 상세한 채점 루브릭(Rubric)은 별도 파일로 분리하여 필요할 때만 읽어오도록 합니다. 이것이 단계적 공개(Progressive Disclosure)입니다.
skills/interview-drill/
├── SKILL.md # 골격 (가볍게 유지 · 50행 이내 권장)
├── rubric.md # 상세한 채점 루브릭 (채점 모드에서 참조)
...
<!-- SKILL.md 내부 -->
출제할 분야가 결정되면, 대응하는 `banks/{분야}.md`를 읽어온 후 출제한다.
채점 시에는 `rubric.md`의 기준을 따른다.
본체를 가볍게 유지하면 AI가 매번 전체 문맥을 안고 갈 필요가 없어 판단이 흔들리지 않습니다. **'처음에 전부 읽히지 않는 설계'**가 곧 도구의 안정성으로 이어집니다.
마지막은 행동 양식(Behavior Pattern)입니다. 학습 도구에서 가장 피해야 할 것은 AI가 문제와 모범 답안을 한꺼번에 내놓는 것입니다. 이렇게 되면 학습이 되지 않습니다.
이는 레거시 코드의 리팩터링(Refactoring)을 AI에게 맡겼을 때의 배움과 같았습니다. 약 1만 행의 코드를 갑자기 새로 쓰게 하지 않고, '먼저 구조 분석 → 의존 관계 맵 작성 → 단계적 분할' 순으로 절차를 밟게 했더니, 3,500행까지 압축해도 기존 테스트가 모두 통과되었습니다. AI는 묵묵히 일괄 처리해 버리는 경향이 있으므로, 사용자가 단계(Step)를 나누어 줄 필요가 있습니다. 학습 도구에서는 이 '단계를 나누는 것'을 Skill의 규칙으로 명문화합니다.
## 진행 규칙 (중요)
1. 문제를 출제하면, **정답을 내지 말고** 사용자의 답변을 기다린다
2. 답변이 오면 채점하고, **먼저 힌트만** 제공한다
...
지금까지의 4가지를 조합하면, 서두에서 언급한 '면접 연습 상대'는 다음과 같이 구성됩니다.
- 장부(Ledger):
progress.md에 성적과 약점 태그를 축적 (패턴 1) - 모드(Mode):
start / grade / review로 출제·채점·복습을 분기 (패턴 2) - 단계적 공개(Progressive Disclosure): 분야별 문제 뱅크를 필요할 때만 읽어옴 (패턴 3)
- 진행 규칙(Protocol): 한 문제씩, 정답을 재촉하지 않음 (패턴 4)
면접 드릴(Drill)은 하나의 예시일 뿐입니다. 동일한 형식을 '영단어 간격 반복(Spaced Repetition)', '설계 리뷰 연습', '자격증 시험 기출문제 연습' 등 상태가 유지되고 모드에 따라 동작이 변하는 모든 학습 도구에 그대로 적용할 수 있습니다.
가장 큰 함정은 AI가 장부 업데이트를 잊어버리는 것이었습니다. 출제나 채점에 집중하다 보니 progress.md에 쓰는 과정을 건너뛰는 일이 발생했습니다. 결과적으로 다음 세션에서 진척도가 비어 있는 사고가 초기 며칠 동안 몇 번 있었습니다.
대책은 간단합니다. 각 모드 절차의 끝에 '반드시 장부를 업데이트할 것'을 명시하고, 가능하다면 Hooks를 통해 변경 사항을 기계적으로 감지하는 것입니다. AI의 행동에 자동 체크포인트를 설정해 두면 기록 누락을 제로(0)로 만들 수 있습니다. '말하지 않아도 알겠지'라는 생각은 통하지 않는다는 것이 교훈이었습니다.
| 패턴 | 결정 사항 | 구현 핵심 |
|---|---|---|
| ① 상태 = Markdown 장부 | 진척도·약점을 어디에 남길 것인가 | 열(Schema)을 먼저 설계. DB가 아닌 단일 MD 파일로 충분 |
| ... |
Skill은 '똑똑한 프롬프트'가 아니라 '작은 앱(Small App)'입니다. 이 관점으로 전환하면 학습 도구뿐만 아니라 자신만의 도구를 훨씬 쉽게 만들 수 있습니다. 우선 장부 한 장과 두 개의 모드로 시작해 보시는 것을 추천합니다.
이 글이 도움이 되었다면 좋아요와 저장(Stock) 부탁드립니다. 큰 힘이 됩니다.
Claude Code, AI 에이전트, 업무 자동화 구현 팁을 지속적으로 발신하고 있습니다. 팔로우해 두시면 새로운 소식을 받아보실 수 있습니다.
여러분은 어떤 '나만의 학습 도구'를 Skill로 만들어보고 싶으신가요? 댓글로 알려주세요.
AI 자동 생성 콘텐츠
본 콘텐츠는 Qiita AI의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기