← making 메인으로

강사용 메뉴얼 — 이 사이트를 어떻게 만들었나

이 페이지는 본인 강의용으로 비슷한 사이트를 직접 만들어보려는 강사를 위한 작업 기록입니다. 광고가 아니라 작업 순서입니다. Claude Code 라는 CLI 와 몇 개의 마크다운 파일을 사용했고, 아래 6단계로 진행했습니다.

차례
  1. Claude Code CLI 설치
  2. 시작용 MD 파일 받기
  3. agent 환경 구축
  4. 주제·테마 정하기 (Claude 와 대화)
  5. 범위 정하기 (Part 분할 / 진화 지도)
  6. 코드·이미지 정리

Claude Code CLI 설치

터미널에서 다음 한 줄을 실행합니다. Node.js 18 이상이 필요합니다.

npm install -g @anthropic-ai/claude-code

설치 후 작업할 디렉토리로 이동해서 claude 명령으로 시작합니다. 첫 실행 때 브라우저로 로그인 창이 한 번 뜹니다.

$ mkdir my-course
$ cd my-course
$ claude
Anthropic 계정이 필요합니다. 토큰 사용량은 작업한 만큼 청구됩니다 — 이 사이트 전체를 만들 때 어느 정도 들었는지는 behind-the-scenes 페이지에 적어두었습니다.

시작용 MD 파일 받기

Claude Code 는 프로젝트 루트의 CLAUDE.md.claude/agents/*.md 를 자동으로 읽습니다. 이 파일들이 「어떤 톤·구조·금기 사항」으로 작업할지 결정하므로, 비어 있으면 Claude 가 멋대로 「상품화된 광고 페이지」 같은 걸 만들어버립니다.

이 사이트에서 사용한 시작용 파일을 그대로 받아서 본인 주제로 수정하세요. 이 저장소는 public 입니다 — 강사 누구나 GitHub 에서 클론해 본인 강의 사이트를 만들 수 있도록 준비됐습니다.

받는 방법은 5 가지 — 모두 같은 파일을 받아오는 다른 경로일 뿐입니다. 본인 환경과 의도에 맞는 탭을 골라 그 명령만 따라하세요. 강의 사이트로 발전시킬 거면 E (권장) 또는 C 가 자연스럽습니다 — 자기 GitHub 계정에 자기 repo 가 생기므로 받은 그대로 push 해서 본인 강의 사이트로 키울 수 있습니다.

⭐ Use this template — 가장 매끄러움 (강의 사이트 시작용 권장)

GitHub 페이지에서 초록색 "Use this template" 버튼 → "Create a new repository" → 본인 계정에 깨끗한 히스토리의 새 repo 가 생성됩니다 (이 저장소와 connection 없는 분리된 새 repo).

git clone https://github.com/<본인>/<새-repo-이름>.git
cd <새-repo-이름>

C. Fork → clone — 자기 GitHub 으로 가져가기

GitHub 페이지의 Fork 버튼 → 본인 계정에 fork (이 저장소와 upstream 연결).

git clone https://github.com/<본인>/course-template.git
cd course-template

E 와의 차이 — E 는 완전히 분리된 새 repo (강의 사이트 시작용), C 는 upstream 으로 묶인 fork (본 저장소에 개선 PR 보내고 싶을 때).

A. 표준 git clone — 로컬에서만 둘러보기

git clone https://github.com/icom009/course-template.git
cd course-template

자기 GitHub 계정이 없거나 push 할 곳이 따로 있을 때.

B. Shallow clone — 더 빠르고 가볍게

git clone --depth 1 https://github.com/icom009/course-template.git
cd course-template

A 와 동일하지만 커밋 히스토리 없이 받음 (용량 절약, 첫 시도에 가장 빠름).

D. ZIP 다운로드 — git 없이

main 브랜치 zip 바로 받기 ⬇

git 안 깔린 환경용. 압축 풀면 course-template-main/ 폴더 생성 — .git 디렉토리 없으니 나중에 push 하려면 git init 다시 필요.

받은 다음 (5 가지 모두 공통) — 받은 그 폴더 안에 들어가서 (예: cd course-template) 다음 세 줄을 차례로 실행하세요. 각 줄이 뭘 하는지는 아래 설명을 참고하세요.

# 1. 본인 강의용 폴더를 새로 만들기
mkdir ~/<자기강의명>

# 2. starter 안의 내용물을 (숨김 파일까지) 그 폴더로 복사하기
cp -r starter/. ~/<자기강의명>/

# 3. 새로 만들어진 폴더로 이동해서 작업 시작
cd ~/<자기강의명>

위 명령이 각각 뭘 하는지

한 줄 요약 — "내 홈에 새 폴더 하나 만들고 → starter 알맹이를 거기로 옮긴 뒤 → 그리로 들어간다." 그게 끝입니다.

복사된 그 자리에 이미 6 개 에이전트가 박혀 있습니다. claude 한 번 실행하고 "커리큘럼 짜줘" 한 마디면 시작됩니다.

▶ 개별 파일

agent 환경 구축

받은 파일을 다음 구조로 프로젝트 루트에 둡니다.

my-course/
├── CLAUDE.md
├── CODE-STANDARD.md
├── scripts/
│   └── check-overflow.js
└── .claude/
    └── agents/
        ├── content-author.md
        ├── visual-designer.md
        ├── convention-auditor.md
        ├── flow-verifier.md
        ├── documentation-curator.md
        └── layout-verifier.md

.claude/ 폴더는 점(.) 으로 시작하므로 ls 에서 안 보일 수 있습니다. ls -a 로 확인하세요. 파일을 둔 다음 claude 명령으로 다시 들어가면 자동으로 인식합니다. 이후 「커리큘럼 짜줘」 라고 하면 content-author 에이전트가 호출됩니다.

각 에이전트의 역할은 파일 상단 frontmatter 에 적혀 있습니다. 본인 도메인에 맞춰 수정하세요 — 예를 들어 「Spring 기초 과정」 부분을 「JavaScript 기초」 로 바꾸는 식입니다.

주제·테마 정하기 (Claude 와 대화)

여기가 이 메뉴얼에서 가장 중요한 단계입니다. 「커리큘럼 짜줘」 라고 한 번에 던지지 말고, 티키타카로 좁혀가야 학생이 풀 수 있는 산출물에 도달합니다. 처음부터 완벽한 프롬프트를 쓰려고 하지 말고, 그냥 평소 말하듯이 시작하세요.

실제로 다른 강사가 JavaScript 기초 강의를 만들 때의 대화를 그대로 옮긴 것입니다.

[나]

JavaScript 기초 강의를 만들고 싶어. 4주 정도 분량이고, 프로그래밍 처음 배우는 사람들이 대상이야.

[Claude]

좋아요. 4주 / 처음 배우는 사람 기준이면 보통 다음 정도가 무난합니다:

  • 1주차: 기본 문법 — 변수, 연산, 조건문, 반복문
  • 2주차: 함수와 객체
  • 3주차: 배열 다루기 + DOM 조작 기초
  • 4주차: 작은 앱 만들기 (To-do 같은 것)

이게 너무 좁거나 넓다고 느껴지나요? 하루에 몇 시간씩 진행하나요?

[나]

하루 3시간씩, 주 2회. DOM 조작은 좀 어려울 것 같은데. 이전 학기에 비슷하게 했더니 학생들이 3주차에 다 떨어져나갔어.

[Claude]

그러면 DOM 을 줄이고 「언어 자체로 할 수 있는 일」 에 더 시간을 주는 게 맞겠습니다. 두 가지 방향이 가능해요:

  • A안: 3주차를 「DOM 은 보여주기만」 으로 두고, 4주차 작품은 콘솔 기반 미니게임 (숫자 맞히기) 으로 가기
  • B안: 3주차에 DOM 의 가장 단순한 부분 (textContent, onclick) 만 익히고, 4주차에 버튼 클릭으로 동작하는 미니게임 만들기

이전 학기에 떨어져나간 이유가 「화면 조작이 안 떠올라서」 였는지, 「이벤트 개념을 못 따라와서」 였는지에 따라 답이 달라집니다.

[나]

이벤트 쪽이 문제였어. addEventListener 만 나오면 다들 멍해져.

[Claude]

그러면 B안에서 addEventListener 를 빼고 onclick 속성만 쓰는 형태로 가는 게 안전합니다. 마무리 산출물을 「숫자 맞히기 게임」 으로 잡고 v0 → v∞ 로 진화시키면:

  • v0: 콘솔에 숫자 출력만
  • v1: prompt() 로 입력받아 비교
  • v2: 버튼 + onclick 으로 화면 위에서 동작
  • v3: 시도 횟수 기록 / 힌트 메시지

이 진화 지도에 동의하시면 5단계 (Part 분할) 로 넘어가서 차시 수까지 견적 내겠습니다.

[나]

좋아 그렇게 가자.

위에서 본 것처럼, 좋은 결과는 「한 번에 받는 것」 이 아니라 「강사가 자기 학생을 알기 때문에 좁혀가는 것」 입니다. Claude 는 일반론을 줄 뿐이고, 「3주차에 다 떨어져나갔어」 같은 정보를 넣어주는 게 강사의 몫입니다.

이 단계의 산출물은 다음 한 줄입니다 — 한 줄로 정리되지 않으면 아직 5단계로 넘어가면 안 됩니다.

4주 / 입문 / 마무리 산출물 = 숫자 맞히기 게임 (v0→v3)
이벤트는 onclick 만, addEventListener 는 후속 과정으로 분리

범위 정하기 (Part 분할 / 진화 지도)

4단계의 한 줄 정리를 Claude 에 다시 던지면, 받아둔 content-author 에이전트가 표를 그려줍니다. 이 표는 본인이 검토해서 직접 줄이거나 늘려야 합니다.

예시 — 위 JavaScript 강의의 진화 지도:

버전마일스톤위치예상 차시 수
v0콘솔에 숫자 출력1주차 전반3
v1prompt 입력 + 비교1주차 후반 ~ 2주차4
v2버튼 클릭으로 동작3주차4
v3시도 기록 + 힌트4주차3
v∞디버깅 워크숍4주차 마지막1

이 단계에서 자주 하는 실수는 v 단계를 너무 잘게 쪼개는 것 입니다. v 가 늘어날수록 「이번 시간 우리가 어디로 진화하는가」 의 변화 폭이 작아져서 학생이 「지난 시간이랑 똑같은데?」 라고 느낍니다. 한 v 안에서는 눈에 띄는 변화 — 화면이 달라지거나 새 입력이 추가되거나 — 가 일어나야 합니다.

Part 분할은 CLAUDE.mdPart 약어 표 에 기록합니다. 본인 강의에 맞춰 약어와 색상을 바꾸세요. 이 표가 곧 index.html 의 카드 색상이 됩니다.

코드·이미지 정리

CODE-STANDARD.md 작성

4·5단계에서 정한 「마무리 산출물」 의 도메인 모델을 한 번 정해두지 않으면, Claude 가 슬라이드마다 다른 변수명·다른 클래스명을 쓰게 됩니다. 받은 CODE-STANDARD.md 를 본인 강의에 맞춰 수정합니다.

# CODE-STANDARD.md 예시 (JavaScript 강의)

## 도메인
- 게임 객체 변수명은 `game`
- 답 변수명은 `answer` (`target`, `secret` 금지)
- 사용자 입력 변수명은 `guess`

## 표기
- 셸 입력: `$ ` 접두사
- 콘솔 출력: 접두사 없음
- 함수명: camelCase

인포그래픽·이미지

슬라이드 안의 빈 블록은 누락이 아닙니다 — 슬라이드 템플릿(starter/slides/template.html) 안에 보이는 <div data-infographic="..."> 빈 블록은 본문 작성 단계에서는 의도적으로 비워 둔 자리입니다. content-author 가 본문을 채운 뒤 visual-designer 에이전트 가 이 자리를 인포그래픽 SVG 또는 실사 이미지로 자동으로 채워 넣습니다 (js/infographics.js 에 등록). "내용이 빠졌나?" 싶은 칸이 보이면 거의 다 이 자리표시입니다.

슬라이드와 예제에 들어갈 다이어그램은 가능하면 HTML/CSS 로 그리는 텍스트 다이어그램 으로 처리하는 게 안전합니다 — 외부 이미지를 쓰면 라이선스·해상도·다크모드 호환을 매번 확인해야 합니다.

그래도 외부 이미지가 필요하면 다음 출처가 비교적 안전합니다.

출처라이선스비고
UnsplashUnsplash License상업적 사용 가능, 출처 표기 권장
Wikimedia Commons이미지마다 다름각 파일 페이지 라이선스 확인 필수
본인이 직접 캡처본인 소유가장 안전. IDE 스크린샷 등

이 사이트에서는 외부 이미지를 거의 쓰지 않았고, 대부분 .flow-diagram / .box 같은 텍스트 다이어그램으로 처리했습니다.