본문으로 건너뛰기

EP9. 소크라테스식 학습 스킬

Cocrates Learning Skills


Ep8에서 우리는 Learning Pipeline의 철학을 배웠다. 소크라테스 산파술, 블룸 분류학, ZPD — 왜 질문으로 답하는지 그 이유를 알게 되었다.

이제 그 철학이 실제 시스템에서는 어떻게 구현되어 있는지 들여다볼 차례다.

.opencode/skills/ 아래에는 세 개의 SKILL.md가 있다. education, knowledge-capture, reflection. 각 파일은 단순한 프롬프트가 아니라, 정교하게 설계된 워크플로우 명세다.

하나씩 열어보자.


🎓 Education — 소크라테스형 1:1 학습 코치

No Spoon-feeding

education 스킬의 첫 번째 규칙은 이것이다.

절대 완전한 정답이나 전체 해결책을 한 번에 주지 않는다.

사용자가 "DIP 원칙에 대해 알려줘"라고 요청해도, Cocrates는 개념 설명을 길게 늘어놓지 않는다. 핵심 원리를 1~3문장, 일상적인 비유로만 전달한다. 전체 응답의 20%를 넘지 않는 선에서.

그리고 항상 불완전한 상태로 대화를 멈춘다. 결함이 있는 예시, 열린 간극을 남겨두고 — 사용자가 직접 채우도록 기다린다.

Turn-based Mission — 세 블록 형식

모든 education 응답은 세 블록으로 구성된다.

💡 Concept Briefing: 핵심 원리를 1~3문장, 일상적인 비유로. 전체의 20% 이하.

💻 Thought Laboratory: 결함이 있는 실용적 예시나 확장된 시나리오. 사용자가 "어? 이거 왜 이렇게 짰지?"라는 의문을 품게 만든다.

🔥 MISSION: 사용자가 다음 턴에 생각하고 답변해야 할 정확히 하나의 과제. 단답형이 아니라, 자신의 말로 설명하고 새롭게 알게 된 점과 기존에 몰랐던 공백을 언급하도록 유도한다.

실제 대화를 예로 들어보겠다. 사용자가 "DIP가 뭐야?"라고 묻는다면:

💡 [Concept Briefing] DIP는 전원 플러그와 소켓 표준과 같습니다. 고수준 모듈이 저수준 세부사항에 직결되지 않고, 인터페이스에 의존해야 합니다.

💻 [Thought Lab]

class OrderService {
constructor(private db: MySQLDatabase) {}
}

🔥 [MISSION] MySQLDatabasePostgresDatabase로 바꾸면 무엇이 깨질까요? DIP를 위반하는 의존 방향을 하나 찾아 설명해 보세요.

정답을 주지 않는다. 다음 미션의 답을 미리 알려주지도 않는다. 사용자의 답변을 기다린다.

Bloom's 2D Matrix + Push & Pull

education 스킬은 Bloom's Taxonomy를 2차원 매트릭스로 사용한다. Cocrates는 두 축을 동시에 올리지 않는다. 같은 지식 차원에서 인지 과정을 한 단계 높이거나, 같은 인지 과정에서 지식 차원을 한 단계 넓힌다.

그리고 사용자 상태에 따라 Push(하→상 단계별 안내)와 Pull(상위 도전 먼저 제시) 전략을 선택한다. 초보자나 인지적 붕괴가 보이면 Push로 전환하고, 사전 지식이 있는 사용자에게는 Pull로 더 높은 도전을 먼저 제시한다.


📝 Knowledge Capture — 무지를 기록하라

Education 단계에서 학습한 내용은 기억에 의존해서는 안 된다. knowledge-capture 스킬은 학습한 내용을 kb/ 폴더에 회상용 핵심만 저장한다.

상세 설명이 아니라, 회상용 핵심

가장 중요한 원칙: 상세한 강의 노트, 긴 설명, 전체 코드를 저장하지 않는다.

하나의 bullet은 하나의 기억 단위 — 1~2문장을 넘지 않는다. 실제 저장되는 형식을 보자.

# Dependency Inversion Principle

## One-line Definition
고수준 모듈이 저수준 구현에 직접 의존하지 않고, 추상화(인터페이스)에 의존해야 한다는 원칙.

## Key Points
- 고수준 모듈은 저수준 구현에 직접 의존해서는 안 된다
- 인터페이스(추상화)에 의존하고, 구현체는 주입을 통해 받는다
- DIP는 단순히 "인터페이스를 쓰라"가 아니라, 의존의 방향이 핵심이다

## Wrong Assumptions / Gaps
- DIP = 무조건 새로운 인터페이스 파일을 만드는 것 (X)
→ 기존 코드와의 경계에서는 Adapter를 활용해 연결하는 것도 유효한 방법이다

핵심은 Wrong Assumptions / Gaps 섹션이다. 무지의 기록 — 내가 무엇을 틀렸는지 기록하는 것이 가장 강력한 학습 도구다.

Merge 전략

knowledge-capture는 저장 전에 항상 kb/ 디렉토리를 검색한다. 같은 주제의 파일이 이미 존재하면 새 파일을 만들지 않고 기존 파일에 보충(merge)한다.

  • 기존 KB의 내용은 절대 덮어쓰지 않고, 새 인사이트만 추가
  • 날짜와 추가 내용을 Update History에 기록

사용자가 배운 내용이 쌓일수록 KB는 단순한 노트가 아니라 개인 지식 베이스로 성장한다. 그리고 이 KB는 다음 단계 — Reflection의 핵심 자료가 된다.


🔍 Reflection — 면접관 모드

Learning Pipeline의 마지막이자 가장 중요한 단계.

Interviewer 페르소나

reflection 스킬의 가장 독특한 점은 페르소나다. Cocrates는 여기서 코치도, 선생님도 아닌 면접관이 된다.

가르치는 것이 목표가 아니다. 사용자가 이미 알고 있는 것과 모르는 것을 정확히 파악하는 것이 목표다. 사용자가 스스로 이렇게 말할 수 있게 하는 것 — "I know that I know nothing."

KB를 평가 기준으로 사용

Reflection은 저장된 KB 파일을 평가 기준으로 사용한다. Key Points 항목이 체크리스트가 되고, Wrong Assumptions / Gaps는 사용자가 실제로 그 간극을 메웠는지 확인하는 도구가 된다.

단, 중요한 차이가 있다. KB는 정답지가 아니다. 사용자의 현재 이해가 KB와 다르지만 논리적으로 일관된다면, KB 업데이트를 제안하는 것이 먼저다.

질문의 깊이

reflection이 던지는 질문은 정의를 묻는 것이 아니다.

  • "이 원칙을 다른 도메인의 예시로 설명해 보세요."
  • "이 코드는 어디서 원칙을 위반하고 있나요?"
  • "반대로 한다면 무엇이 깨질까요?"

면접관은 세 단계로 판단한다. Solid — 자신의 말로 설명, 올바른 적용. Partial — 방향은 맞지만 경계가 흐릿함. Gap — 암기만 가능, 모순 발생.

최종 산출물은 점수나 등급이 아니라 관찰과 발견이다.

✅ 확실히 아는 것 — DIP의 의존 방향을 다른 도메인 예시로 올바르게 설명함 ⚠️ 삐걱거리는 것 — DIP와 Interface Segregation의 경계, 두 원칙이 겹치는 부분에서 혼동

Gap이 발견되면?

reflection은 교육 모드로 전환하지 않는다. 더 좁은 각도로 한 번 더 질문을 던져 재확인하고, 그것도 안 되면 ⚠️ 항목으로 기록한다. 그리고 별도의 학습 세션을 제안한다. "이 부분은 교육 세션을 따로 진행하시겠어요?"


🔄 세 스킬의 연결과 순환

이 세 스킬은 독립적으로 존재하지 않는다. 하나의 완전한 학습 사이클을 만든다.

Education → Knowledge Capture → Reflection → (필요시) Education

각 스킬의 종료 조건이 다음 스킬의 시작 조건과 연결되어 있다.

  1. Education이 사용자의 이해를 확인하면 → Knowledge Capture 제안: "KB에 정리해 드릴까요?"
  2. Knowledge Capture가 저장을 완료하면 → Reflection 제안: "이 내용을 바탕으로 이해도를 확인해 볼까요?"
  3. Reflection에서 Gap이 발견되면 → 다시 Education 제안: "이 부분을 더 학습하시겠어요?"

이 순환은 사용자가 능동적으로 참여할 때만 작동한다. Cocrates가 제안은 하지만, 실제로 움직이는 것은 사용자다.


📌 오늘의 핵심

  1. Education은 No Spoon-feeding이 핵심이다. 세 블록(Concept Briefing → Thought Lab → MISSION) 형식으로 사용자가 스스로 발견하게 만든다.
  2. Knowledge Capture는 무지의 기록이다. 상세 설명이 아니라 회상용 핵심과 Wrong Assumptions/Gaps를 저장한다. 동일 주제는 Merge한다.
  3. Reflection은 면접관 모드다. KB를 평가 기준으로 사용하며, 결과는 ✅ 확실한 영역과 ⚠️ 삐걱거리는 영역으로 나뉜다. Gap 발견 시 Education으로 순환한다.

스스로에게 질문하자.

  • 내가 AI에게 배운 내용을 기록한다면, '상세한 요약'을 저장하는가, '내가 몰랐던 것'을 저장하는가?
  • 스스로의 이해도를 확인할 때, '아는 척'하지 않고 정직하게 ⚠️ 영역을 인정하는가?

🎬 다음 편 예고

Learning Pipeline의 내부까지 모두 살펴봤다. 이제 Cocrates의 두 번째 핵심 활동으로 넘어간다.

Artifact Generation Pipeline — 구조 기반 산출물 생성.

"그냥 작성해줘." 이 말 한마디가 왜 위험한지, ASR이 무엇인지, ADR과 Spec이 어떻게 산출물의 품질을 보장하는지. 전원주택 비유와 함께 알아보자.


이 시리즈는 Cocrates Harness 프레임워크를 소개합니다. Cocrates는 소크라테스식 대화로 사용자가 주도권을 잡고 성장하도록 설계된 에이전트 하네스입니다.